Kubernetes编程—— 编写 Operator 的方案 —— 2、基于 sample-controller
编写 Operator 的方案 —— 2、基于 sample-controller
https://github.com/kubernetes/sample-controller
首先我们将基于 k8s.io/sample-controller 来实现 cnat,通过直接使用 client-go 完成。
sample-controller 使用 k8s.io/code-generator 来生成强类型的客户端、Informer、Lister 和深拷贝函数。如果你的自定义控制器中的 API 发生了变化,比如在自定义资源中添加了一个新的字段,你需要运行 update-codegen.sh 脚本来重新生成先前提到过的源代码文件。
我们开始基于 sample-controller 使用 client-go 来实现我们的 cnat Operator 吧。
1、首先,运行 go get k8s.io/sample-controller 获取相关的源代码及依赖并安装到系统中。
[root@JumperServer:zuoyang] # git clone https://github.com/kubernetes/sample-controller Cloning into 'sample-controller'... remote: Enumerating objects: 26102, done. remote: Counting objects: 100% (1850/1850), done. remote: Compressing objects: 100% (363/363), done. remote: Total 26102 (delta 1564), reused 1751 (delta 1478), pack-reused 24252 Receiving objects: 100% (26102/26102), 11.64 MiB | 13.98 MiB/s, done. Resolving deltas: 100% (18087/18087), done. [root@JumperServer:zuoyang] # cd sample-controller/ [root@JumperServer:sample-controller] # ls -l total 108 drwxr-xr-x 3 root root 4096 Aug 21 17:43 artifacts -rw-r--r-- 1 root root 148 Aug 21 17:43 code-of-conduct.md -rw-r--r-- 1 root root 756 Aug 21 17:43 CONTRIBUTING.md -rw-r--r-- 1 root root 16506 Aug 21 17:43 controller.go -rw-r--r-- 1 root root 9746 Aug 21 17:43 controller_test.go drwxr-xr-x 3 root root 4096 Aug 21 17:43 docs -rw-r--r-- 1 root root 2735 Aug 21 17:43 go.mod -rw-r--r-- 1 root root 15455 Aug 21 17:43 go.sum drwxr-xr-x 2 root root 4096 Aug 21 17:43 hack -rw-r--r-- 1 root root 11358 Aug 21 17:43 LICENSE -rw-r--r-- 1 root root 2946 Aug 21 17:43 main.go -rw-r--r-- 1 root root 183 Aug 21 17:43 OWNERS drwxr-xr-x 5 root root 4096 Aug 21 17:43 pkg -rw-r--r-- 1 root root 7543 Aug 21 17:43 README.md -rw-r--r-- 1 root root 550 Aug 21 17:43 SECURITY_CONTACTS [root@JumperServer:sample-controller] # go get k8s.io/sample-controller go: downloading k8s.io/api v0.0.0-20230810042731-2f6eec10c476 go: downloading k8s.io/apimachinery v0.0.0-20230815235016-14436eb53afd go: downloading k8s.io/client-go v0.0.0-20230816000758-856e847bb7cb [root@JumperServer:sample-controller] #
2、这个命令会启动自定义控制器,等待你注册 CRD 并创建一个自定义资源。
[root@JumperServer:sample-controller] # kubectl apply -f artifacts/examples/ crd-status-subresource.yaml crd.yaml example-foo.yaml [root@JumperServer:sample-controller] # kubectl apply -f artifacts/examples/crd.yaml
3、如果成功注册了 CRD,运行下面的命令应该会看到相应的输出:
kubectl get crds