k8s深度讲解:无限的扩展性 - CRD 与 Operator
k8s深度讲解:无限的扩展性 - CRD 与 Operator
第一步:教会 Kubernetes 新“名词” - 自定义资源定义 (CRD)
Kubernetes 的 API 中预定义了很多我们熟悉的资源类型,如 Pod
, Deployment
, Service
等。自定义资源定义 (Custom Resource Definition - CRD) 允许我们向这个 API 中添加我们自己的、全新的资源类型。
它就像是为 Kubernetes 的“字典”里添加一个新词条。
一旦你定义了这个新词条,比如 MyAwesomeDatabase
,Kubernetes 的 API Server 就认识它了,你就可以像操作内置资源一样,通过 kubectl
来创建、获取、删除你自己的 MyAwesomeDatabase
对象。
如何创建一个 CRD?
创建一个 CRD 本身也是一个声明式的过程,通过应用一个 kind: CustomResourceDefinition
的 YAML 文件来完成。
# myawesomedatabase-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:# CRD 的名称必须是 a.b.c 的格式name: myawesomedatabases.sre.example.com
spec:# group 定义了你的 API 组group: sre.example.com# scope 可以是 Namespaced (属于某个命名空间) 或 Cluster (集群级别)scope: Namespaced# names 定义了你的新资源在不同场景下的叫法names: