KubeBuilder起步

KubeBuilder是用于开发CRD(自定义资源)以及控制器的框架工具,我们只需要按照框架的规则,可以大大提高开发K8s Operator的效率

安装

本文使用的kubebuilder的版本为3.11.1

其前置依赖有

  • go version v1.20.0+
  • docker version 17.03+.
  • kubectl version v1.11.3+.
  • Access to a Kubernetes v1.11.3+ cluster.

更多安装的细节,可以参考 官网

建议这里花点功夫,按照官方的要求,安装好指定的组件,以免后续在使用过程中出现一些奇怪的问题

快速入门

创建项目基本框架
script
1
2
3
mkdir guestbook
cd guestbook
kubebuilder init --repo=guestbook

由于现在基本都使用go modules了,所以这里需要指定 –repo ,来设置模块的名称

创建API资源

在k8s有很多api资源,我们可以通过命令来查看,会看到api资源有分组、版本以及类型等信息

script
1
kubectl api-resources

这里我们通过kubebuilder创建我们的api资源信息,这个时候会帮我们生成一些文件

script
1
kubebuilder create api --group webapp --version v1 --kind Guestbook

根据系统帮我们生成的结构体去生成摘要信息,如果我们重新定义或者修改了结构体,也需要重新生成摘要

script
1
make manifests 

结构体
结构体文件

输出文件
摘要文件

调试

将刚创建自定义资源部署到k8s中,并且跑一个脚手架生成的guestbook对象

script
1
2
3
4
5
6
7
8
# 部署guestbook api资源
make install

# 调试controller
make run

# 利于脚手架生成的案例去部署
kubectl apply -f config/samples/

我们可以通过以下命令查看部署的自定义资源

script
1
kubectl get guestbook -A
发布

我们刚刚只是在本地调试,这个时候controller并没有真正部署到k8s

生成controller的镜像,并推送到指定的镜像仓库,这里我使用的是阿里云的镜像仓库

script
1
make docker-build docker-push IMG=registry.cn-hangzhou.aliyuncs.com/default_images/guestbook:v1

部署controller

make deploy IMG=registry.cn-hangzhou.aliyuncs.com/default_images/guestbook:v1

卸载
script
1
2
3
4
5
6
7
8
9

# 卸载API资源
make uninstall


# 卸载controller

make undeploy

实现Controller的逻辑

如下图所示,我们需要在Reconcile 这个函数中实现controller的逻辑

在上方的函数中,我们想创建一个镜像为nginx的pod

注意这里需要在函数的上方添加以下一段注释,以赋予对于pod的操作权限

//+kubebuilder:rbac:groups=*,resources=pods,verbs=get;list;watch;create;update;patch;delete

kubebuilder会根据这个注释生成相应的rbac权限

打包发布我们改造后的controller

script
1
2
3
4
5
6

#重新生成镜像
make docker-build docker-push IMG=registry.cn-hangzhou.aliyuncs.com/default_images/guestbook:v2

#发布
make deploy IMG=registry.cn-hangzhou.aliyuncs.com/default_images/guestbook:v2

发布过后,我们创建一个对象,测试一下,可以观察到controller帮我们创建了一个nginx pod

script
1
kubectl apply -f config/samples

更多controller的执行信息,可以通过执行kubectl logs 【controller自身pod】 来查看,例如

script
1
kubectl logs -f guestbook-controller-manager-5dbf84c95b-hwf8b -n guestbook-system

KubeBuilder起步
https://www.xinyublog.com/k8s/kubebuilder-init/
作者
蚂蚁
发布于
2023年8月24日
许可协议