2. Cluster API 核心概念:Cluster、Machine、MachineDeployment、MachineSet、ControlPlane、Bootstrap、Infrastructure Provider
Cluster API 将 Kubernetes 集群的生命周期管理抽象为一组声明式 API 资源。理解这些核心对象是构建多租户控制面方案的基础。每个资源都对应一个 Kubernetes 自定义资源(CRD),由 Cluster API 控制器协调其实际状态与期望状态。
2.1 核心资源概览
下表列出了 Cluster API 的七个核心资源及其在多租户控制面场景中的角色定位:
| 资源名称 | 缩写 | API 版本(典型) | 核心职责 | 多租户关联 |
|---|---|---|---|---|
| Cluster | cl | cluster.x-k8s.io/v1beta1 | 集群的顶层对象,聚合所有组件引用 | 每个租户集群对应一个 Cluster 对象 |
| Machine | ma | cluster.x-k8s.io/v1beta1 | 代表一台物理或虚拟节点 | 控制面节点与工作节点均由此管理 |
| MachineDeployment | md | cluster.x-k8s.io/v1beta1 | 声明式管理 MachineSet 的滚动更新与扩缩容 | 用于工作节点池的弹性管理 |
| MachineSet | ms | cluster.x-k8s.io/v1beta1 | 保证一组 Machine 副本数一致 | MachineDeployment 的下层编排单元 |
| ControlPlane | cp | controlplane.cluster.x-k8s.io/v1beta1 | 管理控制面组件的生命周期(如 KubeadmControlPlane) | 多租户隔离的核心——控制面节点池 |
| Bootstrap Provider | — | (接口) | 生成节点加入集群所需的引导配置 | 决定租户集群的认证与加密材料 |
| Infrastructure Provider | — | (接口) | 对接底层 IaaS 创建/删除计算资源 | 决定租户集群的部署位置与资源隔离 |
2.2 资源关系与数据流
下图展示了 Cluster API 核心资源之间的依赖关系与数据流向。Cluster 作为根对象,通过引用将 ControlPlane 和 Infrastructure 组件串联起来,Machine 则作为实际节点的抽象载体。
2.3 核心资源详解
2.3.1 Cluster
Cluster 是集群的根对象,它不直接管理节点,而是通过引用将 ControlPlane 和 Infrastructure 组件聚合在一起。一个典型的 Cluster 定义包含以下关键字段:
- spec.infrastructureRef:指向 Infrastructure Cluster 对象(如 AWSCluster、DockerCluster)。
- spec.controlPlaneRef:指向 ControlPlane 对象(如 KubeadmControlPlane)。
- spec.topology:当使用 ClusterClass 时,定义集群的拓扑模板。
多租户视角:每个租户集群对应一个独立的 Cluster 对象。通过不同的 InfrastructureRef,可以将租户集群部署到不同的云账号、VPC 或命名空间,实现基础设施层面的隔离。
2.3.2 Machine
Machine 是节点的抽象,代表一台将要加入集群的计算实例。它包含两个关键引用:
- spec.bootstrap.dataSecretName:指向 Bootstrap 生成的 Secret,包含节点加入集群所需的证书和令牌。
- spec.infrastructureRef:指向 Infrastructure Machine 对象(如 AWSMachine、DockerMachine),描述具体的 IaaS 资源规格。
apiVersion: cluster.x-k8s.io/v1beta1
kind: Machine
metadata:
name: tenant1-control-plane-0
namespace: cluster-tenant1
spec:
clusterName: tenant1-cluster
version: v1.28.0
bootstrap:
dataSecretName: tenant1-control-plane-0-bootstrap
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AWSMachine
name: tenant1-control-plane-0
2.3.3 MachineDeployment 与 MachineSet
MachineDeployment 提供声明式更新能力,管理 MachineSet 的创建、滚动更新和回滚。MachineSet 则保证一组 Machine 的副本数。两者的关系类似于 Kubernetes 中的 Deployment 与 ReplicaSet。
| 特性 | MachineDeployment | MachineSet |
|---|---|---|
| 滚动更新策略 | 支持(maxSurge / maxUnavailable) | 不支持 |
| 版本回滚 | 支持(通过 revisionHistoryLimit) | 不支持 |
| 直接管理 Machine | 间接(通过 MachineSet) | 直接 |
| 多租户场景用途 | 管理租户工作节点池的弹性扩缩 | 作为 MachineDeployment 的下层编排单元 |
2.3.4 ControlPlane
ControlPlane 资源负责管理控制面节点的生命周期。最常用的实现是 KubeadmControlPlane,它基于 kubeadm 工具初始化高可用控制面。关键配置包括:
- spec.replicas:控制面节点数量(通常为 3 或 5)。
- spec.version:Kubernetes 版本。
- spec.machineTemplate:定义控制面 Machine 的模板,包括基础设施引用和引导配置。
多租户最佳实践:为每个租户集群使用独立的 KubeadmControlPlane,并设置 spec.replicas: 3 以保证控制面高可用。通过 spec.machineTemplate.infrastructureRef 指向不同的基础设施资源,实现租户间控制面节点的物理隔离。
2.4 Provider 接口:Bootstrap 与 Infrastructure
Cluster API 采用 Provider 模式,将引导配置和基础设施管理抽象为接口。这种设计使得 Cluster API 可以跨云平台工作,同时为多租户提供灵活的扩展点。
2.4.1 Bootstrap Provider
Bootstrap Provider 负责生成节点加入集群所需的引导数据。最常用的实现是 Kubeadm Bootstrap Provider,它生成包含 kubeadm join 命令的 Secret。在多租户场景中,每个租户集群的 Bootstrap Secret 独立生成,确保认证材料不共享。
2.4.2 Infrastructure Provider
Infrastructure Provider 对接底层 IaaS 平台,负责创建、删除和监控计算实例。常见的实现包括:
- AWS Infrastructure Provider:管理 EC2 实例、安全组、VPC 等。
- Azure Infrastructure Provider:管理虚拟机、虚拟网络等。
- Docker Infrastructure Provider:用于本地开发和测试。
下图展示了 Bootstrap 与 Infrastructure Provider 如何协同工作,驱动 Machine 的创建流程:
2.5 多租户场景下的资源映射
在控制面节点多租户环境中,上述核心资源与租户的映射关系如下:
| 租户维度 | 对应 Cluster API 资源 | 隔离粒度 |
|---|---|---|
| 租户集群标识 | Cluster(每个租户一个) | 命名空间级别隔离 |
| 控制面节点 | KubeadmControlPlane + Machine | 独立控制面节点池,不共享 |
| 工作节点 | MachineDeployment → MachineSet → Machine | 按租户划分节点组 |
| 引导凭证 | Bootstrap Secret(每个 Machine 独立) | 租户间证书不互通 |
| 基础设施资源 | Infrastructure Cluster / Machine | 不同云账号或 VPC |
关键约束:在多租户架构中,切勿跨租户共享 ControlPlane 或 Bootstrap Secret。每个租户集群必须拥有独立的 KubeadmControlPlane 对象和引导数据,否则会导致租户间权限泄露或控制面相互影响。
2.6 本章小结
Cluster API 的七个核心资源构成了声明式集群管理的骨架。Cluster 作为顶层聚合对象,Machine 作为节点抽象,MachineDeployment/MachineSet 提供弹性扩缩,ControlPlane 管理控制面生命周期,Bootstrap 和 Infrastructure Provider 则分别负责引导配置和基础设施对接。在多租户控制面场景中,这些资源通过命名空间隔离、独立引用和 Provider 接口扩展,为每个租户提供完全隔离的集群管理能力。