配置/代码生成标记

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:

请查看生成 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: 四十二}}