K8S CRD简明

在 Kubernetes 中一切都可视为资源,Kubernetes 1.7 之后增加了对 CRD 自定义资源二次开发能力来扩展 Kubernetes API,通过 CRD 我们可以向 Kubernetes API 中增加新资源类型,而不需要修改 Kubernetes 源码来创建自定义的 API server,该功能大大提高了 Kubernetes 的扩展能力。
当你创建一个新的CustomResourceDefinition (CRD)时,Kubernetes API服务器将为你指定的每个版本创建一个新的RESTful资源路径,我们可以根据该api路径来创建一些我们自己定义的类型资源。CRD可以是命名空间的,也可以是集群范围的,由CRD的作用域(scpoe)字段中所指定的,与现有的内置对象一样,删除名称空间将删除该名称空间中的所有自定义对象。customresourcedefinition本身没有名称空间,所有名称空间都可以使用。

官网:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/

  1. apiVersion: apiextensions.k8s.io/v1beta1
  2. kind: CustomResourceDefinition
  3. metadata:
  4. # 名称必须与下面的spec字段匹配,格式为: <plural>.<group>
  5. name: crontabs.stable.example.com
  6. spec:
  7. # 用于REST API的组名称: /apis/<group>/<version>
  8. group: stable.example.com
  9. # 此CustomResourceDefinition支持的版本列表
  10. versions:
  11. - name: v1
  12. # 每个版本都可以通过服务标志启用/禁用。
  13. served: true
  14. # 必须将一个且只有一个版本标记为存储版本。
  15. storage: true
  16. # 指定crd资源作用范围在命名空间或集群
  17. scope: Namespaced
  18. names:
  19. # URL中使用的复数名称: /apis/<group>/<version>/<plural>
  20. plural: crontabs
  21. # 在CLI(shell界面输入的参数)上用作别名并用于显示的单数名称
  22. singular: crontab
  23. # kind字段使用驼峰命名规则. 资源清单使用如此
  24. kind: CronTab
  25. # 短名称允许短字符串匹配CLI上的资源,意识就是能通过kubectl 在查看资源的时候使用该资源的简名称来获取。
  26. shortNames:
  27. - ct



创建自定义contab资源

$ kubectl create -f resourcedefinition.yaml

然后在以下位置创建一个新的带有名称空间的RESTful API端点:

/apis/stable.example.com/v1/namespaces/*/crontabs/… 然后我们可以使用该url来创建和管理自定义对象资源。
查看自定义contab资源的信息
$ kubectl get contab/ct