1. CAPI概述

1.1 起源:为什么需要 Cluster API?

Kubernetes 集群的“生命周期管理”长期依赖云厂商控制台、脚本或特定工具(如 kubeadm、kops)。当集群数量从个位数增长到成百上千时,手动操作和碎片化工具链导致运维效率急剧下降。Cluster API(CAPI)应运而生——它是 Kubernetes 官方子项目,旨在将集群的创建、升级、扩缩容等操作声明式地纳入 Kubernetes 资源模型,实现“用 Kubernetes 管理 Kubernetes”。

关键里程碑:CAPI 于 2018 年由 Google、VMware、Weaveworks 等社区成员发起,2021 年达到 GA(v1.0),现已成为多云集群管理的行业标准。

1.2 核心概念:三大资源模型

CAPI 通过以下三种核心 CRD(Custom Resource Definition)抽象集群的组成单元:

资源名称 作用 类比对象 关键字段
Cluster 定义集群的完整拓扑,包含控制平面、网络、基础设施等 Kubernetes 中的 Namespace 级“集群蓝图” infrastructureRef, controlPlaneRef
Machine 代表一个具体的节点(虚拟机或裸金属),是集群的最小计算单元 Pod 中的 Container bootstrap.data, infrastructureRef
MachineDeployment 管理一组同配置的 Machine,支持滚动更新、扩缩容 Deployment 管理 Pod replicas, template, strategy
理解要点:Cluster 是“集群的声明”,Machine 是“节点的实例”,MachineDeployment 是“节点的弹性策略”。三者组合,即可实现声明式的集群生命周期管理。

1.3 核心架构图:CAPI 资源关系

CAPI 核心资源关系图 CAPI 核心资源关系图 Cluster ControlPlane (KCP) InfrastructureCluster controlPlaneRef infrastructureRef MachineDeployment 管理 Machine (worker-0) Machine (worker-1) Machine (worker-2) 说明:Cluster 通过引用关联控制平面和基础设施;MachineDeployment 管理一组同配置的 Machine 节点。

1.4 与 Kubernetes 原生集群管理的区别

传统方式(如 kubeadm + 云厂商控制台)与 CAPI 管理在以下维度存在本质差异:

对比维度 原生集群管理(传统方式) CAPI 管理
声明式 vs 命令式 手动执行 kubeadm init/join,或调用云 API 创建节点 通过 YAML 声明 Cluster/MachineDeployment,控制器自动调和
生命周期覆盖 创建、销毁;升级和扩缩容需额外脚本 创建、升级、扩缩容、健康检查、故障自愈全生命周期
多云一致性 每个云厂商有独立工具链,迁移成本高 统一资源模型,Provider 模式适配不同基础设施
版本管理 手动跟踪 Kubernetes 版本,升级风险高 MachineDeployment 支持滚动更新,版本回滚声明式
多租户支持 需自行实现租户隔离和配额控制 原生支持 Namespace 隔离,结合配额 CRD 实现租户资源限制
常见误区:CAPI 不是替代 kubeadm,而是基于 kubeadm 构建更高层次的声明式抽象。CAPI 的 Bootstrap Provider 默认使用 kubeadm 完成节点初始化。

1.5 CAPI 管理 vs 原生管理:工作流对比图

传统方式 vs CAPI 工作流对比 传统方式 vs CAPI 工作流对比 传统方式(命令式) 1. 手动创建云资源(VPC/VM/网络) 2. 登录 VM,执行 kubeadm init 3. 手动生成 join ,逐台加入节点 4. 升级时手动 drain/upgrade/uncordon 5. 扩缩容需手动创建/销毁 VM CAPI 方式(声明式) 1. 编写 Cluster YAML(声明集群拓扑) 2. 编写 MachineDeployment YAML 3. kubectl apply -f cluster.yaml 4. 控制器自动创建 VM、初始化、加入集群 5. 升级/扩缩容:修改 YAML 并 apply

1.6 典型 CAPI 集群 YAML 示例

以下是一个最小化的 CAPI 集群声明,展示 Cluster 与 MachineDeployment 的配合:

apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
  name: my-cluster
  namespace: default
spec:
  infrastructureRef:
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: AWSCluster
    name: my-cluster-aws
  controlPlaneRef:
    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    kind: KubeadmControlPlane
    name: my-cluster-cp
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
  name: my-cluster-workers
  namespace: default
spec:
  clusterName: my-cluster
  replicas: 3
  template:
    spec:
      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
关键点:Cluster 通过 infrastructureRef 和 controlPlaneRef 引用具体的基础设施和控制平面模板;MachineDeployment 通过 clusterName 关联到 Cluster,实现节点组的弹性管理。

1.7 本章小结

  • CAPI 起源:解决多云环境下集群生命周期管理的碎片化问题,将集群管理声明式化。
  • 三大核心资源:Cluster(集群蓝图)、Machine(节点实例)、MachineDeployment(节点弹性策略)。
  • 与传统方式区别:命令式→声明式、手动→自动调和、单云→多云统一、版本管理困难→滚动更新声明式。
  • 后续章节预告:在理解 CAPI 基础后,下一章将深入多租户场景下的资源配额设计,以及如何通过 CAPI 的配额 CRD 实现租户级资源限制。