3.10.2 使用CDR扩展Kubernetes API
创建CRD(CustomResourceDefinition)
创建新的CDR时,Kubernetes API Server会为您指定的每个版本创建新的RESTful资源路径。
CDR可以是命名空间的,也可以是集群范围的,可以在CRD scope字段中所指定。
删除命名空间会删除该命名空间中的所有自定义对象。
CDR本身是非命名空间的,可供所有命名空间使用。
创建CDR:
apiVersion: apiextension.k8s.io/v1kind: CustomResourceDefinitionmetadata:#名称必须符合下面的格式:<plural>.<group>name: crontabs.stable.example.comspec:#REST API使用的组名称:/apis/<group>/<version>group: stable.example.com#REST API使用的版本号: /apis/<group>/<version>versions:- name: v1#可以通过served来开关每个versionserved: true#有且仅有一个version开启存储storage: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:cronSpec:type: stringimage:type: stringreplicas:type: integer#Namespaced或Clusterscope: Namespacednames:#URL中使用的复数名称: /apis/<group>/<version>/<plural>plural: crontabs#CLI中使用的单数名称singular: crontab#CameCased格式的单数类型。在清单文件中使用kind: Crontab#CLI中使用的资源简称shortNames:- 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
