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

Cluster API (CAPI) 的核心在于将 Kubernetes 集群的生命周期管理声明式化。理解其五大核心概念是掌握多租户集群快速创建与发布的基础。这些概念共同构成了一个从“集群定义”到“节点管理”的完整抽象层。

2.1 核心概念总览

下表概括了五个核心概念在 CAPI 体系中的角色与职责:

概念 角色 管理对象 关键特性
Cluster 集群蓝图 整个集群的规格、网络、控制平面端点 顶层资源,关联 Infrastructure Cluster
Machine 单节点实例 一台虚拟机或物理机的生命周期 直接映射到基础设施上的计算实例
MachineDeployment 节点组控制器 一组同配置的 Machine(工作节点) 提供滚动更新、扩缩容、自愈能力
MachineSet 副本集执行器 确保指定数量的 Machine 副本运行 由 MachineDeployment 管理,通常不直接操作
Infrastructure Provider 基础设施适配器 将 CAPI 资源翻译为云平台 API 调用 实现多云/混合云的关键插件

2.2 核心概念关系与工作流

下图展示了 CAPI 资源对象之间的层级关系与创建集群时的典型工作流:

CAPI 核心概念关系与工作流 用户 / 租户 Cluster 集群规格、网络、控制平面端点 Machine (控制平面) 运行 kube-apiserver, etcd MachineDeployment 声明工作节点组规格与策略 MachineSet 维护副本数,自愈 Machine (工作节点) 运行用户工作负载 Infrastructure Provider 将 Machine 资源翻译为云平台 API 调用(如 AWS EC2, vSphere VM)
关键理解:Cluster 是“大脑”,定义集群规格;MachineDeployment 是“调度中心”,管理工作节点组;MachineSet 是“执行单元”,确保副本数;Machine 是“具体工人”,对应一台虚拟机;Infrastructure Provider 是“翻译官”,让 CAPI 能指挥不同云平台。

2.3 深入理解各核心概念

2.3.1 Cluster

Cluster 资源是 CAPI 的顶层资源,它定义了集群的元数据、网络配置、控制平面端点信息,并关联到具体的 Infrastructure Cluster 资源(如 AWSCluster、VSphereCluster)。它不直接管理节点,而是作为集群的“身份证明”和“配置中心”。

2.3.2 Machine

Machine 资源代表一个具体的计算实例(虚拟机或裸金属服务器)。它包含了实例的规格(如 CPU、内存、磁盘)、镜像信息、网络配置等。Machine 的生命周期由 CAPI 控制器管理,包括创建、监控、修复和删除。

2.3.3 MachineDeployment

MachineDeployment 是管理一组同配置 Machine 的声明式控制器。它提供了类似 Kubernetes Deployment 的功能:

  • 滚动更新:逐步替换旧版本的 Machine,确保服务不中断。
  • 扩缩容:通过调整副本数,动态增加或减少工作节点。
  • 自愈:当 Machine 故障时,自动创建新的 Machine 替换。

2.3.4 MachineSet

MachineSet 是 MachineDeployment 的底层执行者,它确保指定数量的 Machine 副本始终运行。通常用户不直接操作 MachineSet,而是通过 MachineDeployment 来间接管理。MachineSet 负责处理副本数的精确控制。

2.3.5 Infrastructure Provider

Infrastructure Provider 是 CAPI 实现多云和混合云的关键。它是一个插件,负责将 CAPI 的通用资源(如 Machine)转换为特定云平台的 API 调用。例如:

  • AWS Provider:将 Machine 转换为 EC2 实例。
  • vSphere Provider:将 Machine 转换为 vSphere 虚拟机。
  • OpenStack Provider:将 Machine 转换为 OpenStack 实例。
多租户场景应用:在基于 CAPI 的多租户平台中,每个租户可以拥有独立的 Cluster 资源。通过 MachineDeployment,平台可以为不同租户的工作节点组配置不同的实例规格、扩缩容策略和更新策略,实现资源隔离与灵活管理。

2.4 核心概念对比:MachineDeployment vs. MachineSet

对比维度 MachineDeployment MachineSet
用户操作对象 是,用户直接管理 否,由 MachineDeployment 管理
更新策略 支持滚动更新、蓝绿部署 仅支持替换更新
扩缩容 支持声明式扩缩容 支持,但通常不直接使用
自愈 支持,自动替换故障 Machine 支持,确保副本数
版本管理 支持版本回滚 不支持版本管理
实践注意:在创建 MachineDeployment 时,务必指定正确的 cluster.x-k8s.io/cluster-name 标签,确保 MachineDeployment 与目标 Cluster 正确关联。错误的标签会导致 Machine 无法加入集群。

2.5 核心概念在 YAML 中的体现

以下是一个简化的 MachineDeployment YAML 示例,展示了如何引用 Cluster 和定义工作节点规格:

apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
  name: my-workload-md
  namespace: default
  labels:
    cluster.x-k8s.io/cluster-name: my-cluster
spec:
  replicas: 3
  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-md-0
      infrastructureRef:
        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
        kind: AWSMachineTemplate
        name: my-cluster-md-0

在这个 YAML 中:

  • clusterName 字段将 MachineDeployment 关联到名为 my-cluster 的 Cluster 资源。
  • infrastructureRef 引用了 AWSMachineTemplate,这是 Infrastructure Provider 提供的资源,定义了 EC2 实例的具体规格。
  • bootstrap 引用了 KubeadmConfigTemplate,定义了节点加入集群的引导配置。
学习路径:掌握这五个核心概念后,你将能够理解 CAPI 如何将“创建集群”这一复杂操作分解为可管理、可复用的资源对象。下一阶段将学习如何通过 ClusterClass 实现集群模板化,进一步提升多租户场景下的创建效率。