跳转至

Kubebuilder gen标记

官方文档:

CRD 生成

作用于结构体上方,用于配置全局显示和启用

  • 配置 CRD 范围和别名
// +kubebuilder:resource:scope=Cluster,shortName={'',''},categories={'',''}

常用参数:

scope=Cluster:非命名空间资源(与 node 类似,不需要指定命名空间),若不加则为命名空间资源

shortNam={}:定义 CRD 的别名,可以定义多个(类似于 service==svc ),注解中切片用{"",""}表示

categories={}:资源组的别名

示例:

//+kubebuilder:resource:scope=Cluster

// KBDev is the Schema for the kbdevs API
type KBDev struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`

    Spec   KBDevSpec   `json:"spec,omitempty"`
    Status KBDevStatus `json:"status,omitempty"`
}
  • 指定 kubectl get 时显示的字段
// +kubebuilder:printcolumn:JSONPath=<string>
// +kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string

可选参数:

  1. JSONPath:显示的字段
  2. name:当前列标题
  3. format:当前列格式
  4. priority=<int>:当前列的优先级
  5. type=<string>:当前列的类型

示例:


  • 启用 status 和 scale 子对象
// +kubebuilder:subresource:scale
// +kubebuilder:subresource:status

默认开启 status 后,外部修改的 status 将不会被捕获,只能通过控制器使用 status().update() 来修改