3. 控制面架构概览:Cluster API 控制面组件及其交互流程

Cluster API 的核心设计理念是将 Kubernetes 集群的声明式管理能力抽象为一系列可插拔的 Provider。这些 Provider 运行在管理集群(Management Cluster)的控制面中,通过标准的 Kubernetes 资源对象(如 Cluster、Machine、MachineDeployment)驱动目标集群(Workload Cluster)的完整生命周期。

整个控制面架构由三大核心 Provider 构成,它们各司其职,通过协调循环(Reconciliation Loop)实现最终一致性。

3.1 三大核心 Provider 定义与职责

Provider 类型 核心职责 管理的关键资源 典型实现
Core Provider 提供 Cluster API 的通用控制逻辑与资源模型,不依赖具体基础设施。 Cluster, Machine, MachineSet, MachineDeployment cluster-api-controller(官方核心控制器)
Infrastructure Provider 负责在特定基础设施(AWS、vSphere、OpenStack 等)上创建、删除和管理虚拟机、网络、负载均衡器等资源。 AWSMachine, VSphereMachine, OpenStackMachine, InfrastructureCluster cluster-api-provider-aws (CAPA), cluster-api-provider-vsphere (CAPV)
Bootstrap Provider 负责生成节点初始化所需的配置(如 cloud-init 脚本、kubeadm 配置),将新节点加入集群。 KubeadmConfig, KubeadmConfigTemplate cluster-api-bootstrap-provider-kubeadm (CABPK)
关键理解: Core Provider 定义了“做什么”(如:我需要一个 3 节点的控制面),Infrastructure Provider 定义了“在哪里做”(如:在 AWS 的 us-east-1 区域创建 3 台 t3.medium 实例),Bootstrap Provider 定义了“怎么做”(如:用 kubeadm 初始化并加入集群)。

3.2 组件交互流程:从声明到集群就绪

当用户提交一个 Cluster 对象和关联的 Machine 对象到管理集群后,三大 Provider 通过以下标准流程协同工作:

  1. Cluster 对象创建:Core Provider 的 ClusterController 检测到新的 Cluster 对象,开始协调。
  2. 基础设施集群创建:Core Provider 调用 Infrastructure Provider,后者创建对应的 InfrastructureCluster 资源(如 AWSCluster),并实际创建 VPC、子网、安全组等网络基础设施。
  3. 控制面 Machine 创建:Core Provider 创建 Machine 对象(通常通过 MachineDeployment 或 KubeadmControlPlane 资源)。
  4. Bootstrap 数据生成:Core Provider 调用 Bootstrap Provider,后者生成 KubeadmConfig 对象,包含加入集群的 、CA 证书哈希等敏感数据。
  5. 基础设施 Machine 创建:Core Provider 调用 Infrastructure Provider,后者创建 InfrastructureMachine 资源(如 AWSMachine),并实际启动虚拟机。
  6. 节点初始化:虚拟机启动后,通过 cloud-init 或 ignition 执行 Bootstrap Provider 生成的配置脚本,自动安装 kubelet、kubeadm,并执行 kubeadm init 或 kubeadm join。
  7. 状态反馈:节点成功加入后,Infrastructure Provider 和 Bootstrap Provider 更新各自资源的状态,Core Provider 最终将 Cluster 对象标记为 Ready。
多租户网络隔离关键点: 在第 2 步中,Infrastructure Provider 创建的网络基础设施(如 VPC、子网、安全组规则)是后续实现租户间网络隔离的基础。不同的 Cluster 对象可以映射到不同的隔离网络域。

3.3 核心交互流程示意图

下图展示了从用户提交 Cluster 对象到目标集群就绪的完整交互流程,以及三大 Provider 之间的调用关系:

Cluster API 三大 Provider 交互流程 Cluster API 三大 Provider 交互流程 用户 / 运维人员 提交 Cluster / Machine 对象 Core Provider (cluster-api-controller) 协调 Cluster / Machine / MachineDeployment 资源 创建 InfrastructureCluster Infrastructure Provider 管理 VM / 网络 / 负载均衡器 请求 Bootstrap 数据 Bootstrap Provider 生成 kubeadm / cloud-init 配置 启动虚拟机 目标集群节点 (VM) 注入初始化配置 目标集群节点 (VM) 集群就绪 (Ready) 交互流程说明: 1. 用户提交 Cluster 对象 → Core Provider 开始协调。 2. Core Provider 调用 Infrastructure Provider 创建网络和虚拟机。 3. Core Provider 调用 Bootstrap Provider 生成节点初始化配置。 4. 虚拟机启动后执行初始化脚本,自动加入集群,状态反馈至 Core Provider。

3.4 Provider 之间的资源依赖关系

为了更清晰地理解控制面的数据流,下表展示了关键资源之间的 OwnerReference 和依赖链:

资源 A 资源 B 依赖关系 说明
Cluster InfrastructureCluster Cluster → InfrastructureCluster Cluster 通过 .spec.infrastructureRef 引用 InfrastructureCluster
Machine InfrastructureMachine Machine → InfrastructureMachine Machine 通过 .spec.infrastructureRef 引用具体的虚拟机资源
Machine BootstrapConfig Machine → BootstrapConfig Machine 通过 .spec.bootstrap.dataSecretName 引用初始化密钥
KubeadmControlPlane Machine KubeadmControlPlane → Machine KubeadmControlPlane 负责管理控制面 Machine 的创建与更新
多租户隔离设计注意: 在实现多租户网络隔离时,InfrastructureCluster 资源是定义网络边界的关键入口。不同的租户应使用不同的 InfrastructureCluster 实例,并确保其引用的网络资源(如 VPC CIDR、子网段)不重叠。Core Provider 本身不感知网络拓扑,所有隔离策略都通过 Infrastructure Provider 实现。

3.5 控制面组件部署架构

在管理集群中,三大 Provider 通常以 Deployment 形式运行,并通过 CRD(Custom Resource Definition)扩展 Kubernetes API。下图展示了这些组件在管理集群内的部署关系:

管理集群内 Provider 部署架构 管理集群内 Provider 部署架构 管理集群 (Management Cluster) Core Provider Deployment: cluster-api-controller CRD: Cluster, Machine, MachineSet Infrastructure Provider Deployment: capa-controller-manager CRD: AWSCluster, AWSMachine Bootstrap Provider Deployment: cabpk-controller CRD: KubeadmConfig Kubernetes API Server etcd (状态存储) 所有 Provider 通过 API Server 监听资源变化,并将状态写回 etcd。 每个 Provider 独立运行,通过 CRD 和 OwnerReference 实现松耦合协作。

3.6 多租户场景下的组件职责划分

在多租户网络隔离场景中,理解每个 Provider 的职责边界至关重要:

  • Core Provider:负责租户集群的抽象管理,不接触网络配置。它确保每个租户的 Cluster 对象被正确协调,但不关心底层网络如何实现隔离。
  • Infrastructure Provider:网络隔离的核心执行者。它负责为每个租户的 Cluster 创建独立的网络栈(如 AWS VPC + 子网 + 安全组),并确保不同租户的网络 CIDR 不冲突。在多租户部署中,通常需要为每个租户配置独立的 InfrastructureCluster 模板。
  • Bootstrap Provider:负责生成节点初始化配置。在多租户场景下,它可能需要根据租户身份注入不同的网络插件配置(如 Calico 的 IP 池、Cilium 的 ClusterPool),但本身不创建网络资源。
架构总结: Cluster API 通过 Provider 模式实现了关注点分离。Core Provider 提供通用编排逻辑,Infrastructure Provider 封装基础设施差异,Bootstrap Provider 处理节点初始化。这种分层设计使得多租户网络隔离策略可以完全集中在 Infrastructure Provider 层面实现,而无需修改上层编排逻辑。