大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
CRD 与自定义控制器
Kubernetes 默认资源类型(Pod、Deployment…)不够用的时候,平台团队用 CustomResourceDefinition(CRD) 扩展 API,再用 Controller / Operator 把「期望状态 → 实际状态」的调谐循环写进集群。本课是 Operator 模式入门——读懂 CRD YAML、知道何时用现成 Operator,而非手写全套 Go controller。
学习目标
- 解释 CRD、CR(Custom Resource)、Controller 三者的关系
- 阅读一份第三方 CRD 清单(如 Prometheus Operator 的 ServiceMonitor)
- 判断 CodeRoadMap 适合「Helm 装现成 Operator」还是「自研 CRD」
扩展模型
API Server
├─ 内置资源:Deployment、Service…([kubernetes-essentials](/tracks/kubernetes-essentials))
└─ CRD 注册新类型:Certificate、KafkaCluster、Application…
Controller(控制循环)
watch CR + 关联资源
→ reconcile:创建 Deployment / Secret / 调云 API
你 kubectl apply 的仍是 YAML;语义 从「3 个 Pod」变成「一个 Postgres 集群含备份策略」这类 领域级 声明。
CRD 最小示例(概念)
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: widgets.example.com
spec:
group: example.com
names:
kind: Widget
plural: widgets
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
size:
type: integer
创建 CRD 后,可 kubectl apply -f my-widget.yaml(kind: Widget)。Validation schema 在 API 层拒错 spec,减少无效对象进 etcd。
Operator 模式
| 层次 | 说明 |
|---|---|
| CRD | 定义「长什么样」 |
| Controller | 监听 CR,创建/更新/删除子资源 |
| Operator | CRD + Controller + 运维知识(备份、升级、故障恢复) |
常见现成 Operator:Prometheus Operator、Strimzi(Kafka)、Crossplane(云资源)。监控栈见 prometheus-essentials 的 Operator 安装路径;发布仍可由 helm-gitops-essentials 管理 Operator 本身的 Helm chart。
何时自研 vs 复用
| 选自研 CRD | 选现成 Operator / Helm |
|---|---|
| 公司内部平台抽象(Application CR 一键部署微服务) | Postgres、Redis、MQ 等有成熟 Operator |
| 与现有 CI/CD 深度集成 | 标准中间件 |
| 有 Go 客户端与 on-call 能力 | 团队规模小、要快上线 |
CodeRoadMap 阶段 优先 Helm chart + GitOps;仅当「每次部署 20 个关联资源」重复劳动明显时,再考虑 薄 CRD 聚合。
与 RBAC、升级
- CRD 集群级对象;安装通常需 cluster-admin
- CRD 版本升级 可能涉及 stored version 迁移——读 release note
- Controller bug 可能 级联删资源;staging 集群先验证(k8a-multi)
可观测:Controller 应暴露 reconcile 错误指标,纳入 observability-essentials 与集群监控 k8a-obs。
练习
- 在集群
kubectl get crd(或文档)找 3 个 CRD 名称及用途 - 画 Widget CR → Controller → Deployment 的数据流
- 说明 Prometheus Operator 中 ServiceMonitor CR 解决什么问题
小结
CRD 扩展 API,Operator 把运维剧本写进控制循环。 下一课聚焦资源配额、LimitRange 与驱逐。