k8s中 CRD(Custom Resource Definition)‌ 和 ‌Controller(控制器)的关系

在 Kubernetes 中,‌CRD(Custom Resource Definition)‌ 和 ‌Controller(控制器)‌ 是扩展集群功能的两个核心组件,其关系可理解为 ‌定义资源‌ 与 ‌管理资源状态‌ 的协作机制:


一、CRD:定义自定义资源

  1. ‌功能定位‌
    CRD 用于声明一种新的资源类型(Custom Resource),本质是扩展 Kubernetes API 的核心机制68。用户通过 YAML 定义资源的字段(如 specstatus)、校验规则(Schema)及 API 路径(Group/Version/Kind

    • 例如:定义一个 Network 资源,描述集群网络配置需求
  2. ‌工作原理‌
    CRD 提交后,Kubernetes API Server 会动态注册该资源,使其支持 kubectl create/get 等操作68。此时资源仅为静态声明,尚无实际逻辑。


二、Controller:实现资源状态管理

  1. ‌功能定位‌
    Controller 是持续运行的守护进程,监听 CRD 定义的资源对象(CR),并根据其 spec 驱动集群状态向期望状态收敛

    • 核心逻辑:‌对比资源的 spec(期望状态)与 status(实际状态),执行调谐(Reconcile)操作‌
  2. ‌工作流程‌

    • 监听 CR 的创建/更新事件;
    • 解析 CR 的 spec 字段(如副本数、镜像版本);
    • 调用 Kubernetes API 创建关联资源(如 Deployment、Service);
    • 更新 CR 的 status 字段反馈当前状态 
用户创建 CR → Controller 检测变更 → 生成关联资源 → 更新 CR 状态

三、协作关系:CRD + Controller = 完整扩展能力

  1. ‌分工协作模型‌

    • ‌CRD 负责“是什么”‌:定义资源的形态和规范;
    • ‌Controller 负责“怎么做”‌:实现资源声明到实际组件的转换逻辑
  2. ‌Operator 模式‌
    二者结合形成 ‌Operator‌,将运维经验编码为自动化操作(如数据库备份、中间件配置)

    例如:定义一个 MySQLCluster CRD,配套 Controller 自动创建 Pod/Secret/Volume 等资源


总结关系图谱 

graph LR CRD[CRD:定义资源结构] -->|声明| CR[Custom Resource] Controller -->|监听/调谐| CR Controller -->|创建| K8s_Resources[Pod, Service等] CR -->|status 反馈| Controller
  • ‌CRD 是资源蓝图‌,Controller 是资源引擎
  • 二者分离设计,支持灵活扩展复杂业务场景
posted @ 2025-08-15 09:52  david_cloud  阅读(53)  评论(0)    收藏  举报