2. Cluster API核心概念
Cluster API 是 Kubernetes SIG 社区维护的官方子项目,旨在通过声明式 API 和控制器模式,将 Kubernetes 集群的完整生命周期(创建、扩缩容、升级、销毁)纳入 Kubernetes 自身的资源管理体系中。理解其核心对象模型是掌握多租户网络隔离实践的前提。
Cluster API 的资源模型围绕“集群”与“机器”两个抽象层次展开,并通过 Provider 机制对接不同基础设施。以下五个核心概念构成了整个系统的骨架。
2.1 Cluster:集群的顶层抽象
Cluster 对象是集群生命周期的顶层资源,它定义了一个 Kubernetes 集群的全局配置和状态。一个 Cluster 对象通常包含对控制面(ControlPlane)和基础设施网络(Infrastructure)的引用。
| 字段 | 说明 | 典型值/示例 |
|---|---|---|
spec.infrastructureRef |
引用基础设施集群对象(如 AWSCluster、AzureCluster) | AWSCluster/my-cluster-vpc |
spec.controlPlaneRef |
引用控制面对象(如 KubeadmControlPlane) | KubeadmControlPlane/my-cluster-cp |
status.phase |
集群当前生命周期阶段 | Provisioned, Failed |
2.2 Machine:节点的原子单元
Machine 对象对应一个具体的计算节点(虚拟机或裸金属服务器)。它是 Cluster API 中最细粒度的资源,直接映射到基础设施中的一台实例。每个 Machine 对象都包含指向其所属 Cluster、关联的 Bootstrap 数据以及基础设施实例的引用。
apiVersion: cluster.x-k8s.io/v1beta1
kind: Machine
metadata:
name: my-cluster-worker-0
namespace: default
spec:
clusterName: my-cluster
version: v1.28.0
bootstrap:
dataSecretName: my-cluster-worker-0-bootstrap
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AWSMachine
name: my-cluster-worker-0
infrastructureRef 指向的基础设施对象(如 AWSMachine)可以携带子网、安全组等网络配置,这是实现节点级网络隔离的入口点。
2.3 MachineDeployment:声明式节点管理
MachineDeployment 是 Cluster API 对 Kubernetes Deployment 模式的移植,用于声明式地管理一组同质化的 Machine 对象。它提供滚动更新、回滚、扩缩容等能力,是生产环境中管理 Worker 节点的主要方式。
- 模板化定义: 通过
spec.template.spec定义 Machine 模板,所有副本共享该模板。 - 滚动更新策略: 支持
RollingUpdate和OnDelete两种策略,控制节点替换行为。 - 与 Cluster 的关系: 一个 MachineDeployment 必须属于一个 Cluster,通过
spec.clusterName关联。
| 特性 | MachineDeployment | MachineSet(底层) |
|---|---|---|
| 用户面向 | 是(推荐使用) | 否(由 MachineDeployment 管理) |
| 自动扩缩容 | 支持(配合 Cluster Autoscaler) | 不直接支持 |
| 滚动更新 | 内置支持 | 需手动管理 |
2.4 ControlPlane:控制面的抽象
ControlPlane 是一个接口类型,Cluster API 通过 spec.controlPlaneRef 引用具体的控制面实现。最常用的实现是 KubeadmControlPlane,它使用 kubeadm 工具来引导和管理控制面节点。
ControlPlane 对象负责:
- 控制面节点的创建、升级、健康检查。
- etcd 集群的初始化与成员管理。
- 控制面负载均衡器(如 AWS NLB)的配置(通过 Infrastructure Provider 协作)。
2.5 Infrastructure Provider:基础设施适配层
Infrastructure Provider 是 Cluster API 的插件化扩展机制,负责将 Cluster API 的资源模型翻译为具体云平台或本地环境的 API 调用。每个 Provider 通常包含两类 CRD:
- InfrastructureCluster: 对应 Cluster 对象,定义 VPC、网络、子网等全局基础设施。
- InfrastructureMachine: 对应 Machine 对象,定义虚拟机规格、磁盘、网络接口等实例级配置。
| Provider | InfrastructureCluster 示例 | InfrastructureMachine 示例 |
|---|---|---|
| AWS | AWSCluster | AWSMachine |
| Azure | AzureCluster | AzureMachine |
| vSphere | VSphereCluster | VSphereMachine |
| OpenStack | OpenStackCluster | OpenStackMachine |
2.6 核心对象关系图
下图展示了 Cluster API 核心对象之间的引用与依赖关系,以及它们如何通过 Provider 层与基础设施交互。
2.7 多租户网络隔离中的角色映射
在后续章节的多租户实践中,上述核心概念将承担以下网络隔离职责:
- Cluster: 每个租户对应一个独立的 Cluster 对象,拥有独立的 VPC 或网络命名空间。
- InfrastructureCluster: 定义租户专属的网络 CIDR、子网、路由表、NAT 网关等。
- Machine / MachineDeployment: 通过 InfrastructureMachine 的安全组规则,实现租户内节点间的微隔离。
- ControlPlane: 控制面网络与租户网络严格分离,通常部署在独立的 Management VPC 中。