3. Cluster API(CAPI)核心概念:Cluster、Machine、MachineDeployment、Infrastructure Provider、Bootstrap Provider
Cluster API(CAPI)是 Kubernetes SIG(Special Interest Group)主导的官方子项目,旨在通过声明式 API 和 Kubernetes 原生控制器,将集群的生命周期管理(创建、扩缩容、升级、销毁)完全纳入 Kubernetes 的资源模型。理解 CAPI 的核心概念是掌握多集群自动化流水线的基石。
本章将深入剖析 CAPI 的五大核心概念:Cluster、Machine、MachineDeployment、Infrastructure Provider 和 Bootstrap Provider。这些概念共同构成了 CAPI 的资源模型与扩展机制。
3.1 核心资源模型概览
CAPI 的资源模型遵循“分层抽象”原则:顶层定义集群,中间层定义节点组,底层定义单个节点。每个层级的资源都通过 Provider 机制与底层基础设施解耦。
下表总结了五大核心概念的角色与职责:
| 概念 | 资源类型 | 核心职责 | 类比(传统运维) |
|---|---|---|---|
| Cluster | Cluster | 定义集群的全局拓扑、网络、控制平面端点 | 数据中心/集群蓝图 |
| Machine | Machine | 代表一个具体的、已配置好的节点(控制平面或工作节点) | 一台物理/虚拟机 |
| MachineDeployment | MachineDeployment | 管理一组同质化 Machine 的声明式更新与扩缩容 | Auto Scaling Group / Deployment |
| Infrastructure Provider | InfrastructureCluster / InfrastructureMachine | 对接具体云平台(AWS、Azure、vSphere),提供实际计算、网络、存储资源 | 云平台 API 适配器 |
| Bootstrap Provider | BootstrapConfig / BootstrapData | 生成节点初始化脚本(如 cloud-init),将节点加入集群 | 节点初始化引擎 |
3.2 Cluster 资源:集群的蓝图
Cluster 资源是 CAPI 的顶层资源,它定义了集群的“身份”和“骨架”。一个 Cluster 对象并不直接管理节点,而是通过引用 Infrastructure Provider 和 Bootstrap Provider 的配置,来驱动整个集群的创建。
Cluster 资源的关键字段包括:
- spec.infrastructureRef:指向一个 InfrastructureCluster 对象(如 AWSCluster、AzureCluster),该对象定义了 VPC、子网、安全组等网络基础设施。
- spec.controlPlaneRef:指向一个控制平面资源(如 KubeadmControlPlane),该资源定义了控制平面节点的拓扑和版本。
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: my-production-cluster
spec:
clusterNetwork:
pods:
cidrBlocks: ["192.168.0.0/16"]
services:
cidrBlocks: ["10.96.0.0/12"]
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AWSCluster
name: my-production-cluster-aws
controlPlaneRef:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
name: my-production-cluster-cp
3.3 Machine 与 MachineDeployment:节点的原子与集合
Machine 是 CAPI 中最基本的计算单元,它代表一个即将被创建并加入集群的节点。每个 Machine 对象都绑定了一个 BootstrapConfig(用于初始化)和一个 InfrastructureMachine(用于创建虚拟机)。
MachineDeployment 则是对 Machine 的更高层次抽象,它提供了声明式更新、滚动升级、扩缩容等功能,类似于 Kubernetes 中的 Deployment 管理 Pod。MachineDeployment 通过模板(template)定义 Machine 的规格,并确保集群中始终运行指定数量的 Machine。
MachineDeployment 与 Machine 的关系如下:
- 模板化:MachineDeployment 的
spec.template.spec定义了 Machine 的蓝图。 - 滚动更新:修改模板后,MachineDeployment 会按策略(如 MaxSurge、MaxUnavailable)逐步替换旧的 Machine。
- 扩缩容:通过修改
spec.replicas,可以快速调整节点池的规模。
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
name: my-worker-pool
spec:
clusterName: my-production-cluster
replicas: 3
template:
spec:
clusterName: my-production-cluster
version: v1.28.0
bootstrap:
configRef:
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
name: my-worker-bootstrap-template
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AWSMachineTemplate
name: my-worker-machine-template
3.4 Provider 机制:基础设施与引导的解耦
CAPI 的强大之处在于其 Provider 架构。Provider 是 CAPI 与外部系统(云平台、操作系统、配置管理工具)交互的插件。CAPI 定义了两种核心 Provider:
- Infrastructure Provider:负责创建和管理底层基础设施资源。例如,AWS 的 Infrastructure Provider 会创建 EC2 实例、VPC、子网、安全组和负载均衡器。每个 Infrastructure Provider 都会定义自己的 CRD,如
AWSCluster、AWSMachine。 - Bootstrap Provider:负责生成节点初始化所需的配置和数据。最常用的是
Kubeadm Bootstrap Provider,它会生成 kubeadm join 命令所需的 、证书和配置文件,并将其封装为 cloud-init 脚本。Bootstrap Provider 的输出(BootstrapData)会被 Infrastructure Provider 用来初始化虚拟机。
infrastructureRef 和 controlPlaneRef 将工作委托给对应的 Provider 控制器。这种解耦使得 CAPI 可以支持任意基础设施,只要有人实现了对应的 Provider。
3.5 核心概念交互流程
下图展示了 CAPI 创建集群时,核心概念之间的交互流程:
3.6 概念对比与总结
为了更清晰地理解这些概念之间的差异,下表从多个维度进行了对比:
| 维度 | Cluster | Machine | MachineDeployment | Infrastructure Provider | Bootstrap Provider |
|---|---|---|---|---|---|
| 抽象层级 | 集群级 | 节点级 | 节点组级 | 基础设施级 | 配置级 |
| 生命周期管理 | 创建/删除集群 | 创建/删除单个节点 | 滚动更新/扩缩容 | 创建/删除云资源 | 生成初始化数据 |
| 是否直接管理节点 | 否 | 是 | 是(通过模板) | 否 | 否 |
| 扩展性 | 通过 Provider 扩展 | 通过 Provider 扩展 | 通过 Provider 扩展 | 实现 CRD 和控制器 | 实现 CRD 和控制器 |
| 典型 CRD 示例 | Cluster | Machine | MachineDeployment | AWSCluster, AzureCluster | KubeadmConfig, KubeadmConfigTemplate |