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 机制与底层基础设施解耦。

核心设计思想: CAPI 将“集群”视为一等公民,通过 Kubernetes CRD(Custom Resource Definition)和控制器模式,实现了集群创建、配置和运维的“基础设施即代码(IaC)”与“GitOps”闭环。

下表总结了五大核心概念的角色与职责:

概念 资源类型 核心职责 类比(传统运维)
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 提供了故障自愈、版本管理和灰度发布能力。

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 用来初始化虚拟机。
关键理解: Cluster 资源本身不直接调用云 API。它通过 infrastructureRef 和 controlPlaneRef 将工作委托给对应的 Provider 控制器。这种解耦使得 CAPI 可以支持任意基础设施,只要有人实现了对应的 Provider。

3.5 核心概念交互流程

下图展示了 CAPI 创建集群时,核心概念之间的交互流程:

CAPI 核心概念交互流程(集群创建) 用户 / GitOps Cluster infrastructureRef controlPlaneRef MachineDeployment InfrastructureCluster KubeadmControlPlane MachineDeployment 创建 Machine 创建 Machine Machine (Control Plane) Machine (Worker) bootstrap.configRef infrastructureRef BootstrapConfig InfrastructureMachine 生成 BootstrapData (cloud-init) 创建 云资源 (EC2/VM) 注入初始化脚本 说明:Cluster 通过引用驱动控制平面和基础设施创建;Machine 通过 BootstrapConfig 和 InfrastructureMachine 完成节点初始化。

3.6 概念对比与总结

为了更清晰地理解这些概念之间的差异,下表从多个维度进行了对比:

维度 Cluster Machine MachineDeployment Infrastructure Provider Bootstrap Provider
抽象层级 集群级 节点级 节点组级 基础设施级 配置级
生命周期管理 创建/删除集群 创建/删除单个节点 滚动更新/扩缩容 创建/删除云资源 生成初始化数据
是否直接管理节点 否 是 是(通过模板) 否 否
扩展性 通过 Provider 扩展 通过 Provider 扩展 通过 Provider 扩展 实现 CRD 和控制器 实现 CRD 和控制器
典型 CRD 示例 Cluster Machine MachineDeployment AWSCluster, AzureCluster KubeadmConfig, KubeadmConfigTemplate