k8s编程operator——(4) kubebuilder & controller-runtime源码分析

使用KubeBuilder入门Kubernetes二次开发 Kubernetes 的使用者将通过学习其 APIs 是如何设计和实现的,从而更深入地了解 Kubernetes 。这本书将教读者如何开发自己的 Kubernetes APIs 以及如何设计核心 Kubernetes API 的原理。官方文档链接:引言 - The Kubebuilder BookKubeBuilder 是Go语言实现的一个工具,用于k8s开发的脚手架,通过基础配置可以生成一个代码模板,这个代码模板可以实现创建CRD资源对象。1、下载kubebuilder 2、验证安装是否成功 3.... 阅读详情


参考资料:https://book.kubebuilder.io/

k8s编程operator系列:
k8s编程operator——(1) client-go基础部分
k8s编程operator——(2) client-go中的informer
k8s编程operator——(3) 自定义资源CRD
k8s编程operator——(4) kubebuilder & controller-runtime
k8s编程operator实战之云编码平台——①架构设计
k8s编程operator实战之云编码平台——②controller初步实现
k8s编程operator实战之云编码平台——③Code-Server Pod访问实现
k8s编程operator实战之云编码平台——④web后端实现
k8s编程operator实战之云编码平台——⑤项目完成、部署
 

1、KubeBuilder使用

1.1 下载

需要的条件:

  • go version:v1.19+
  • docker version:version 17.03+
  • kubectl version:version v1.11.3+
  • k8s cluster:v1.11.3+

安装kubebuilder:

# download kubebuilder and install locally.
curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/

 

1.2 使用

1、创建工程

# 创建一个文件夹
mkdir kubebuilder-demo
cd kubuilder-demo

# 初始化工程
kubebuilder init

# 或者使用下面命令来指定domain,如果不指定,默认的domain就是my.domain
kubebuilder init --domain <domain>

使用kubebuilder init命令初始化后,kubebuilder会为我们生成一套工程模板,并下载依赖,kubebuilder生成的模板中的代码是依赖于controller-runtime来实现的。初始化,后它会提示我们来创建一个api:

在这里插入图片描述

我们首先看使用kubebuilder为我们生成了哪些文件:

config文件夹:里面是一系列的yaml文件

Dockerfile:构建该程序Docker镜像的Dockerfile

Makefile:在Makefile中有很多有用的命令,比如生成我们的CRD的yaml文件;生成RBAC文件;生成DeepCopy等方法实现;构建项目;构建Docker镜像;安装CRD到我们的集群中;从集群中卸载CRD;部署我们的controller到集群中等。

在这里插入图片描述

使用make help可以查看Makefile给我们提供了哪些命令:
在这里插入图片描述

 

2、创建api

# 创建api,需要指定 GVK
kubebuilder create api --group test.com --version v1 --kind Foo

使用kubebuilder create api命令,会提示我们是否创建Resource以及Controller,最后提示我们下个步骤是make manifests

在这里插入图片描述

然后我们来查看一下,这个步骤生成了哪些文件:

如下图,create api命令生成了我们的工程代码文件。

  • api目录:这个目录中是我们的自定义资源的go类型以及类型注册
  • bin目录:bin目录下是kubebuilder使用的用于生成自定义资源的go类型以及CRD、RBAC等yaml文件的程序
  • crd目录:CRD的yaml文件
  • sample目录:创建自定义资源(CR)的yaml文件
  • controllers目录:我们要实现的controller
  • main.go:main文件

在这里插入图片描述

使用kubebuilder -h命令可以查看kubebuilder的使用帮助信息:

kubebuilder使用插件的形式来生成我们的工程模板,有多种插件,默认使用的是go.kubebuilder.io/v3,在使用时使用默认的即可。

在这里插入图片描述

下图为bukebuilder中的源码,可以看到其使用了插件的设计。

在这里插入图片描述

在插件中定义了我们的工程代码的模板,然后根据我们使用kubebuilder时的参数选项对模板进行渲染来生成我们的工程文件。

在这里插入图片描述
在这里插入图片描述

在我们工程的bin目录下有一个controller-gen的可执行文件,kubebuilder用它来生成我们的工具代码以及kubernetes的yaml文件。

 

3.修改types文件中的字段

接下来我们就可以修改types.go文件中的自定义资源的go类型来添加我们需要的字段。

比如我们可以给FooSpec添加下面三个字段。

在这里插入图片描述

在修改完types文件后,需要执行make manifests命令来生成CRD的yaml文件

# 重新生成CRD
make manifests

执行命令后,在crd/base文件夹下根据我们的Type生成了CRD的yaml文件:

在这里插入图片描述

 

4、安装CRD

使用下面的命令来安装CRD到我们的集群中

make install

但是在执行这一步的时候可能会报错:
在这里插入图片描述

执行这个命令需要使用kustomize,我们可以先把它下载到bin目录在执行这个命令

# 下载kustomize
make kustomize

如果下载不下来,那么你需要一个科学上网。

如果没有报错,可以不下载。下载下来之后,重新执行make install。

但是如果实在下不下来,那么可以自己来安装CRD:

kubectl apply -f ./config/crd/bases/test.com.my.domain_foos.yaml

安装完成后,使用kubectl来查看:

kubectl get crd

在这里插入图片描述

 

5、启动我们的程序

在启动程序前,修改一下我们的controller:

在foo_controller.go中有一个Reconcile方法,我们的主要逻辑就在这里实现,在这就简单打印一下:

func (r *FooReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	log := log.FromContext(ctx)

	// TODO(user): your logic here
	obj := testcomv1.Foo{}
	err := r.Client.Get(context.Background(), req.NamespacedName, &obj)
	if err != nil {
		log.Error(err, "get foo")
		return ctrl.Result{Requeue: true, RequeueAfter: time.Second * 10}, err
	}
	fmt.Println("foo name:", obj.Name)

	return ctrl.Result{}, nil
}

然后,使用下面命令来启动程序

make run

如下图所示,程序已经启动起来,但是由于我们的自定义资源中还没有对象,因此没有收到信息:

在这里插入图片描述

 

6、创建自定义资源对象

使用下面的命令来创建自定义资源对象:

[root@master kubebuilder-demo]# kubectl create -f config/samples/
foo.test.com.my.domain/foo-sample created

在创建自定义资源对象后,我们的程序就收到了信息:

在这里插入图片描述

 

到此,一个简单的kubebuilder使用就介绍完了,使用kubebuilder可以生成我们的controller的工程模板代码,这些代码依赖controller-runtime这个库,在后面将会介绍。同时还会生成一系列工具,使用工具可以生成Docker镜像、CRD的yaml文件、RBAC的yaml文件等。

 

2、controller-runtime

更新中...

Kubebuilder实现mysql-operator kubebuilder实现mysql-operator 阅读详情

相关推荐

kubernetes 21、operator源码分析

目标: 掌握kubernetes operator的开发,并弄清楚operator的原理 1 安装 1.1 安装go开发环境 cd /etc cp -rf yum.repos.d yum.repos.d_bak cd /etc/yum.repos.d/ rm -rf ./* wget http://mirrors.aliyun.com/repo/Centos-7.repo mv Centos-7...

qingyuanluofeng的专栏 1299

kubebuilder实战一:什么是CRD编程,什么是operator开发?

介绍crd编程和operator开发的概念,以及operator开发常用的框架工具kubebuilder与operator-sdk

xingyunyang的博客 5566

kubebuilder实现k8s operator模式

背景 在Kubernetes中,希望通过CRD的方式定义业务资源,并通过Watch这些CR Object来做出相应的业务操作,也就是K8S Operator的实现,但是从零开始实现K8S Operator,是一件非常繁杂和困难的事情,好在当前社区提供了丰富的Operator实现框架,最热门的当属kubebuilder。 本文将参考官方文档在Ubuntu18.04进行实践 Installation 1.kubebuilder安装 os=$(go env GOOS) arch=$(go env GOARCH

linclaus的博客 2009

认识Kubebuilder

Kubebuilder是一个旨在简化创建Kubernetes operators的框架。它使您能够直接从终端生成项目样板,包括诸如Makefile、Dockerfile和主要源文件(如main.go)等基本组件。一旦项目创建完成,Kubebuilder还可以帮助生成配置自定义资源定义(CRD)、控制器和Webhook的必要文件。

zhengzaifeidelushang的博客 2294

7.2 选择你的开发利器:Operator SDK vs Kubebuilder全方位对比

Operator开发工具对比摘要 Operator SDK和Kubebuilder是两种主流的Kubernetes Operator开发工具。Operator SDK由Red Hat开发,支持Go、Ansible和Helm三种开发方式,提供完整的工具链并与OLM深度集成。Kubebuilder由Kubernetes社区维护,专注于Go语言开发,架构更轻量级且社区更活跃。两者都支持API生成、Controller开发和Webhook创建,但Operator SDK在多语言支持和企业级部署(OLM)方面更有优势

yonggeit的博客 3620

Kubernetes Operator开发实战:从入门到生产部署

Operator是云原生领域扩展Kubernetes能力的核心模式,通过自定义资源(CRD)和控制器(Controller)将运维知识编码为自动化逻辑。其技术原理基于声明式API和调谐循环(Reconciliation Loop),能够显著提升有状态服务的管理效率。在工程实践中,Kubebuilder作为官方推荐框架,提供了完整的脚手架工具和最佳实践规范,支持快速构建生产级Operator。典型应用场景包括数据库集群管理、中间件运维等需要复杂生命周期管理的场景。本文以MySQL Operator为例,详细演

599

k8s笔记——kubebuilder实战

Kubebuilder 是一个基于来构建 Kubernetes API 的框架,可以使用来构建 API、Controller 和 Admission Webhook。

mirana的专栏 3043

Qt Design Studio 入门指南:从零开始打造炫酷UI(详细+实用+轻松上手)

本文是Qt Design Studio的详细入门指南,旨在帮助UI设计新手从零开始轻松打造炫酷界面。文章系统介绍了软件的核心概念、安装步骤、主界面解析,并通过创建一个完整的登录界面实例,手把手教学如何拖拽组件、设置属性、添加交互状态与动画。同时,分享了创建自定义组件、管理资源以及提升效率的实用技巧与常见问题解决方案,让读者能够快速上手并应用于实际项目开发。

devops8pract的博客 589

【kubernetes/k8s源码分析】operator controller-runtime源码分析

operator的原理 kubernetes 自定义扩展资源注册到 controller-manager,通过 list /watch 的方式监听资源的变化,然后在周期内的各个环节做相应的协调处理。所谓的处理就是operator实现由状态的应用的核心部分 ...

zhonglinzhang 8630

Imatest-Star模块(西门子星图)

星图分析指南:基于ISO12233标准的MTF测试方法,通过放射状射线和正弦灰度变化评估相机SFR性能。

weixin_64706696的博客 1571

并网逆变器学习笔记8---平衡桥(独立中线模块)控制

参考文献:《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心。

圆桌骑士的博客 7321

从源码到部署:flink-on-k8s-operator开发者指南与贡献实践

flink-on-k8s-operator是一款用于管理Apache Flink和Beam应用生命周期的Kubernetes Operator,本指南将带你从源码构建到部署实践,掌握完整开发流程与贡献方法。 ## 项目架构概览 flink-on-k8s-operator基于Kubernetes [controller-runtime](https://github.com/kubernetes

gitblog_00524的博客 1069

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 128

Kubernetes Controller-Runtime 项目教程

Kubernetes Controller-Runtime 项目是一个用于构建 Kubernetes 控制器的 Go 语言库集合。它被 Kubebuilder 和 Operator SDK 等项目广泛使用,为开发者提供了构建自定义控制器的工具和框架。Controller-Runtime 通过提供一组通用的接口和工具,简化了开发者在 Kubernetes 上构建和管理控制器的过程。 ## 2. 项...

gitblog_00199的博客 1086

MicroCap声学仿真介绍(六)-入耳式耳机仿真

从上图可以看出,后腔开了泄声孔后,振膜的最大位移从4.8um提升到了10um,振膜位移增加了一倍。在实际应用中,一般耳机的前腔和后腔都需要开泄声孔,开孔的大小和调音网布的阻尼需要根据客户的要求以及仿真的结果进行权衡选择。接着在主界面放置电阻、电感、电容,电阻值为Rms,电感值为Mms,电容值为Cms,如下图。假设后腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。假设前腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。

山无忧的博客 1802

ESP32-IDF开发之旅 基础篇⑪ ESP-IDF 任务看门狗以及多核任务

本文介绍了ESP-IDF中的任务看门狗(TWDT)和多核任务管理。TWDT用于监控任务是否被挂起,可同时监视双核任务,通过定时喂狗机制检测任务阻塞。文中详细讲解了TWDT的配置方法、订阅流程及示例代码,并演示了如何触发和处理看门狗超时。针对ESP32双核特性,重点介绍了xTaskCreatePinnedToCore函数的使用,说明如何将任务绑定到指定核心(CPU0/CPU1)运行,并提供了多核任务创建的代码示例。这些机制对提高系统稳定性和优化多核性能至关重要。

单片机菜鸟哥的博客 268

使用 Controller Runtime Client API 构建 Kubernetes Operator:Operator SDK 中的 CRUD 实战

本指南基于 Operator SDK 官方文档《Controller Runtime Client API》展开,聚焦 controller-runtime 的 `client.Client` 接口——它是 Kubernetes Operator 在调谐(Reconcile)循环中与 API Server 交互的核心通道。你将掌握:默认 split-client 的读写分离机制、如何注入到 Rec

gitblog_00913的博客 895

5G RF前端架构为什么越来越复杂?从8天线、MIMO、ET、DRX到ACLR/EVM彻底拆开

AdjacentChannelLeakageRatioAdjacentChannelLeakageRatio主信道的功率,有多少泄漏到了隔壁Channel。ACLRPAdjacentPMainACLR=ACLRPMain​PAdjacent​​通常以dBc表达。

weixin_43199439的博客 47

使用kubebuilder开发简单的Operator流程

K8s进阶Operator示例

羊羊羊 805

【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读

AUTOSARAutomotive Open System Architecture,汽车开放系统架构,由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,致力于制定汽车电子软件标准的联盟。网络管理网络管理的目的是使网络中的ECU节点有序的睡眠和唤醒。在没有通信需求的时候睡眠,在需要通信的时候唤醒,可以节约汽车电池的电量。

测试领域技术分享 5166

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Kubernetes Handbook 中的 Kubebuilder 指南:基于 CRD 构建 Kubernetes API、Controller 与 Operator

本篇技术指南聚焦 Kubernetes Handbook 项目(develop 开发指南章节)中关于 **Kubebuilder** 的核心讲解:它是一款基于 [CRD](https://link.gitcode.com/i/7983598690646a008ce08dc199672796) 构建 Kubernetes API 的开发框架,可用来编排 API、Controller 与 Admiss

gitblog_00257的博客 196

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

第八课 k8s源码学习和二次开发原理篇-KubeBuilder使用和Controller-runtime原理

第八课 k8s源码学习和二次开发原理篇-KubeBuilder使用和Controller-runtime原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录第八课 k8s源码学习和二次开发原理篇-KubeBuilder使用和Controller-runtime原理第一节 Operator初识1.1 Operator介绍1.2 Operator诞生和发展历程1.3 Operator的发展1.4 Operator 的社区与生态第二节 kubebuilder介绍使用2.

QnHyn 917

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Kubernetes operator(八) controller-runtime 篇

本文是 Kubernetes operator学习 系列第七篇,本节会对 编写Operator非常重要 的 controller-runtime 库进行学习

a1369760658的博客 975

使用 kubebuilder 从零构建 Kubernetes Operator:Guestbook 实战指南

本篇指南以 Kubernetes Handbook 仓库的 kubebuilder 教程为核心,完整演示如何使用 kubebuilder 初始化 Operator 项目、生成 CRD 与 Controller、部署到集群并编写 `Reconcile` 业务逻辑。读完本文,你将掌握从空项目到「CR 创建 → 控制器响应 → 状态回写」的完整 Operator 开发闭环,并理解 kubebuilder

gitblog_00202的博客 142

Meshery Operator 深度解析:Meshery 中管理 Broker 与 MeshSync 的 Kubernetes Operator

本文以 Meshery 官方架构文档 `concepts/architecture/operator` 为核心,系统讲解 Meshery Operator 的定位、与 Meshery Server 的安装/升级协作机制、两个核心 CRD 的调和(Reconcile)模型、Broker/MeshSync 控制器的实现细节、Broker 端点推导规则,以及日常运维命令与故障排查路径。结合仓库内的 He

gitblog_00676的博客 987

【Kubernetes Operator】Kubernetes Operator 深度解析 — 第二部分

Kubernetes Operator 深度解析 — 第二部分

zhonglinzhang 376
上一篇: k8s编程operator——(3) 自定义资源CRD.md
下一篇: k8s编程operator实战之云编码平台——①架构设计
CoreDump丶
博客等级 码龄8年 451粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值