2. Kubernetes Operator 基础回顾:Operator 模式原理、CRD 与 Controller 工作机制、Operator 生命周期管理

在深入 OPA 校验多集群 Operator 发布合规之前,必须牢固掌握 Operator 模式的核心原理。本章将系统回顾 Operator 的三大支柱:模式原理、CRD 与 Controller 工作机制、以及 Operator 生命周期管理。这些知识是后续章节中编写 OPA 策略、拦截不合规 Operator 的基础。

2.1 Operator 模式原理

Operator 是 Kubernetes 上打包、部署和管理复杂有状态应用的扩展机制。其本质是将运维人员的领域知识编码为软件,通过控制循环自动执行运维任务。

核心思想: Operator = CRD(自定义资源定义)+ Controller(控制器)。CRD 定义期望状态,Controller 持续观察当前状态并驱动其向期望状态收敛。

Operator 模式解决了传统 Helm Chart 或静态 YAML 无法处理的有状态应用生命周期管理问题,例如数据库扩缩容、备份恢复、版本升级等。

Operator 模式核心架构 用户/管理员 CR 实例 Controller (控制循环) K8s API 工作流程说明: 1. 用户创建/更新 CR 实例(定义期望状态)。 2. Controller 通过 Watch 机制感知 CR 变化。 3. Controller 读取 CR 中的期望状态,对比当前集群状态。 4. Controller 调用 K8s API 创建/更新/删除下属资源(Pod、PVC、Service 等)。 5. Controller 持续监控,确保实际状态与期望状态一致。

2.2 CRD 与 Controller 工作机制

2.2.1 CRD(Custom Resource Definition)

CRD 是 Kubernetes 的扩展机制,允许用户定义新的资源类型。CRD 本身是一个 API 资源,注册后即可像原生资源(如 Pod、Deployment)一样通过 kubectl 操作。

概念 说明 示例
CRD 定义 声明新资源类型的 Schema(结构、验证规则) kind: CustomResourceDefinition
CR 实例 按 CRD 定义创建的具体资源对象 kind: MyApp
OpenAPI v3 Schema CRD 中用于字段校验、默认值、子资源的规范 spec.versions[0].schema.openAPIV3Schema
版本管理 支持多个 API 版本共存,通过 Conversion Webhook 转换 v1alpha1 → v1

最佳实践: CRD 的 Schema 应尽可能严格,包括必填字段、枚举值、最小值/最大值等。这可以在 API 入口层拦截大量错误配置,减轻 Controller 的校验负担。

2.2.2 Controller 工作机制

Controller 是 Operator 的“大脑”,其核心是一个控制循环(Reconciliation Loop)。典型的 Controller 工作流程如下:

  1. Watch(监听): 通过 Informer 监听 CR 实例及关联资源的变化事件(Add/Update/Delete)。
  2. Reconcile(调谐): 将事件放入工作队列,Worker 从队列取出并执行调谐逻辑。
  3. Compare(对比): 读取 CR 中的期望状态,查询集群中的实际状态。
  4. Act(执行): 创建、更新或删除资源,使实际状态向期望状态收敛。
  5. Update Status(更新状态): 将操作结果写回 CR 的 status 字段。
Controller 内部工作流程 Watch 工作队列 Reconcile 对比状态 执行操作 更新 Status 调谐循环持续运行,直到 CR 的期望状态与集群实际状态完全一致。 若执行失败,Controller 会将错误信息写入 Status,并重新入队重试。

2.3 Operator 生命周期管理

Operator 本身也是一个需要管理的应用。其生命周期包括安装、升级、配置、监控、备份、卸载等阶段。在 OPA 合规场景中,我们尤其关注安装和升级阶段的策略校验。

2.3.1 安装方式对比

安装方式 工具/机制 适用场景 OPA 校验介入点
Helm Chart Helm v3 通用 Operator 分发 Chart 渲染后的 YAML 清单
OLM (Operator Lifecycle Manager) OperatorHub, CatalogSource 企业级 Operator 市场 Subscription / InstallPlan 资源
手动 YAML kubectl apply 开发测试环境 Admission Webhook 拦截

2.3.2 升级策略

Operator 升级涉及 CRD 版本变更、Controller 镜像更新、以及存量 CR 实例的迁移。常见的升级策略包括:

  • 替换升级(Recreate): 删除旧 Pod,创建新 Pod。简单但会导致服务中断。
  • 滚动升级(Rolling Update): 逐步替换 Pod,保持服务可用。适用于无状态 Operator。
  • 蓝绿部署(Blue-Green): 同时运行新旧两套 Operator,切换流量。适用于关键业务。

合规风险提示: Operator 升级时,CRD 的 Schema 变更可能导致存量 CR 实例校验失败。OPA 策略应检查升级后的 CRD 是否向后兼容,以及是否影响现有资源。

2.3.3 生命周期状态机

一个标准的 Operator 生命周期状态机包含以下关键状态:

  1. Pending: Operator 资源已提交,但尚未开始安装。
  2. Installing: 正在创建 Deployment、ServiceAccount、RBAC 等资源。
  3. Succeeded: Operator 所有组件运行正常,Ready 副本数满足要求。
  4. Failed: 安装或运行过程中出现不可恢复的错误。
  5. Upgrading: 正在执行版本升级流程。
  6. Deleting: 正在清理 Operator 及其管理的资源。

在 OPA 策略中,我们可以针对 Installing 和 Upgrading 状态设置准入控制,确保只有通过合规校验的 Operator 才能进入运行状态。

关键总结: Operator 模式的核心是“声明式 API + 控制循环”。CRD 定义了“是什么”,Controller 实现了“怎么做”。生命周期管理则确保 Operator 自身的安全、可靠和可升级。在后续章节中,我们将利用 OPA 策略引擎,在 Operator 安装和升级的关键节点注入合规校验,实现多集群的统一治理。