2. 核心概念:Cluster、Machine、MachineDeployment、MachineSet、Infrastructure Provider
Cluster API (CAPI) 的核心在于将 Kubernetes 集群的声明式管理从“应用”层面下沉到“基础设施”层面。要理解 CAPI 的工作机制,必须首先掌握其五大核心资源对象:Cluster、Machine、MachineDeployment、MachineSet 以及 Infrastructure Provider。它们共同构成了集群生命周期管理的抽象模型。
2.1 资源关系总览
下图展示了 CAPI 核心资源之间的层级关系与数据流向。Cluster 是顶层资源,Machine 是底层计算单元,MachineDeployment 和 MachineSet 负责管理 Machine 的扩缩容与滚动更新,而 Infrastructure Provider 则负责与具体云平台或虚拟化平台交互。
2.2 核心资源详解
2.2.1 Cluster
Cluster 是 CAPI 中的顶层资源,代表一个完整的 Kubernetes 集群。它定义了集群的全局配置,包括控制平面和节点池的引用。Cluster 对象本身不直接管理计算资源,而是通过引用 InfrastructureCluster 和 ControlPlane 对象来委派具体实现。
- 关键字段:
spec.infrastructureRef指向基础设施集群模板;spec.controlPlaneRef指向控制平面对象。 - 生命周期:创建 Cluster 对象会触发控制平面和节点池的创建;删除 Cluster 对象会级联删除所有关联资源。
2.2.2 Machine
Machine 是 CAPI 中最基本的计算单元抽象,对应一个物理或虚拟节点。它描述了如何创建和配置一台机器,包括其基础设施规格(如实例类型、磁盘大小)和引导配置(如 kubeadm 初始化参数)。
- 状态管理:Machine 控制器会监控底层基础设施实例的状态,并在实例故障时自动进行修复或替换。
- 与 Node 的关系:Machine 成功加入集群后,其状态会与对应的 Kubernetes Node 对象同步。
2.2.3 MachineDeployment
MachineDeployment 提供了声明式更新 Machine 的能力,类似于 Kubernetes 中的 Deployment 管理 Pod。它定义了 Machine 的副本数、更新策略(滚动更新或重建)以及 Machine 模板。
- 滚动更新:支持
RollingUpdate和OnDelete策略,确保在更新 Machine 模板时服务不中断。 - 回滚:支持回滚到之前的 MachineSet 版本,便于故障恢复。
2.2.4 MachineSet
MachineSet 确保指定数量的 Machine 副本始终运行。它是 MachineDeployment 的底层实现机制,通常不直接由用户创建,而是由 MachineDeployment 自动管理。
- 标签选择器:通过
spec.selector匹配其管理的 Machine。 - 扩缩容:修改
spec.replicas即可触发 Machine 的创建或删除。
2.3 核心资源对比表
| 资源 | 职责 | 管理对象 | 更新策略 | 典型使用场景 |
|---|---|---|---|---|
| Cluster | 集群全局定义 | InfrastructureCluster、ControlPlane | 手动更新 | 创建/删除整个集群 |
| Machine | 单个计算节点 | 基础设施实例 | 手动或由上层管理 | 节点故障修复、替换 |
| MachineDeployment | 声明式 Machine 管理 | MachineSet | 滚动更新、回滚 | 节点池版本升级、扩缩容 |
| MachineSet | 副本数保证 | Machine | 扩缩容 | 确保节点数量符合预期 |
| Infrastructure Provider | 基础设施抽象 | 云资源(VM、网络、存储) | 由 Provider 实现 | 对接 AWS、Azure、vSphere 等 |
2.4 Infrastructure Provider 详解
Infrastructure Provider 是 CAPI 的插件化组件,负责将 CAPI 的资源请求转换为具体云平台或虚拟化平台的 API 调用。它实现了 CAPI 定义的 InfrastructureCluster 和 InfrastructureMachine 接口。
- InfrastructureCluster:定义集群级别的基础设施资源,如 VPC、子网、安全组、负载均衡器等。
- InfrastructureMachine:定义单个机器的基础设施规格,如实例类型、镜像、磁盘、网络接口等。
- AWSCluster / AWSMachine:用于 AWS 云平台,管理 EC2 实例、VPC、安全组等。
- AzureCluster / AzureMachine:用于 Azure 云平台,管理虚拟机、虚拟网络、NSG 等。
- VSphereCluster / VSphereMachine:用于 vSphere 虚拟化平台,管理虚拟机、资源池、存储策略等。
- DockerCluster / DockerMachine:用于本地开发测试,基于 Docker 容器模拟节点。
2.5 工作流程示例
以下是一个典型的 CAPI 工作流程,展示了从创建 Cluster 到 Machine 就绪的完整链路:
- 用户提交 Cluster 清单:定义 Cluster 对象,引用 AWSCluster 和 KubeadmControlPlane。
- CAPI 控制器创建基础设施:调用 AWS Provider 创建 VPC、子网、安全组等资源。
- 控制平面初始化:KubeadmControlPlane 控制器在 AWS 上创建控制平面节点,并初始化 Kubernetes 控制平面。
- MachineDeployment 创建 MachineSet:用户提交 MachineDeployment 清单,定义工作节点模板。
- MachineSet 创建 Machine:MachineSet 控制器根据副本数创建 Machine 对象。
- Machine 控制器创建基础设施实例:调用 AWS Provider 创建 EC2 实例,并执行引导脚本加入集群。
- 节点就绪:EC2 实例成功加入集群后,Machine 状态变为
Running,对应的 Kubernetes Node 对象变为Ready。
2.6 关键代码示例
以下是一个简化的 MachineDeployment 清单,展示了如何定义工作节点池:
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
name: my-cluster-worker-pool
namespace: default
spec:
clusterName: my-cluster
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
cluster.x-k8s.io/cluster-name: my-cluster
template:
spec:
clusterName: my-cluster
version: v1.28.0
bootstrap:
configRef:
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
name: my-cluster-worker-config
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AWSMachineTemplate
name: my-cluster-worker-machine-template
通过上述资源模型,CAPI 实现了集群基础设施的声明式管理,为后续的漂移检测与自动复测奠定了坚实的基础。