合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
在 kubernetes 中有一系列内置的资源,诸如:pod、deployment、configmap、service …… 等等,它们由 k8s 的内部组件管理。而除了这些内置资源之外,k8s 还提供了另外一种方式让用户可以随意地自定义资源,这就是 CRD (全称 CustomResourceDefinitions) 。
例如,我可以通过 CRD 去定义一个 mypod、myjob、myanything 等等资源,一旦注册成功,那么这些自定义资源便会享受与内置资源相同的待遇。具体而言就是:
需要注意的是,CRD 在不同的语境下有不同的含义,有时候可能只是指 k8s 中的 CustomResourceDefinitions 这一种特定的资源,有时候也可能是指用户通过 CRD 所创建出来的自定义资源。
狭义上的 CRD (全称 CustomResourceDefinitions) 是 k8s 中的一种特殊的内置资源,我们可以通过它去创建我们自定义的其它资源。例如,我们可以通过 CRD 去创建一个叫 CronTab 的资源:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# 名称必须匹配 <plural>.<group>
name: crontabs.stable.example.com
spec:
# group 名称,用于 REST API: /apis/<group>/<version>
group: stable.example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
# 定义属性
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
# 作用范围可以是 Namespaced 或者 Cluster
scope: Namespaced
names:
# 复数名称,使用于 URL: /apis/<group>/<version>/<plural>
plural: crontabs
# 单数名称,可用于 CLI
singular: crontab
# 驼峰单数,用于资源清单
kind: CronTab
# 名字简写,可用于 CLI
shortNames:
- ct
TOP