kubebuilder 中文文档由云原生社区主导翻译。任何问题可以在这儿提issue。issue模版可以参考这个

Config/Code 生成标记

Kubebuilder 利用一个叫做controller-gen的工具来生成公共的代码和 Kubernetes YAML 文件。 这些代码和配置的生成是由 Go 代码中特殊存在的“标记注释”来控制的。

标记都是以加号开头的单行注释,后面跟着一个标记名称,而跟随的关于标记的特定配置则是可选的。

// +kubebuilder:validation:Optional
// +kubebuilder:validation:MaxItems=2
// +kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string

关于不同类型的代码和 YAML 生成可以查看每一小节来获取详细信息。

在 KubeBuilder 中生成代码 & 制品

Kubebuilder 项目有两个 make 命令用到了 controller-gen:

查看[生成 CRDs]来获取综合描述。

标记语法

准确的语法在godocs for controller-tools有描述。

通常,标记可以是:

  • Empty (+kubebuilder:validation:Optional):空标记像命令行中的布尔标记位-- 仅仅是指定他们来开启某些行为。

  • Anonymous (+kubebuilder:validation:MaxItems=2):匿名标记使用单个值作为参数。

  • Multi-option (+kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string):多选项标记使用一个或多个命名参数。第一个参数与名称之间用冒号隔开,而后面的参数使用逗号隔开。参数的顺序没有关系。有些参数是可选的。

Marker arguments may be strings, ints, bools, slices, or maps thereof. Strings, ints, and bools follow their Go syntax:

标记的参数可以是字符,整数,布尔,切片,或者 map 类型。 字符,整数,和布尔都应该符合 Go 语法:

// +kubebuilder:validation:ExclusiveMaximum=false
// +kubebuilder:validation:Format="date-time"
// +kubebuilder:validation:Maximum=42

为了方便,在简单的例子中字符的引号可以被忽略,尽管这种做法在任何时候都是不被鼓励使用的,即便是单个字符:

// +kubebuilder:validation:Type=string

切片可以用大括号和逗号分隔来指定。

// +kubebuilder:webhooks:Enum={"crackers, Gromit, we forgot the crackers!","not even wensleydale?"}

或者,在简单的例子中,用分号来隔开。

// +kubebuilder:validation:Enum=Wallace;Gromit;Chicken

Maps 是用字符类型的键和任意类型的值(有效地map[string]interface{})来指定的。一个 map 是由大括号({})包围起来的,每一个键和每一个值是用冒号(:)隔开的,每一个键值对是由逗号隔开的。

// +kubebuilder:validation:Default={magic: {numero: 42, stringified: forty-two}}