本文介绍如何使用 kubebuilder 实现一个存储用户信息的 CRD,同时开发 controller 绑定同名的 ServiceAccount。
不过多介绍 kubebuilder 的理论知识,直接开干。
开发环境准备
初始化 kubebuilder
mkdir lanyulei
cd lanyulei
kubebuilder init --domain lanyulei.com --repo lanyulei
- init:初始化命令参数。
- --domain:可以理解为接口组的分组。根据实际情况来定,我一般定义为
项目名.com
。 - --repo:项目名称,若是当前项目下已经存在 go.mod,则无需此参数。
初始化成功后的代码结构。
.
├── Dockerfile
├── Makefile
├── PROJECT
├── config
│ ├── default
│ │ ├── kustomization.yaml
│ │ ├── manager_auth_proxy_patch.yaml
│ │ └── manager_config_patch.yaml
│ ├── manager
│ │ ├── controller_manager_config.yaml
│ │ ├── kustomization.yaml
│ │ └── manager.yaml
│ ├── prometheus
│ │ ├── kustomization.yaml
│ │ └── monitor.yaml
│ └── rbac
│ ├── auth_proxy_client_clusterrole.yaml
│ ├── auth_proxy_role.yaml
│ ├── auth_proxy_role_binding.yaml
│ ├── auth_proxy_service.yaml
│ ├── kustomization.yaml
│ ├── leader_election_role.yaml
│ ├── leader_election_role_binding.yaml
│ ├── role_binding.yaml
│ └── service_account.yaml
├── go.mod
├── go.sum
├── hack
│ └── boilerplate.go.txt
└── main.go
开启支持多接口组
如果你本次项目开发的 operator
是多接口组
的话,则需要执行一下命令。
例如:同时需要用户相关接口
和角色相关接口
,则需要两组 api group
,因此需要执行以下操作。
kubebuilder edit --multigroup=true
需要的工具
这三个工具是需要提前下载好的,放在项目的根目录下的 bin
目录下面的。
controller-gen (Version: v0.8.0)
kustomize (Version: v4.5.4)
setup-envtest (Version: latest)
Github 下载对应系统的二进制文件即可,版本的话,我测试的版本已标注,根据实际情况自行调整版本即可。
注意:工具下载完后,放到 bin
目录后,后面操作才可正常执行。
创建 API
执行以下命令创建我们需要 api group
。
$ kubebuilder create api --group user --version v1 --kind User
Create Resource [y/n] # 是否创建资源对象
y
Create Controller [y/n] # 是否创建 controller
y
- --group:接口分组
- --version:接口版本
- --k