CKAD 常用资源:CustomResourceDefinition

CRD 的 YAML 模板和 CKAD 常考字段解析

CustomResourceDefinition 简称 CRD,用来扩展 Kubernetes API。CKAD 偶尔考创建简单 CRD,重点是 group、names、version、schema。

YAML 模板

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: backups.data.example.com
spec:
  group: data.example.com
  scope: Namespaced
  names:
    plural: backups
    singular: backup
    kind: Backup
    shortNames:
    - bkp
  versions:
  - name: v1alpha1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              source:
                type: string
              destination:
                type: string

自定义资源示例

1
2
3
4
5
6
7
8
apiVersion: data.example.com/v1alpha1
kind: Backup
metadata:
  name: daily-backup
  namespace: default
spec:
  source: /data
  destination: s3://bucket/path

常考字段解析

  • metadata.name:必须是 <plural>.<group>
  • spec.group:API group。
  • spec.scopeNamespacedCluster
  • names.plural:资源复数名,kubectl 查询使用。
  • names.kind:资源 Kind。
  • versions[].name:版本名。
  • versions[].served:是否提供该版本 API。
  • versions[].storage:是否作为存储版本。
  • openAPIV3Schema:字段结构校验。

常用命令

1
2
3
4
k apply -f crd.yaml
k get crd backups.data.example.com
k api-resources | grep -i backup
k get backups -A

易错点

  • CRD 是集群级资源,不写 namespace。
  • metadata.name 要和 plural/group 对上。 k get backups -A
1
2
3
4
5

## 易错点

- CRD 是集群级资源,不能写 namespace。
- `metadata.name` 必须和 `plural.group` 一致。
comments powered by Disqus