3. CAPI 架构解析:管理集群与工作负载集群、CAPI 控制器工作流、ClusterClass 与 Topology

本章深入解析 Cluster API(CAPI)的核心架构。理解管理集群(Management Cluster)与工作负载集群(Workload Cluster)的职责划分、CAPI 控制器的协调工作流,以及 ClusterClass 与 Topology 如何实现集群模板化与声明式管理,是掌握平台门户集成 CAPI 实现快速扩缩容的基础。

3.1 管理集群与工作负载集群

CAPI 采用“两级集群”架构,将集群的生命周期管理逻辑与用户实际运行工作负载的环境分离。

集群角色 职责 关键组件 示例
管理集群 运行 CAPI 控制器、提供 Kubernetes API 来管理所有工作负载集群的生命周期(创建、扩缩容、升级、销毁)。 Cluster API 控制器、Provider 控制器(如 AWS、vSphere)、ClusterClass 定义。 一个独立的 Kubernetes 集群,通常部署在运维环境中。
工作负载集群 运行用户的实际业务应用,由管理集群通过 CAPI 资源对象声明式管理。 Control Plane 节点、Worker 节点、CNI、CSI 等附加组件。 用户创建的“生产集群”、“开发集群”。
关键原则: 管理集群本身不运行用户业务,它只负责“管理”其他集群。工作负载集群的 Control Plane 和 Worker 节点由管理集群中的 CAPI 控制器通过基础设施 Provider(如 AWS EC2、vSphere VM)创建。

3.2 CAPI 控制器工作流

CAPI 的核心是一个基于 Kubernetes 控制器模式的协调循环。当用户通过平台门户提交扩缩容请求时,CAPI 控制器会执行以下工作流:

  1. 资源创建/更新: 用户(或平台门户)在管理集群中创建或更新 Cluster、MachineDeployment 等自定义资源。
  2. 控制器监听: CAPI 控制器(cluster-api-controller)通过 Informer 机制监听到资源变化。
  3. 协调循环(Reconcile): 控制器进入协调循环,读取当前状态(Status)与期望状态(Spec)的差异。
  4. 调用 Provider: 控制器调用对应的基础设施 Provider(如 CAPA 或 CAPV)来创建、删除或修改虚拟机/节点。
  5. 状态更新: 基础设施 Provider 完成后,CAPI 控制器更新资源的状态,并触发下一轮协调,直到集群达到期望状态。
扩缩容触发点: 平台门户通过修改 MachineDeployment.Spec.Replicas 字段的值,即可触发 CAPI 控制器自动增加或减少工作节点数量,实现快速扩缩容。
CAPI 控制器工作流 平台门户 修改 Replicas 管理集群 MachineDeployment CAPI 控制器 协调循环 基础设施 Provider 创建/删除 VM 工作负载集群 节点扩缩容 说明: 平台门户 → 修改 MachineDeployment.Spec.Replicas → CAPI 控制器协调 → Provider 执行 → 工作负载集群节点变化。

3.3 ClusterClass 与 Topology

ClusterClass 是 CAPI 引入的模板化机制,允许运维团队定义可复用的集群蓝图。Topology 则允许用户在创建集群时引用 ClusterClass,并声明式地定制集群的拓扑结构。

3.3.1 ClusterClass 概念

  • 定义: 一个集群级别的自定义资源,描述了集群的“类”或“模板”,包括 Control Plane 类型、Worker 节点池定义、基础设施 Provider 配置等。
  • 作用: 标准化集群创建流程,确保所有集群遵循统一的安全基线、网络配置和节点规格。
  • 管理: 由平台运维团队在管理集群中创建和维护,普通用户通常只有读取权限。

3.3.2 Topology 概念

  • 定义: 在 Cluster.Spec.Topology 字段中定义,用户通过引用 ClusterClass 并覆盖特定参数(如节点数量、实例类型)来声明集群的最终拓扑。
  • 声明式扩缩容: 修改 Topology 中的 Workers.MachineDeployments[*].Replicas 即可触发扩缩容,无需手动管理 MachineDeployment 对象。
  • 版本管理: 支持集群版本与 ClusterClass 版本的解耦,便于灰度升级。
注意: 使用 Topology 时,集群的 Control Plane 和 Worker 节点池由 CAPI 控制器自动管理,用户不应直接修改由 Topology 生成的底层 Machine 或 MachineSet 对象,否则可能导致状态不一致。
ClusterClass 与 Topology 关系 ClusterClass 模板:ControlPlane 类型 Worker 节点池定义 Cluster.Spec.Topology 引用 ClusterClass 覆盖 Replicas / 实例类型 工作负载集群 Control Plane 节点 Worker 节点池 扩缩容流程示例: 1. 平台门户调用 API 修改 Cluster.Spec.Topology.Workers.MachineDeployments[0].Replicas = 5 2. CAPI 控制器检测到 Topology 变化,自动更新对应的 MachineDeployment 对象。 3. MachineDeployment 控制器创建/删除 Machine 对象,基础设施 Provider 执行 VM 操作。 4. 工作负载集群的 Worker 节点数量从 3 变为 5,完成扩缩容。

3.4 架构总结

CAPI 通过管理集群与工作负载集群的分离,实现了集群生命周期管理的集中化与标准化。控制器工作流确保了声明式配置的最终一致性。ClusterClass 与 Topology 的组合,为平台门户提供了强大的集群模板化与快速扩缩容能力,使得用户无需关心底层基础设施细节,即可通过简单的参数调整实现集群规模的动态变化。