CRD介绍
CRD(CustomResourceDefinition)是一种自定义的Kubernetes资源,在定义CRD后,可通过在集群内创建对应 CR(CustomResource)对应用进行统一管理。格式示例请参见CRD典型格式。
OpenAPI校验
在定义CRD时,需同时定义基于OpenAPI的校验规则,其中包含创建CR时的字段及取值范围,以便校验用户创建的CR中字段值的合法性。使用Kubebuilder,可通过在API中定义Marker,自动生成spec.validation.openAPIV3Schema。
CRD字段说明
- group,一般为组织名称,如:osctest。
- API版本,第一个版本一般为v1。
- scope,Namespaced级别,修改为Cluster级别,则集群内仅可以创建一个同名的CR。仅Cluster级别的operator可管理同级别CRD。
- API名称,假设应用名称为hwfka,则对应的多种名称格式如下:
- API名称:kind: Hwfka,创建API的时候使用。
- 列表形式:listKind: HwfkaList。
- 复数形式:plural: hwfkas。
- 单数形式:singular: hwfka。
- 简称:shortNames: hfk。
构建CR
通过CustomResource(CR)的方式创建新资源类型,在CR中为应用定义参数和状态属性。
参数
- size:应用实例包含的实例数量。
- image:应用的容器镜像地址。
- storage:应用数据存储相关配置。
状态
- phase:应用实例安装状态。
- server:应用访问地址。
apiVersion: osctest.huawei.com/v1 kind: Hwfka metadata: name: hwfka-sample spec: size: 3 image: swr.cn-north-7.myhuaweicloud.com/osc/kafka:v2.7.0 storage: class: csi-disk accessModes: ReadWriteOnce size: 20Gi diskType: SSD
- kind为CRD中定义的names.kind。
- metadata.name为CR名称,用户可自行更改。
- 该CR包含三个属性:size、image、storage,下文在定义API时需要为其定义Marker,以便自动生成OpenAPI schema。
- apiVersion由group、domain、version组成,group为osctest,domain为huawei.com,version为v1,与CRD中的定义对应,可根据需要修改。