CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kubernetes 进阶/课时/CRD 与自定义控制器
RawBlame
课时目录12 节

Kubernetes 进阶

  1. 01K8s 进阶概览
  2. 02托管集群选型
  3. 03自建 vs 托管
  4. 04控制平面与工作节点
  5. 05多集群管理
  6. 06污点和容忍度
  7. 07拓扑分布约束
  8. 08CRD 与自定义控制器
  9. 09资源管理与驱逐
  10. 10集群可观测性
  11. 11资源监控与优化
  12. 12综合练习

CRD 与自定义控制器

CRD、Operator 模式入门。

35 分钟

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,创建/更新/删除子资源
OperatorCRD + 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 与驱逐。

加载本节练习…
← 上一课拓扑分布约束下一课 →资源管理与驱逐