CAPI 基础概念:CAPI(Cluster API)是什么、核心组件介绍
Cluster API(简称 CAPI)是 Kubernetes 社区推出的一个声明式、可扩展的集群生命周期管理项目。它允许运维人员使用 Kubernetes 原生的 API 和工具(如 kubectl、GitOps 工作流)来创建、配置、升级和销毁 Kubernetes 集群。CAPI 的核心思想是将“集群”本身视为一个 Kubernetes 资源对象,从而将基础设施管理纳入 Kubernetes 的声明式治理体系。
2.1 CAPI 是什么
CAPI 不是一个独立的集群安装工具,而是一个构建在 Kubernetes 之上的集群管理框架。它通过一组 CRD 和控制器,将底层基础设施(如 AWS EC2、Azure VM、vSphere 虚拟机)的创建、配置和生命周期管理抽象为 Kubernetes 资源对象。用户只需定义期望的集群状态(如节点数量、Kubernetes 版本、机器规格),CAPI 控制器便会自动协调实际状态与期望状态。
CAPI 的典型工作流如下:
- 定义集群模板:用户创建
Cluster和MachineDeployment资源清单。 - 提交到管理集群:将清单应用到作为“管理集群”的 Kubernetes 集群中。
- 控制器协调:CAPI 控制器读取资源,调用基础设施提供商(如 AWS、Azure)的 API 创建虚拟机。
- 引导 Kubernetes:在新建的虚拟机上安装并配置 Kubernetes 组件,形成“工作集群”。
- 持续管理:用户通过更新资源清单来扩缩容、升级或销毁集群。
2.2 核心组件详解
CAPI 的核心组件围绕三个主要资源对象展开:Cluster、Machine 和 MachineDeployment。它们共同构成了集群管理的声明式模型。
| 组件名称 | 资源类型 | 核心职责 | 类比 Kubernetes 原生对象 |
|---|---|---|---|
| Cluster | CRD | 定义集群的全局配置、网络、基础设施提供商信息 | Namespace(逻辑边界) |
| Machine | CRD | 代表一个具体的、单一的节点(虚拟机或物理机) | Pod(单个实例) |
| MachineDeployment | CRD | 管理一组同质化的 Machine,支持滚动更新、扩缩容 | Deployment(副本管理) |
2.2.1 Cluster
Cluster 资源是 CAPI 中最高级别的抽象,它定义了一个 Kubernetes 集群的完整蓝图。一个 Cluster 对象包含以下关键信息:
- 基础设施提供商引用:指向一个具体的
AWSCluster、AzureCluster等提供商特定资源,用于定义 VPC、子网、安全组等网络基础设施。 - 控制平面引用:指向一个
KubeadmControlPlane或ControlPlane资源,用于定义控制平面节点的配置(如版本、副本数)。 - 集群网络:定义 Pod 网络 CIDR、Service 网络 CIDR 等。
- 拓扑信息:可选字段,用于定义集群的拓扑结构(如跨可用区部署)。
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: my-production-cluster
spec:
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
clusterNetwork:
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
2.2.2 Machine
Machine 资源对应集群中的一个具体节点。它封装了该节点的所有配置,包括:
- 基础设施模板引用:指向一个
AWSMachineTemplate或AzureMachineTemplate,定义虚拟机规格(如实例类型、磁盘大小、镜像)。 - 引导数据:用于初始化节点的脚本或配置(如 cloud-init)。
- 版本信息:该节点上运行的 Kubernetes 版本。
- 状态信息:当前节点的生命周期状态(如 Running、Provisioning、Failed)。
Machine 对象,而是通过 MachineDeployment 来管理。直接创建的 Machine 被称为“孤儿 Machine”,需要手动管理其生命周期。
2.2.3 MachineDeployment
MachineDeployment 是 CAPI 中用于管理一组同质化 Machine 的控制器。它提供了与 Kubernetes Deployment 类似的声明式更新和扩缩容能力。其核心功能包括:
- 副本管理:确保指定数量的
Machine始终处于运行状态。 - 滚动更新:支持逐步替换旧版本的
Machine,实现零停机升级。 - 回滚:当更新失败时,可以快速回滚到之前的
MachineTemplate版本。 - 扩缩容:通过调整
replicas字段,动态增加或减少节点数量。
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
name: my-production-worker-md
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-production-worker-bootstrap
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AWSMachineTemplate
name: my-production-worker-aws-template
2.3 核心组件关系图
下图展示了 Cluster、MachineDeployment、Machine 以及底层基础设施之间的层级关系与数据流向。
2.4 组件生命周期与状态机
CAPI 中的每个核心组件都遵循一个明确的状态机。以 Machine 为例,其典型生命周期状态包括:
- Pending:资源已创建,但基础设施尚未开始创建。
- Provisioning:基础设施提供商正在创建虚拟机。
- Running:虚拟机已创建,Kubernetes 节点已加入集群。
- Deleting:正在销毁虚拟机。
- Failed:创建或运行过程中出现不可恢复的错误。
MachineDeployment 的 status.readyReplicas 字段,确保在回滚或升级操作后,所有节点都达到 Running 状态,再继续后续步骤。
2.5 核心组件对比总结
| 维度 | Cluster | Machine | MachineDeployment |
|---|---|---|---|
| 粒度 | 集群级 | 节点级 | 节点组级 |
| 是否直接管理 | 是(用户创建) | 通常不直接创建 | 是(用户创建) |
| 更新策略 | 不可变(需重建) | 不可变(需替换) | 滚动更新 / 回滚 |
| 扩缩容 | 不支持 | 不支持 | 支持(调整 replicas) |
| 与回滚护栏的关系 | 定义回滚目标集群 | 回滚的最小单元 | 回滚的执行载体 |