使用kubebuilder造operator1

本文档记录了一次使用Kubebuilder创建并部署Operator的过程。首先检查了Go、Docker和kubectl的版本要求,然后在指定目录初始化项目,并创建了一个名为Guestbook的API和Controller。通过`make install`和`make run`安装并运行Operator,接着创建了CR实例并在本地K8s集群部署。文章探讨了项目如何连接到K8s集群、Operator的部署位置、权限管理和控制逻辑编写等问题,同时提示了部署Operator需要的权限以及使用VPN的建议。

学习📝记录:项目来源kubebuilder官网,别的不多说,学啥你不得先把官网来一遍吗
1、版本先check下
官网上的Prerequisites, 这一步必不可少~~
go version v1.15+ (kubebuilder v3.0).
go version v1.16+ (kubebuilder v3.1+).
docker version 17.03+.
kubectl version v1.11.3+.
Access to a Kubernetes v1.11.3+ cluster.

go version
docker version
kubectl version

2、先造个空项目感受下

# 先进到对应的目录
-> % cd ~/go/src && mkdir guestbook && cd guestbook
# 初始化项目
-> % kubebuilder init --domain my.domain --repo my.domain/guestbook
# 创建API 著名的GVK;api和controller都有很多玩法~ 后面慢慢来
kubebuilder create api --group webapp --version v1 --kind Guestbook
# 安装CRD & 运行operator
make install && make run 
# 新建CR实例
kubectl apply -f config/samples/
# 本地k8s部署operator,就不push了, deploy这里需要大量的权限,注意去官网上看RBAC说明
# 还是那句话,花点钱吧,VPN不香吗。实在是不想花钱,就阿里云吧
make docker-build docker-push IMG=zhangting9391/guestbook:v1
make deploy IMG=zhangting9391/guestbook:v1
# 完事了就卸载吧
make uninstall
make undeploy

效果是出来了,但是还是满脸问号???

  • 项目是怎么发现我的k8s集群的
  • operator怎么指定安装在哪里
  • 权限管理是怎么做的,安装operator需要哪些权限
  • 控制逻辑要怎么写
  • 怎么watch我自己的资源
  • 资源应该怎样来定义
  • operator是怎样部署到k8s集群里面的
    本来想一次写完,可是发现贴图太大了,编辑的时候不爽,另起一篇吧~
    在这里插入图片描述

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

<think> 我们正在回答用户关于“基于kubebuilder开发operator的详细流程”的问题。根据提供的引用资料,我们可以整理出开发流程。注意引用[2]提到步骤2和5是核心业务逻辑,其余可通过脚手架工具自动生成。 引用[1]和[2]都提到kubebuilder是一个热门的Operator开发框架,能够简化开发工作。引用[4]和[5]提供了具体的操作步骤。 因此,我们可以将流程分为以下几个主要步骤: 1. 环境准备:安装必要的工具,包括kubebuilder。 2. 初始化项目:使用kubebuilder初始化项目结构。 3. 创建API(CRD):定义自定义资源(CRD)的Group、Version、Kind以及生成相关的代码和配置文件。 4. 实现业务逻辑:主要是Reconcile函数,即控制器逻辑。 5. 生成CRD清单:使用make命令生成CRD的yaml文件。 6. 部署和运行:将Operator部署到Kubernetes集群。 下面详细描述每个步骤: ### 步骤1:环境准备 根据引用[4]和引用[5],需要安装kubebuilder。以Linux系统为例: - 下载kubebuilder二进制文件: ```bash wget https://github.com/kubernetes-sigs/kubebuilder/releases/latest/download/kubebuilder_linux_amd64 mv kubebuilder_linux_amd64 kubebuilder chmod +x kubebuilder mv kubebuilder /usr/local/bin/ ``` - 验证安装:`kubebuilder version` 此外,还需要安装kustomize(kubebuilder会用到)以及配置好Go环境(因为kubebuilder项目使用Go语言开发)。 ### 步骤2:初始化项目 创建一个目录作为项目根目录,然后初始化Go模块和kubebuilder项目。 ```bash mkdir demo-operator cd demo-operator go mod init demo-operator # 初始化Go模块 kubebuilder init --domain my.domain # 初始化项目,指定域名(例如my.domain) ``` 注意:引用[5]中提到,对于不同的操作系统架构,命令可能略有不同,但一般使用`--domain`参数即可。 ### 步骤3:创建API(CRD) 使用kubebuilder创建自定义资源定义(CRD)和控制器骨架。 ```bash kubebuilder create api --group webapp --version v1 --kind DemoOperator ``` 执行此命令后,会询问是否创建资源(Resource)和控制器(Controller),回答`y`(是)即可。 这将在项目中生成以下内容: - `api/v1/`目录:包含CRD的Go类型定义(在`demooperator_types.go`中) - `controllers/`目录:包含控制器的代码(在`demooperator_controller.go`中) 此时,我们需要编辑`api/v1/demooperator_types.go`文件,定义DemoOperator资源的结构(Spec)和状态(Status)。 ### 步骤4:实现业务逻辑(核心) 在生成的控制器文件`controllers/demooperator_controller.go`中,找到`Reconcile`方法。该方法就是Operator的核心逻辑,当创建、更新或删除自定义资源对象时,Reconcile函数会被调用。我们需要在此函数中编写业务逻辑。 例如,我们可能需要根据自定义资源对象的状态,创建、更新或删除其他Kubernetes资源(如Deployment、Service等)。 ### 步骤5:生成CRD清单 使用kubebuilder提供的make命令生成CRD的yaml文件: ```bash make manifests ``` 该命令会在`config/crd/bases/`目录下生成CRD的yaml文件。 ### 步骤6:部署和运行Operator 有两种方式运行Operator1. 本地运行(用于调试): ```bash make install # 安装CRD到集群 make run # 本地运行Operator(需要配置kubeconfig) ``` 2. 部署到集群: - 构建Operator的镜像并推送到镜像仓库。 - 使用`make deploy`命令部署(该命令会使用`config/`目录下的部署清单,需要预先配置好镜像地址)。 部署完成后,就可以创建自定义资源对象(CR)来触发Operator的业务逻辑了。 注意:引用[3]提供了kubebuilder官方文档和阿里云原生技术公开课的链接,可以作为进一步学习的资料。 总结流程:准备环境 -> 初始化项目 -> 创建API(定义CRD)-> 实现控制器逻辑(Reconcile)-> 生成清单 -> 部署运行。 §§相关问题§§ 1. kubebuilder创建API时指定的Group、Version、Kind分别代表什么? 2. 在Reconcile函数中如何监听自定义资源的变化? 3. 如何测试和调试基于kubebuilder开发的Operator? </think> 以下是基于kubebuilder开发Kubernetes Operator的详细流程,结合引用资料整理而成: ### 一、环境准备 1. **安装kubebuilder**(引用[4][5]) Linux系统: ```bash wget https://github.com/kubernetes-sigs/kubebuilder/releases/latest/download/kubebuilder_linux_amd64 mv kubebuilder_linux_amd64 kubebuilder chmod +x kubebuilder sudo mv kubebuilder /usr/local/bin/ ``` 其他系统需下载对应版本并配置环境变量 验证安装:`kubebuilder version` 2. **依赖工具** - Go 1.16+ - Kubernetes集群(Minikube或Kind) - kustomize(kubebuilder内置) --- ### 二、项目初始化(引用[5]) ```bash # 创建项目目录 mkdir demo-operator cd demo-operator # 初始化Go模块 go mod init demo-operator # 初始化kubebuilder项目(指定域名) kubebuilder init --domain my.domain ``` --- ### 三、创建API(CRD定义) 1. **生成CRD骨架**(引用[2][5]) ```bash kubebuilder create api \ --group webapp \ # API组名(如:apps.k8s.io) --version v1 \ # API版本 --kind DemoOperator # 自定义资源类型 ``` 提示时选择 `y` 创建Resource和Controller 2. **定义CRD结构** 编辑文件 `api/v1/demooperator_types.go`: ```go type DemoOperatorSpec struct { Replicas int32 `json:"replicas"` Image string `json:"image"` } type DemoOperatorStatus struct { AvailableReplicas int32 `json:"availableReplicas"` } ``` --- ### 四、实现业务逻辑(核心步骤) 1. **修改控制器**(引用[2]) 编辑 `controllers/demooperator_controller.go`: ```go func (r *DemoOperatorReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { // 1. 获取自定义资源实例 demo := &webappv1.DemoOperator{} if err := r.Get(ctx, req.NamespacedName, demo); err != nil { return ctrl.Result{}, client.IgnoreNotFound(err) } // 2. 业务逻辑(示例:创建Deployment) deploy := &appsv1.Deployment{ Spec: appsv1.DeploymentSpec{ Replicas: &demo.Spec.Replicas, Template: corev1.PodTemplateSpec{ Spec: corev1.PodSpec{ Containers: []corev1.Container{{ Image: demo.Spec.Image, }}, }, }, }, } // 3. 创建/更新资源 if err := r.Create(ctx, deploy); err != nil { return ctrl.Result{}, err } // 4. 更新状态 demo.Status.AvailableReplicas = *deploy.Spec.Replicas if err := r.Status().Update(ctx, demo); err != nil { return ctrl.Result{}, err } return ctrl.Result{}, nil } ``` --- ### 五、生成部署清单 1. **生成CRD YAML**(引用[5]) ```bash make manifests # 在config/crd/bases/生成CRD定义 ``` 2. **生成RBAC权限** 自动生成 `config/rbac/` 下的ClusterRole绑定文件 --- ### 六、部署与测试 1. **安装CRD到集群** ```bash make install # 应用CRD定义 ``` 2. **本地运行Operator**(调试用) ```bash make run # 本地启动控制器 ``` 3. **部署Operator到集群** ```bash # 构建镜像 docker build -t your-registry/demo-operator:v1 . docker push your-registry/demo-operator:v1 # 部署到集群 make deploy IMG=your-registry/demo-operator:v1 ``` 4. **创建自定义资源实例** ```yaml apiVersion: webapp.my.domain/v1 kind: DemoOperator metadata: name: demo-example spec: replicas: 3 image: nginx:1.21 ``` --- ### 七、验证操作 ```bash kubectl get demooperator # 查看自定义资源 kubectl get deployments # 检查Operator创建的负载 kubectl describe demooperator demo-example # 查看状态 ``` > 完整流程参考:[kubebuilder官方文档](https://book.kubebuilder.io/quick-start.html) [^3] > 最佳实践可学习阿里云原生技术公开课中的Operator开发范式 [^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值