配置/代码生成标记
Kubebuilder 使用一个名为 controller-gen 的工具来生成实用代码和 Kubernetes YAML。此代码和配置的生成是通过在 Go 代码中添加特殊的“标记注释“来控制的。
标记是以加号开头的单行注释,后面跟着标记名称,后面可以选择性地跟上一些标记特定配置:
// +kubebuilder:validation:可选
// +kubebuilder:validation:最大项数=2
// +kubebuilder:printcolumn:JSONPath=".status.replicas",name=副本数,type=string
请查看每个子部分以获取有关不同类型代码和 YAML 生成的信息。
在 Kubebuilder 中生成代码和工件
Kubebuilder 项目有两个 make
目标,用于使用 controller-gen:
-
make manifests
生成 Kubernetes 对象 YAML,诸如 CustomResourceDefinitions、WebhookConfigurations 和 RBAC roles。 -
make generate
生成代码,例如 runtime.Object/DeepCopy 实现。
请查看生成 CRD以获取全面概述。
标记语法
确切的语法在 controller-tools 的文档 中进行了描述。
通常,标记可以是:
-
空 (
+kubebuilder:validation:Optional
): 空标记就像命令行上的布尔标志 -- 仅仅指定它们就可以启用某些行为。 -
匿名 (
+kubebuilder:validation:MaxItems=2
): 匿名标记的参数只能接受一个值。 -
多选项 (
+kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string
): 多选项标记可以接受一个或多个命名参数。 第一个参数通过冒号与名称分隔,后续参数用逗号分隔。 参数的顺序没有关系。 某些参数可能是可选的。
标记参数可以是字符串、整数、布尔值、切片或它们的映射。字符串、整数和布尔值遵循它们的 Go 语法:
// +kubebuilder:validation:ExclusiveMaximum=false
// +kubebuilder:validation:Format="date-time"
// +kubebuilder:validation:Maximum=42
为了方便,对于简单情况,可以省略字符串中的引号,但不鼓励在单词字符串以外的其他情况下这样做:
// +kubebuilder:validation:Type=string
切片可以通过用大括号包围并用逗号分隔来指定:
// +kubebuilder:webhooks:Enum={"饼干, 龟兔赛跑, 我们忘记带饼干了!","连温斯莱代尔奶酪都没有吗?"}
或在简单情况下,用分号分隔:
// +kubebuilder:validation:Enum=华莱士;格罗米特;鸡
映射使用字符串键和任何类型的值指定(实际上是 map[string]interface{}
)。映射用大括号({}
)包围,每个键和值之间用冒号(:
)分隔,每对键值对之间用逗号分隔:
// +kubebuilder:default={magic: {numero: 42, stringified: 四十二}}