Kubernetes编程—— 编写 Operator 的方案 —— 2、基于 sample-controller

左扬(你们的胃叫胃,孤的叫胃PLUS) / 2023-08-21 / 原文

编写 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