更新时间:2022-04-20 GMT+08:00
分享

定义API

在设计的CR spec中,包含size、image、storage属性,因此需要修改api/v1/hwfka_types.go中HwfkaSpec和HwfkaStatus部分,为应用定义参数和状态属性。

package v1

import (
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// HwfkaSpec defines the desired state of Hwfka
type HwfkaSpec struct {
	// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
	// Important: Run "make" to regenerate code after modifying this file

	// +kubebuilder:validation:Minimum=1
	// +kubebuilder:validation:Maximum=3
	// +kubebuilder:validation:ExclusiveMaximum=false  // 包含最大值
	Size    int32        `json:"size"`    // Hwfka 应用包含的 broker 数量
	Image   string       `json:"image"`   // Hwfka 镜像地址
	Storage *StorageSpec `json:"storage"` // Hwfka 数据存储相关配置
}

type StorageSpec struct {
	Class       string                            `json:"class"`
	AccessModes corev1.PersistentVolumeAccessMode `json:"accessModes"`
	Size        resource.Quantity                 `json:"size"`
	// 华为公有云 EVS 场景需额外指定 diskType, region, zone
	DiskType string `json:"diskType,omitempty"`  // omitempty 表示可以为空
	Region   string `json:"region,omitempty"`
	Zone     string `json:"zone,omitempty"`
}

// HwfkaStatus defines the observed state of Hwfka
type HwfkaStatus struct {
	// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
	// Important: Run "make" to regenerate code after modifying this file

	Phase  string `json:"phase,omitempty"`  // Hwfka 实例安装状态
	Server string `json:"server,omitempty"` // Hwfka 访问地址
}

使用Kubebuilder,可通过在API结构的属性上定义Markers,自动生成CRD中的spec.validation.openAPIV3Schema,即基于OpenAPI的校验规则,以便校验用户创建的CR中字段值的合法性。如上述设置size属性的最小值和最大值:

// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=3

详细使用方法参见:CRD Validation。每次修改API定义后,需要执行命令自动重新生成代码和CRD:

$ make generate
$ make manifests

相关文档