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)来抽象集群的各个组件。下图展示了核心资源之间的拓扑关系与数据流向:
2.2 核心概念详解
2.2.1 Cluster(集群)
Cluster 是 CAPI 中的顶层资源,代表一个完整的 Kubernetes 集群。它聚合了集群的元数据、控制面配置以及基础设施的引用。一个 Cluster 对象通常包含以下关键字段:
- spec.controlPlaneRef:引用控制面资源(如 KubeadmControlPlane),定义了控制面节点的规格与版本。
- spec.infrastructureRef:引用基础设施集群资源(如 AWSCluster),定义了集群运行在哪个 VPC、区域等。
- status.phase:反映集群当前状态,如
Provisioning、Running、Failed。
metadata.annotations 可用于注入全局性能标签(如节点池类型、网络加速标志),这些标签会被下游 Machine 继承,是实现多租户差异化配置的入口。
2.2.2 Machine(机器)
Machine 是 CAPI 中最核心的抽象,它描述了一台工作节点或控制面节点的期望状态。Machine 对象将 Kubernetes 节点与云提供商上的虚拟机(VM)或裸金属服务器绑定。关键字段包括:
- spec.bootstrap.dataSecretName:引用包含节点加入集群所需引导数据的 Secret。
- spec.infrastructureRef:引用具体的基础设施机器资源(如 AWSMachine),定义了 VM 的实例类型、磁盘大小、安全组等。
- status.nodeRef:指向集群中实际的 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 共享相同的模板配置,保证了节点组的同质性。
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 的典型交互流程,帮助理解各组件如何协作:
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 的创建请求中。
spec.template.spec.infrastructureRef 中的性能相关字段,实现“声明式性能调优”。