2. CAPI 核心概念:Cluster、Machine、MachineDeployment、MachineSet、Infrastructure Provider

Cluster API (CAPI) 的核心在于将 Kubernetes 集群的生命周期管理从“脚本驱动”转变为“声明式资源驱动”。理解其核心资源模型是掌握多租户集群性能调优自动化的基础。本章将深入剖析 CAPI 的五大核心概念:Cluster、Machine、MachineDeployment、MachineSet 以及 Infrastructure Provider,并阐明它们之间的层级关系与协作机制。

2.1 核心资源模型总览

CAPI 遵循 Kubernetes 的 Operator 模式,通过自定义资源定义(CRD)来抽象集群的各个组件。下图展示了核心资源之间的拓扑关系与数据流向:

CAPI 核心资源模型关系图 Cluster (集群) MachineDeployment (机器部署) Machine (机器) MachineSet (机器集) Infrastructure Provider (基础设施提供者) 说明 实线表示“管理/控制”关系,虚线表示“引用/依赖”关系。Machine 是实际节点的抽象,由 MachineSet 管理。

2.2 核心概念详解

2.2.1 Cluster(集群)

Cluster 是 CAPI 中的顶层资源,代表一个完整的 Kubernetes 集群。它聚合了集群的元数据、控制面配置以及基础设施的引用。一个 Cluster 对象通常包含以下关键字段:

  • spec.controlPlaneRef:引用控制面资源(如 KubeadmControlPlane),定义了控制面节点的规格与版本。
  • spec.infrastructureRef:引用基础设施集群资源(如 AWSCluster),定义了集群运行在哪个 VPC、区域等。
  • status.phase:反映集群当前状态,如 Provisioning、Running、Failed。
性能调优视角: Cluster 对象的 metadata.annotations 可用于注入全局性能标签(如节点池类型、网络加速标志),这些标签会被下游 Machine 继承,是实现多租户差异化配置的入口。

2.2.2 Machine(机器)

Machine 是 CAPI 中最核心的抽象,它描述了一台工作节点或控制面节点的期望状态。Machine 对象将 Kubernetes 节点与云提供商上的虚拟机(VM)或裸金属服务器绑定。关键字段包括:

  • spec.bootstrap.dataSecretName:引用包含节点加入集群所需引导数据的 Secret。
  • spec.infrastructureRef:引用具体的基础设施机器资源(如 AWSMachine),定义了 VM 的实例类型、磁盘大小、安全组等。
  • status.nodeRef:指向集群中实际的 Node 对象。
关键区别: Machine 是“声明式”的节点模板,而 Node 是集群中“运行时”的节点。CAPI 控制器负责将 Machine 的期望状态同步为实际的 Node。

2.2.3 MachineDeployment(机器部署)

MachineDeployment 提供了声明式更新 Machine 的能力,类似于 Kubernetes 中的 Deployment 管理 Pod。它定义了 Machine 的模板、副本数以及滚动更新策略。在多租户场景下,每个租户的节点组通常对应一个 MachineDeployment。

字段 说明 性能调优影响
spec.replicas 期望的机器副本数 直接决定租户可用的计算资源总量
spec.template.spec.infrastructureRef 机器模板中引用的基础设施规格 实例类型、磁盘 IOPS 等影响单机性能
spec.strategy.rollingUpdate.maxSurge 滚动更新时允许超出副本数的最大机器数 影响更新期间的资源争抢与集群稳定性

2.2.4 MachineSet(机器集)

MachineSet 是 MachineDeployment 的下游资源,确保指定数量的 Machine 副本始终运行。它通常不直接由用户创建,而是由 MachineDeployment 自动管理。MachineSet 负责处理 Machine 的扩缩容和故障恢复。

  • 标签选择器: MachineSet 通过 spec.selector.matchLabels 来管理属于它的 Machine。
  • 模板一致性: 同一 MachineSet 下的所有 Machine 共享相同的模板配置,保证了节点组的同质性。
注意: 直接修改 MachineSet 的模板不会影响已存在的 Machine,只会影响新创建的 Machine。如需更新,应通过 MachineDeployment 的滚动更新机制进行。

2.2.5 Infrastructure Provider(基础设施提供者)

Infrastructure Provider 是 CAPI 的可插拔后端,负责将 CAPI 的资源模型翻译为具体云平台或本地环境的 API 调用。常见的 Provider 包括 AWS、Azure、GCP、vSphere 以及裸金属方案。每个 Provider 都实现了一组 CRD,例如:

Provider 集群资源 CRD 机器资源 CRD
AWS AWSCluster AWSMachine
Azure AzureCluster AzureMachine
vSphere VSphereCluster VSphereMachine

Infrastructure Provider 通过实现 CAPI 定义的接口(如 ExternalCluster、ExternalMachine),使得 CAPI 控制器可以统一地创建、删除和查询基础设施资源,而无需关心底层实现细节。

2.3 资源生命周期与交互流程

下图展示了创建一个工作节点 Machine 的典型交互流程,帮助理解各组件如何协作:

Machine 创建交互流程 1. 创建 MachineDeployment 2. 生成 MachineSet 3. 创建 Machine 4. 调用 Provider 创建 VM 5. VM 就绪,节点加入 6. Machine 状态变为 Running 整个流程由 CAPI 控制器协调,用户只需声明 MachineDeployment 的期望状态,无需手动操作云 API。

2.4 多租户场景下的核心概念映射

在多租户集群性能调优自动化中,这些核心概念被赋予了新的职责:

  • Cluster:作为租户隔离的边界,每个租户拥有独立的 Cluster 对象,其 infrastructureRef 指向不同的网络和 IAM 配置。
  • MachineDeployment:对应租户的节点池,通过调整 spec.template.spec.infrastructureRef 中的实例类型,实现不同租户的性能差异化(如 GPU 实例 vs 通用计算实例)。
  • MachineSet:确保租户节点池的副本数稳定,配合 Cluster Autoscaler 实现弹性伸缩。
  • Infrastructure Provider:通过 Provider 的特定注解(如 aws.amazon.com/instanceType),将性能调优参数(如 CPU 绑定、大页内存)直接注入到 Machine 的创建请求中。
自动化切入点: 性能调优自动化工具可以通过监听 MachineDeployment 的变更事件,动态调整其 spec.template.spec.infrastructureRef 中的性能相关字段,实现“声明式性能调优”。