之前使用kubebuilder做k8soperator开发时候有很多注解其实并不太知道其具体内容,云原生社区的中文文档中也没有很好的翻译这部分内容,网络上的博客也没有很多相关的内容,这里给大家分享一下自己翻译的开发时常用到的标记,希望可以帮助到有。
1. CRD生成
作用于结构体上方,用于配置全局显示和启用
1.1 配置CRD范围和别名
//+kubebuilder:resource:scope=Cluster,shortName={'',''},categories={'',''}
常用参数:
-
scope=Cluster
:非命名空间资源(于node类似,不需要指定命名空间),若不加则为命名空间资源 -
shortNam={}
:定义CRD的别名,可以定义多个(类似于service==svc),注解中切片用{"",""}表示 -
categories={}
资源组的别名
1.2 指定kubectl get时显示的字段
//+kubebuilder:printcolumn:JSONPath=<string>
//+kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string
可选参数:
JSONPath
显示的字段name
当前列标题format
:当前列格式priority=<int>
当前列的优先级type=<string>
当前列的类型
1.3 启用status和scale子对象
//+kubebuilder:subresource:scale
//+kubebuilder:subresource:status
默认开启status后,外部修改的status将不会被捕获,只能通过控制器使用status().update()
来修改
2. CRD字段验证
字段验证注解作用于结构体内部的字段之上
2.1 默认值
// 设置默认值
//+kubebuilder:default=
// 允许空值
//+nullable
2.2 设置枚举
该字段只能使用这些值中的一个,否则无法通过apiservice检查
//+kubebuilder:validation:Enum={}
2.3 长度限制
// 数组最大/小长度
//+kubebuilder:validation:MaxItems=
//+kubebuilder:validation:MinItems=
// 字符串的最大/小长度
//+kubebuilder:validation:MaxLength=
//+kubebuilder:validation:MinLength=
// 允许的最大/小数字
//+kubebuilder:validation:Maximum=
//+kubebuilder:validation:Minimum=
2.4 格式限制
// 该字段是可选字段,非必须(默认都是必须)
//+kubebuilder:validation:Optional
// 该字段必须存在
//+kubebuilder:validation:Required
// 只能是该数的倍数
//+kubebuilder:validation:MultipleOf=
// 该字段内容的正则匹配
//+kubebuilder:validation:Pattern=
// 指定格式 (默认使用go的类型)
//+kubebuilder:validation:Type=
// 该字段全局唯一(不可以和其他cr相同)
//+kubebuilder:validation:UniqueItems=true
3. RBAC权限
作用域控制器的Reconcile
方法上方,用于获取Client-go
需要的权限
//+kubebuilder:rbac:group=,resources=,verbs={}
可选参数:
group
:权限的组(group.domain)resources
资源类型verbs
需要的权限类型resourceNames
:API名称namespace
权限需要的范围