k8s:kubeBuilder代码生成器的使用

本文档详细介绍了如何从零开始使用KubeBuilder搭建一个Kubernetes控制器。首先,你需要下载并安装KubeBuilder二进制文件。然后,初始化项目并创建所需的目录结构。接着,使用KubeBuilder生成API资源和manifests。最后,你会看到生成的目录结构和文件,包括apis、config、controllers等。现在,你可以定义CR和编写controller逻辑。
摘要由CSDN通过智能技术生成

kubeBuilder

通过kubebuilder构建的项目,最终目录结构如下:

├── apis
│   └── builder                                      # 指令1对应生成的目录结构,否则该目录不创建
│       └── v1alpha1
│           ├── builder_types.go                     # 定义yaml中resource的spec
│           ├── groupversion_info.go                 # GV定义
│           └── zz_generated.deepcopy.go
├── bin
│   └── controller-gen
├── config
│   ├── crd                                          # 自动生成的crd文件,无需修改,直接修改api中v1alpha1里的文件后执行make generate
│   │   ├── kustomization.yaml
│   │   ├── kustomizeconfig.yaml
│   │   └── patches
│   │       ├── cainjection_in_builders.yaml
│   │       └── webhook_in_builders.yaml
│   ├── default                                     # 默认配置信息
│   │   ├── kustomization.yaml
│   │   ├── manager_auth_proxy_patch.yaml
│   │   └── manager_config_patch.yaml
│   ├── manager                                     # CRD yaml信息
│   │   ├── controller_manager_config.yaml
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── prometheus                                  # prometheus监控数据采集信息
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac                                        # rbac相关权限
│   │   ├── auth_proxy_client_clusterrole.yaml
│   │   ├── auth_proxy_role_binding.yaml
│   │   ├── auth_proxy_role.yaml
│   │   ├── auth_proxy_service.yaml
│   │   ├── builder_editor_role.yaml
│   │   ├── builder_viewer_role.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── role_binding.yaml
│   │   └── service_account.yaml
│   └── samples                                    # 样例文件
│       └── builder_v1alpha1_builder.yaml
├── controllers
│   └── builder
│       ├── builder_controller.go                  # controller逻辑
│       └── suite_test.go                          # 测试
├── Dockerfile
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
├── main.go
├── Makefile                                      # go工程脚本命令
└── PROJECT                                       # kubebuilder元数据信息

从零开始搭建

1、kubeBuilder的安装

在官网下载对应的二进制文件,地址为https://github.com/kubernetes-sigs/kubebuilder/releases,解压后放置在usr/local/bin目录下即可,也可以配置PATH环境变量。

 curl -L -o kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.2.0/kubebuilder_linux_amd64
 chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
2、初始化项目

在$ g o p a t h / s r c 下 创 建 项 目 目 录 , 如 果 项 目 不 在 gopath/src下创建项目目录,如果项目不在 gopath/srcGOPATH目录下,需运行go mod init 来告知kubeBuilder项目地址。

$ mkdir $GOPATH/src/local/builder-operator
$ go mod init local/builder-operator

通过kubeBuilder初始化项目信息:(–domain是项目的域名。)

$ kubebuilder init --domain zlqc.com

生成以下文件:

├── config
│   ├── default                                         # 默认配置信息
│   │   ├── kustomization.yaml                                     
│   │   ├── manager_auth_proxy_patch.yaml
│   │   └── manager_config_patch.yaml
│   ├── manager                                         # CRD yaml信息
│   │   ├── controller_manager_config.yaml
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── prometheus                                      # prometheus监控数据采集信息
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   └── rbac                                            # rbac相关权限
│       ├── auth_proxy_client_clusterrole.yaml
│       ├── auth_proxy_role_binding.yaml
│       ├── auth_proxy_role.yaml
│       ├── auth_proxy_service.yaml
│       ├── kustomization.yaml
│       ├── leader_election_role_binding.yaml
│       ├── leader_election_role.yaml
│       ├── role_binding.yaml
│       └── service_account.yaml
├── Dockerfile
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
├── main.go
├── Makefile                                           # go工程脚本命令
└── PROJECT                                            # kubebuilder元数据信息
3、生成resource和manifests

创建api

$ kubebuilder edit --multigroup=true
$ kubebuilder create api --group builder --version v1alpha1 --kind Builder

指令1的目的是将指令2生成的resource将放置在apis路径下,否则放置在默认的路径下。
指令2中的group version builder分别对应上文中的GVK。
指令2输出信息如下:

Create Resource [y/n]
y
Create Controller [y/n]
y
Writing kustomize manifests for you to edit...
Writing scaffold for you to edit...
apis/builder/v1alpha1/builder_types.go
controllers/builder/builder_controller.go
Update dependencies:
$ go mod tidy
Running make:
$ make generate
go: creating new go.mod: module tmp
Downloading sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0
go get: added sigs.k8s.io/controller-tools v0.7.0
/data/gopath/src/local/builder-operator/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
Next: implement your new API and generate the manifests (e.g. CRDs,CRs) with:
$ make manifests

当前的目录信息如下(不含已生成的文件):

├── apis
│   └── builder                                      # 指令1对应生成的目录结构,否则该目录不创建
│       └── v1alpha1
│           ├── builder_types.go                     # 定义yaml中resource的spec
│           ├── groupversion_info.go                 # GV定义
│           └── zz_generated.deepcopy.go
├── bin
│   └── controller-gen
├── config
│   ├── crd                                          # 自动生成的crd文件,无需修改,直接修改api中v1alpha1里的文件后执行make generate
│   │   ├── kustomization.yaml
│   │   ├── kustomizeconfig.yaml
│   │   └── patches
│   │       ├── cainjection_in_builders.yaml
│   │       └── webhook_in_builders.yaml
│   └── default
│   └── manager
│   └── prometheus
│   ├── rbac
│   │   ├── builder_editor_role.yaml
│   │   └── builder_viewer_role.yaml
│   └── samples                                      # 样例文件
│       └── builder_v1alpha1_builder.yaml
└── controllers
    └── builder
        ├── builder_controller.go                    # controller逻辑
        └── suite_test.go                            # 测试

至此,最小化框架内容都已完成,接着就是定义CR,编写controller等。

参考学习:链接

参考学习:链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值