2. Cluster API核心概念

Cluster API 是 Kubernetes SIG 社区维护的官方子项目,旨在通过声明式 API 和控制器模式,将 Kubernetes 集群的完整生命周期(创建、扩缩容、升级、销毁)纳入 Kubernetes 自身的资源管理体系中。理解其核心对象模型是掌握多租户网络隔离实践的前提。

Cluster API 的资源模型围绕“集群”与“机器”两个抽象层次展开,并通过 Provider 机制对接不同基础设施。以下五个核心概念构成了整个系统的骨架。

2.1 Cluster:集群的顶层抽象

Cluster 对象是集群生命周期的顶层资源,它定义了一个 Kubernetes 集群的全局配置和状态。一个 Cluster 对象通常包含对控制面(ControlPlane)和基础设施网络(Infrastructure)的引用。

字段 说明 典型值/示例
spec.infrastructureRef 引用基础设施集群对象(如 AWSCluster、AzureCluster) AWSCluster/my-cluster-vpc
spec.controlPlaneRef 引用控制面对象(如 KubeadmControlPlane) KubeadmControlPlane/my-cluster-cp
status.phase 集群当前生命周期阶段 Provisioned, Failed
关键设计: Cluster 对象本身不直接管理节点,而是通过引用 ControlPlane 和 Infrastructure 对象来解耦控制面与基础设施的配置。这种设计使得同一套 Cluster 定义可以适配不同云厂商。

2.2 Machine:节点的原子单元

Machine 对象对应一个具体的计算节点(虚拟机或裸金属服务器)。它是 Cluster API 中最细粒度的资源,直接映射到基础设施中的一台实例。每个 Machine 对象都包含指向其所属 Cluster、关联的 Bootstrap 数据以及基础设施实例的引用。

apiVersion: cluster.x-k8s.io/v1beta1
kind: Machine
metadata:
  name: my-cluster-worker-0
  namespace: default
spec:
  clusterName: my-cluster
  version: v1.28.0
  bootstrap:
    dataSecretName: my-cluster-worker-0-bootstrap
  infrastructureRef:
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: AWSMachine
    name: my-cluster-worker-0
网络隔离视角: 在多租户场景中,每个 Machine 的 infrastructureRef 指向的基础设施对象(如 AWSMachine)可以携带子网、安全组等网络配置,这是实现节点级网络隔离的入口点。

2.3 MachineDeployment:声明式节点管理

MachineDeployment 是 Cluster API 对 Kubernetes Deployment 模式的移植,用于声明式地管理一组同质化的 Machine 对象。它提供滚动更新、回滚、扩缩容等能力,是生产环境中管理 Worker 节点的主要方式。

  • 模板化定义: 通过 spec.template.spec 定义 Machine 模板,所有副本共享该模板。
  • 滚动更新策略: 支持 RollingUpdate 和 OnDelete 两种策略,控制节点替换行为。
  • 与 Cluster 的关系: 一个 MachineDeployment 必须属于一个 Cluster,通过 spec.clusterName 关联。
特性 MachineDeployment MachineSet(底层)
用户面向 是(推荐使用) 否(由 MachineDeployment 管理)
自动扩缩容 支持(配合 Cluster Autoscaler) 不直接支持
滚动更新 内置支持 需手动管理

2.4 ControlPlane:控制面的抽象

ControlPlane 是一个接口类型,Cluster API 通过 spec.controlPlaneRef 引用具体的控制面实现。最常用的实现是 KubeadmControlPlane,它使用 kubeadm 工具来引导和管理控制面节点。

ControlPlane 对象负责:

  • 控制面节点的创建、升级、健康检查。
  • etcd 集群的初始化与成员管理。
  • 控制面负载均衡器(如 AWS NLB)的配置(通过 Infrastructure Provider 协作)。
多租户注意: 控制面网络通常需要与工作节点网络隔离。在 Cluster API 中,控制面的网络配置(如子网、安全组)由 ControlPlane 对象引用的 InfrastructureCluster 对象定义,务必确保控制面子网不与租户工作子网重叠。

2.5 Infrastructure Provider:基础设施适配层

Infrastructure Provider 是 Cluster API 的插件化扩展机制,负责将 Cluster API 的资源模型翻译为具体云平台或本地环境的 API 调用。每个 Provider 通常包含两类 CRD:

  • InfrastructureCluster: 对应 Cluster 对象,定义 VPC、网络、子网等全局基础设施。
  • InfrastructureMachine: 对应 Machine 对象,定义虚拟机规格、磁盘、网络接口等实例级配置。
Provider InfrastructureCluster 示例 InfrastructureMachine 示例
AWS AWSCluster AWSMachine
Azure AzureCluster AzureMachine
vSphere VSphereCluster VSphereMachine
OpenStack OpenStackCluster OpenStackMachine

2.6 核心对象关系图

下图展示了 Cluster API 核心对象之间的引用与依赖关系,以及它们如何通过 Provider 层与基础设施交互。

Cluster API 核心对象关系图 Cluster API 核心对象关系与 Provider 适配层 Cluster KubeadmControlPlane MachineDeployment Machine (cp-0) Machine (worker-0) AWSCluster AWSMachine (cp-0) AWSMachine (worker-0) controlPlaneRef 通过 clusterName 关联 infrastructureRef infrastructureRef infrastructureRef Cluster ControlPlane MachineDeployment Machine InfraCluster InfraMachine

2.7 多租户网络隔离中的角色映射

在后续章节的多租户实践中,上述核心概念将承担以下网络隔离职责:

  • Cluster: 每个租户对应一个独立的 Cluster 对象,拥有独立的 VPC 或网络命名空间。
  • InfrastructureCluster: 定义租户专属的网络 CIDR、子网、路由表、NAT 网关等。
  • Machine / MachineDeployment: 通过 InfrastructureMachine 的安全组规则,实现租户内节点间的微隔离。
  • ControlPlane: 控制面网络与租户网络严格分离,通常部署在独立的 Management VPC 中。
总结: Cluster API 通过分层抽象(Cluster → Machine → Infrastructure)将集群拓扑与基础设施配置解耦,为多租户网络隔离提供了清晰的扩展点。每个租户的隔离边界可以在 Cluster 和 InfrastructureCluster 层面定义,而节点级策略则在 Machine 和 InfrastructureMachine 层面实现。