更新时间:2024-09-04 GMT+08:00
分享

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:应用访问地址。
以创建一个Kafka应用,指定其Pod数量为3为例,设计CR如下:
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中的定义对应,可根据需要修改。

相关文档