3.10.2 使用CDR扩展Kubernetes API

创建CRD(CustomResourceDefinition)
创建新的CDR时,Kubernetes API Server会为您指定的每个版本创建新的RESTful资源路径。
CDR可以是命名空间的,也可以是集群范围的,可以在CRD scope字段中所指定。

删除命名空间会删除该命名空间中的所有自定义对象。
CDR本身是非命名空间的,可供所有命名空间使用。

创建CDR:

  1. apiVersion: apiextension.k8s.io/v1
  2. kind: CustomResourceDefinition
  3. metadata:
  4. #名称必须符合下面的格式:<plural>.<group>
  5. name: crontabs.stable.example.com
  6. spec:
  7. #REST API使用的组名称:/apis/<group>/<version>
  8. group: stable.example.com
  9. #REST API使用的版本号: /apis/<group>/<version>
  10. versions:
  11. - name: v1
  12. #可以通过served来开关每个version
  13. served: true
  14. #有且仅有一个version开启存储
  15. storage: true
  16. schema:
  17. openAPIV3Schema:
  18. type: object
  19. properties:
  20. spec:
  21. type: object
  22. properties:
  23. cronSpec:
  24. type: string
  25. image:
  26. type: string
  27. replicas:
  28. type: integer
  29. #Namespaced或Cluster
  30. scope: Namespaced
  31. names:
  32. #URL中使用的复数名称: /apis/<group>/<version>/<plural>
  33. plural: crontabs
  34. #CLI中使用的单数名称
  35. singular: crontab
  36. #CameCased格式的单数类型。在清单文件中使用
  37. kind: Crontab
  38. #CLI中使用的资源简称
  39. shortNames:
  40. - ct

创建CDR:

kubectl create -f resourcedefinition.yaml

访问 RESTful API 端点如 http://172.20.0.113:8080 将看到如下 API 端点已创建:

/apis/stable.example.com/v1/namespaces/*/crontabs/...

此端点URL可用于创建和管理自定义对象。

创建自定义对象
自定义对象可包含自定义字段。这些字段可以包含任意JSON。
如下示例中,cronSpec和image自定义字段在自定义对象中设置Crontab。

apiVersion: "stable.example.com/v1"
kind: Crontab
metadata:
   name: my-new-cron-object
spec:
   cronSpec: "* * * * */5"
   image: my-awesome-cron-image