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 资源关系
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 原生管理:工作流对比图
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 实现租户级资源限制。