3.10.2 使用CDR扩展Kubernetes API
创建CRD(CustomResourceDefinition)
创建新的CDR时,Kubernetes API Server会为您指定的每个版本创建新的RESTful资源路径。
CDR可以是命名空间的,也可以是集群范围的,可以在CRD scope字段中所指定。
删除命名空间会删除该命名空间中的所有自定义对象。
CDR本身是非命名空间的,可供所有命名空间使用。
创建CDR:
apiVersion: apiextension.k8s.io/v1
kind: CustomResourceDefinition
metadata:
#名称必须符合下面的格式:<plural>.<group>
name: crontabs.stable.example.com
spec:
#REST API使用的组名称:/apis/<group>/<version>
group: stable.example.com
#REST API使用的版本号: /apis/<group>/<version>
versions:
- name: v1
#可以通过served来开关每个version
served: true
#有且仅有一个version开启存储
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
#Namespaced或Cluster
scope: Namespaced
names:
#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