K8S code-generator

一、前言:如何操作自定义资源

client-go为每种K8S内置资源提供对应的clientset和informer。那么如果我们要监听和操作自定义资源对象,应该如何做呢?这里我们有两种方式:

方式一:使用client-go提供的dynamicClient来操作自定义资源对象,当然也可以使用RESTClient实现

方式二:使用code-generator来帮助我们生成我们需要的代码,这样我们就可以像使用client-go为内置K8S资源对象提供的方式监听和操作自定义资源

二、code-generator 生成器

代码 code-generator/cmd 目录下,包括如下:

client-gen
conversinon-gen
deepcopy-gen
go-go-protobuf
import-boss
informer-gen
lister-gen
openapi-gen
register-gen
set-gen

三. 创建自定义 CRD

 其中 pkg/apis是固定的  

 apps是groupname,比如 apps.k8s.io/v1

 v1 是 version

 doc.go types.go register.go 都是自己写的,或者使用 operator-sdk 生成,在填充

四、常用code-generator标记

deep-copy标记

五、生成代码命令:

输出指令为:

$ vendor/k8s.io/code-generator/generate-groups.sh "deepcopy,client,informer,lister" \
  sample-controller/pkg/generated sample-controller/pkg/apis \
  samplecontroller:v1alpha1 \
  --output-base "${GOPATH}/src" \
  --go-header-file "${GOPATH}/src/sample-controller/hack/boilerplate.go.txt"

案例:进入项目根目录下,执行

/home/gocode/src/sample-controller/vendor/k8s.io/code-generator/generate-groups.sh all 
operator-test/pkg/generated operator-test/pkg/apis crd.example.com:v1 --go-header-file=/home/gocode/src/sample-controller/hack/boilerplate.go.txt
--output-base ../

这个命令一共有6个参数,其中,第一个参数"deepcopy,client,informer,lister",可用all代替,其代表着4种标准代码生成器:
deepcopy-gen:生成DeepCopy方法实现对对象的深拷贝。
client-gen:生成强类型的客户端集合。
informer-gen:为自定义资源生成informer。
lister-gen:为自定义资源生成lister对象。
接着,我们看看其他参数含义:
  1、第二个参数用于指定客户端、lister和informer代码框架的包名;
  2、第三个参数是API组的基础包名;
  3、第四个参数是API组列表与版本号;
  4、第五个参数–output-base用于代码生成器查找包输出的基础路径;
  5、第六个参数是自定义代码所用到的版权信息头

posted @ 2022-09-16 00:35  南昌拌粉的成长  阅读(574)  评论(0编辑  收藏  举报