1. Operator 模式概述

Operator 是 Kubernetes 生态中实现“应用感知”自动化运维的核心模式。它将运维人员对特定领域应用的操作知识(部署、扩缩容、备份、恢复、升级)编码为软件,由控制器持续驱动实际状态向期望状态收敛。理解 Operator 模式,需要先拆解其底层设计理念、Controller 模式、Reconciler 循环以及 Operator 与 Controller 的关系。

1.1 Operator 设计理念

Operator 的设计理念可以概括为:“把运维知识写成代码,让 Kubernetes 替你执行”。其核心思想包括:

  • 领域知识编码:将人工运维手册中的步骤、判断条件、异常处理逻辑转化为可重复执行的程序逻辑。
  • 声明式 API 驱动:用户通过自定义资源(CR)声明期望状态,Operator 负责将系统实际状态调整为该期望状态。
  • 控制闭环:Operator 内部运行一个永不停止的“观察-分析-执行”循环,持续对比实际状态与期望状态。
  • 无状态控制器:Operator 本身不存储持久化状态,所有状态信息都存储在 Kubernetes API Server 的 CR 对象中。
设计理念要点:Operator 不是简单的脚本或定时任务,而是一个具备“持续调谐”能力的自治系统。它能够处理节点故障、Pod 重启、配置变更等动态事件,无需人工介入。

1.2 Controller 模式

Controller 模式是 Kubernetes 内部普遍采用的一种自动化控制架构。它由三个核心组件构成:

组件 职责 示例
Informer / Watcher 监听 API Server 上特定资源的变化事件(Add/Update/Delete) 监听 Deployment 资源变化
Work Queue 将事件去重、限速后排队,防止重复处理 使用 client-go 的 RateLimitingQueue
Reconciler 从队列取出事件,执行调谐逻辑,将实际状态调整为期望状态 创建/更新/删除 Pod、Service

Controller 模式的核心价值在于:事件驱动 + 状态收敛。它不依赖定时轮询,而是通过 Watch 机制实时感知变化,再通过工作队列保证处理效率和稳定性。

1.3 Reconciler 循环

Reconciler 循环是 Operator 内部最核心的执行单元。每次调谐(Reconcile)请求触发后,循环执行以下步骤:

  1. 读取期望状态:从 CR 对象中获取用户声明的期望配置(如副本数、镜像版本、存储大小)。
  2. 读取实际状态:查询集群中当前运行的资源(如 Pod 列表、PVC 状态、Service 端点)。
  3. 对比差异:计算期望状态与实际状态之间的差距(如副本数不足、镜像版本不一致)。
  4. 执行调谐动作:通过 Kubernetes API 创建、更新或删除资源,使实际状态向期望状态靠拢。
  5. 更新状态:将调谐结果(如当前版本、资源状态、错误信息)写回 CR 的 Status 字段。
  6. 返回结果:返回 Requeue(需要再次调谐)或 Done(调谐完成)。
关键理解:Reconciler 循环不是一次性任务,而是一个“无限循环”。即使一次调谐成功,控制器也会持续监听后续变化,确保系统始终维持在期望状态。
Reconciler 循环流程图 Reconcile 请求 读取期望状态 (CR) 读取实际状态 (集群) 对比差异 执行调谐动作 更新 Status / 返回 Requeue / 持续监听

1.4 Operator 与 Controller 的关系

Operator 和 Controller 在 Kubernetes 中既有紧密联系,又有明确区别。下表从多个维度进行对比:

维度 Controller Operator
定义 通用的控制循环框架,负责调谐 Kubernetes 内置资源 特定领域的 Controller,管理自定义资源(CRD)
资源类型 内置资源(Pod、Service、Deployment 等) 自定义资源(CRD)+ 内置资源
领域知识 通用,不包含特定应用运维逻辑 包含特定应用的运维知识(备份、升级、扩缩容策略)
实现方式 通常使用 client-go 库,实现 Reconciler 接口 通常使用 Operator SDK / Kubebuilder 框架
典型示例 kube-controller-manager 中的 DeploymentController etcd-operator、prometheus-operator、cert-manager

从架构角度看,Operator 是 Controller 模式的一种高级特化。每个 Operator 内部至少包含一个 Controller,该 Controller 负责监听 CRD 实例的变化并执行调谐逻辑。Operator 在 Controller 的基础上增加了:

  • CRD 定义:声明自定义资源的 Schema 和验证规则。
  • RBAC 权限:Operator 需要额外的权限来管理其关联资源。
  • 部署管理:Operator 本身作为 Deployment 运行在集群中。
  • 版本管理:Operator 的生命周期与 CRD 版本升级紧密关联。
常见误区:不要将 Operator 等同于“一个 Controller”。Operator 是一个完整的应用管理解决方案,它包含 Controller、CRD、RBAC、Webhook 等多个组件。Controller 只是 Operator 内部执行调谐逻辑的核心引擎。
Operator 与 Controller 架构关系 Operator Controller Informer / Watcher Work Queue Reconciler Status Updater CRD 定义 自定义资源 Schema RBAC 权限 ServiceAccount / ClusterRole Webhook Admission / Validation

1.5 小结

Operator 模式是 Kubernetes 生态中实现“应用级自动化”的最佳实践。其核心脉络可以总结为:

  • 设计理念:将运维知识编码为软件,通过声明式 API 驱动自动化。
  • Controller 模式:事件驱动 + 工作队列 + 调谐循环,构成自动化控制的基础框架。
  • Reconciler 循环:读取期望状态 → 读取实际状态 → 对比差异 → 执行动作 → 更新状态,形成闭环。
  • Operator vs Controller:Operator 是 Controller 的特化与扩展,增加了 CRD、RBAC、Webhook 等组件,用于管理特定领域的复杂应用。