概念简介
code-generator
k8s.io/client-go 提供了对k8s原生资源的informer和clientset等等,但对于自定义资源的操作则相对低效,需要使用 rest api 和 dynamic client 来操作,并自己实现反序列化等功能。
code-generator 提供了以下工具用于为k8s中的资源生成相关代码,可以更加方便的操作自定义资源:
- deepcopy-gen: 生成深度拷贝对象方法使用方法:
-
- 在文件中添加注释// +k8s:deepcopy-gen=package
- 为单个类型添加自动生成// +k8s:deepcopy-gen=true
-
- 为单个类型关闭自动生成// +k8s:deepcopy-gen=false
- client-gen: 为资源生成标准的操作方法(get;list;watch;create;update;patch;delete)在pkg/apis/GROUP/{GROUP}/GROUP/{VERSION}/types.go中使用,使用// +genclient标记对应类型生成的客户端, 如果与该类型相关联的资源不是命名空间范围的(例如PersistentVolume), 则还需要附加// + genclient:nonNamespaced标记,
-
- // +genclient - 生成默认的客户端动作函数(create, update, delete, get, list, update, patch, watch以及 是否生成updateStatus取决于.Status字段是否存在)。
- // +genclient:nonNamespaced - 所有动作函数都是在没有名称空间的情况下生成
-
- // +genclient:onlyVerbs=create,get - 指定的动作函数被生成.
- // +genclient:skipVerbs=watch - 生成watch以外所有的动作函数.
-
- // +genclient:noStatus - 即使.Status字段存在也不生成updateStatus动作函数
- informer-gen: 生成informer,提供事件机制(AddFunc,UpdateFunc,DeleteFunc)来响应kubernetes的event
- lister-gen: 为get和list方法提供只读缓存层
- conversion-gen是用于自动生成在内部和外部类型之间转换的函数的工具一般的转换代码生成任务涉及三套程序包:使用方法:
-
- 一套包含内部类型的程序包,
- 一套包含外部类型的程序包
-
- 单个目标程序包(即,生成的转换函数所在的位置,以及开发人员授权的转换功能所在的位置)。包含内部类型的包在Kubernetes的常规代码生成框架中扮演着称为peer package的角色。
- 标记转换内部软件包 // +k8s:conversion-gen=<import-path-of-internal-package>
-
- 标记转换外部软件包// +k8s:conversion-gen-external-types=<import-path-of-external-package>
- 标记不转换对应注释或结构 // +k8s:conversion-gen=false
- defaulter-gen 用于生产Defaulter函数
-
- 为包含字段的所有类型创建defaulters,// +k8s:defaulter-gen=<field-name-to-flag>
- 所有都生成// +k8s:defaulter-gen=true|false
- go-to-protobuf 通过go struct生成pb idl
- import-boss 在给定存储库中强制执行导入限制
- openapi-gen 生成openAPI定义使用方法:
-
- +k8s:openapi-gen=true 为指定包或方法开启
- +k8s:openapi-gen=false 指定包关闭
- register-gen 生成register
- set-gen
code-generator整合了这些gen,使用脚本
Kubebuilder与code-generator协同:CRD操作代码生成指南

本文介绍了如何结合Kubebuilder与code-generator在Kubernetes CRD项目中生成高效操作代码,包括自定义资源的客户端、informer、listers的创建,以及如何调整目录结构和脚本配置以适应两者需求。
最低0.47元/天 解锁文章
3174

被折叠的 条评论
为什么被折叠?



