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

Cluster API (CAPI) 的核心在于将 Kubernetes 集群的声明式管理从“应用”层面下沉到“基础设施”层面。要理解 CAPI 的工作机制,必须首先掌握其五大核心资源对象:Cluster、Machine、MachineDeployment、MachineSet 以及 Infrastructure Provider。它们共同构成了集群生命周期管理的抽象模型。

核心思想:CAPI 使用 Kubernetes 原生资源(CRD)来定义集群的“期望状态”。控制平面会持续协调,确保实际基础设施状态与这些资源定义一致。这与 Kubernetes 管理 Pod 的方式如出一辙。

2.1 资源关系总览

下图展示了 CAPI 核心资源之间的层级关系与数据流向。Cluster 是顶层资源,Machine 是底层计算单元,MachineDeployment 和 MachineSet 负责管理 Machine 的扩缩容与滚动更新,而 Infrastructure Provider 则负责与具体云平台或虚拟化平台交互。

CAPI 核心资源关系图 CAPI 核心资源关系图 Cluster Infrastructure Provider Bootstrap Provider MachineDeployment MachineSet Machine (Node 1) Machine (Node 2) Machine (Node 3) 说明:Cluster 引用 Provider 定义基础设施模板;MachineDeployment 管理 MachineSet;MachineSet 控制 Machine 副本数。

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:定义单个机器的基础设施规格,如实例类型、镜像、磁盘、网络接口等。
常见 Provider 示例:
  • AWSCluster / AWSMachine:用于 AWS 云平台,管理 EC2 实例、VPC、安全组等。
  • AzureCluster / AzureMachine:用于 Azure 云平台,管理虚拟机、虚拟网络、NSG 等。
  • VSphereCluster / VSphereMachine:用于 vSphere 虚拟化平台,管理虚拟机、资源池、存储策略等。
  • DockerCluster / DockerMachine:用于本地开发测试,基于 Docker 容器模拟节点。

2.5 工作流程示例

以下是一个典型的 CAPI 工作流程,展示了从创建 Cluster 到 Machine 就绪的完整链路:

  1. 用户提交 Cluster 清单:定义 Cluster 对象,引用 AWSCluster 和 KubeadmControlPlane。
  2. CAPI 控制器创建基础设施:调用 AWS Provider 创建 VPC、子网、安全组等资源。
  3. 控制平面初始化:KubeadmControlPlane 控制器在 AWS 上创建控制平面节点,并初始化 Kubernetes 控制平面。
  4. MachineDeployment 创建 MachineSet:用户提交 MachineDeployment 清单,定义工作节点模板。
  5. MachineSet 创建 Machine:MachineSet 控制器根据副本数创建 Machine 对象。
  6. Machine 控制器创建基础设施实例:调用 AWS Provider 创建 EC2 实例,并执行引导脚本加入集群。
  7. 节点就绪:EC2 实例成功加入集群后,Machine 状态变为 Running,对应的 Kubernetes Node 对象变为 Ready。
注意:在漂移复测场景中,MachineDeployment 和 MachineSet 的协调机制至关重要。当 Machine 因基础设施故障而漂移(如云实例被意外终止)时,MachineSet 会检测到副本数不足,并自动创建新的 Machine 进行补偿,从而确保集群的期望状态得以维持。

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 实现了集群基础设施的声明式管理,为后续的漂移检测与自动复测奠定了坚实的基础。