
# CRD介绍
CRD(CustomResourceDefinition)是一种自定义的Kubernetes资源，在定义CRD后，可通过在集群内创建对应 CR(CustomResource)对应用进行统一管理。格式示例请参见[CRD典型格式](https://support.huaweicloud.com/devg-osc/osc_ss_0054.html)。
#### 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
```
![](https://support.huaweicloud.com/devg-osc/public_sys-resources/note_3.0-zh-cn.png)
- 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中的定义对应，可根据需要修改。
 
