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 控制器会执行以下工作流:
- 资源创建/更新: 用户(或平台门户)在管理集群中创建或更新
Cluster、MachineDeployment等自定义资源。 - 控制器监听: CAPI 控制器(
cluster-api-controller)通过 Informer 机制监听到资源变化。 - 协调循环(Reconcile): 控制器进入协调循环,读取当前状态(Status)与期望状态(Spec)的差异。
- 调用 Provider: 控制器调用对应的基础设施 Provider(如
CAPA或CAPV)来创建、删除或修改虚拟机/节点。 - 状态更新: 基础设施 Provider 完成后,CAPI 控制器更新资源的状态,并触发下一轮协调,直到集群达到期望状态。
扩缩容触发点: 平台门户通过修改
MachineDeployment.Spec.Replicas 字段的值,即可触发 CAPI 控制器自动增加或减少工作节点数量,实现快速扩缩容。
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 对象,否则可能导致状态不一致。
3.4 架构总结
CAPI 通过管理集群与工作负载集群的分离,实现了集群生命周期管理的集中化与标准化。控制器工作流确保了声明式配置的最终一致性。ClusterClass 与 Topology 的组合,为平台门户提供了强大的集群模板化与快速扩缩容能力,使得用户无需关心底层基础设施细节,即可通过简单的参数调整实现集群规模的动态变化。