在Kubernetes
中, 所有的功能实现都以资源(Resource
)形式体现。简单来说,资源就是Kubernetes的API端点(endpoint
),用于存储某种类型的对象。用户通过对资源对象的CRUD
操作完成相应功能管理。Kubernetes 1.7之后添加了自定义资源(Custom Resource
)的扩展能力,允许使用者通过定义自己的资源类型来扩展Kubernetes API,大大增强扩展Kubernetes的灵活性。这些自定义资源和Pod
、Deployment
等原生资源对象的操作方法基本一样。
用户使用CRD(Custom Resource Definitions)
来定义自定义资源(Custom Resource
)。CRD
被创建后,Kubernetes APIServer
会为CRD
中指定的资源版本创建相应的RESTAPI端点。
CRD
可以通过YAML
文件来创建,YAML
文件中指定CRD
对象的规范,其中比较重要的字段有:
- metadata.name: 要创建的
CRD
名称 - spec.group:
CRD
对象所属的API组 - spec.version:
CRD
对象所属的API版本 - spec.names: 管理自定义资源所需要的名称描述,可以定义
plural
(复数名称),singular
(单数名称)和shortnames
(简称)等字段 - spec.names.kind: 指定自定义资源的类型名称
- spec.scope: 指明自定义资源有效范围,可以是整个集群有效(
clustered
)或命名空间内有效(namespaced
)