3. ClusterClass 概念解析
ClusterClass 是 Cluster API(CAPI)v1beta1 引入的核心抽象,它将集群的“类型”与“实例”分离。理解 ClusterClass 的定义、它与 Cluster 的关系以及模板化优势,是掌握多集群门禁策略的基础。
3.1 ClusterClass 定义
ClusterClass 是一个集群范围的资源,它定义了一组可复用的“蓝图”,用于声明如何构造一个工作集群。它不描述某个具体集群的终态,而是描述一类集群的结构、组件和变量。
| 属性 | 说明 | 示例值 |
|---|---|---|
spec.supervisorRef |
引用管理集群中的 Supervisor Cluster | kind: Supervisor / name: my-supervisor |
spec.controlPlane |
控制平面模板(如 KubeadmControlPlaneTemplate) | apiVersion: controlplane.cluster.x-k8s.io/v1beta1 |
spec.infrastructure |
基础设施模板(如 AWSClusterTemplate / DockerClusterTemplate) | apiVersion: infrastructure.cluster.x-k8s.io/v1beta2 |
spec.workers |
工作节点池模板列表(MachineDeploymentClass) | class: default-worker / replicas: 3 |
spec.variables |
可配置的变量定义(overridable / required) | name: nodeSize / type: string |
关键点:ClusterClass 本身不创建任何实际资源,它只提供“模板元数据”。实际集群的创建由 Cluster 资源引用 ClusterClass 并填充变量后触发。
3.2 ClusterClass 与 Cluster 的关系
ClusterClass 与 Cluster 是一对多的模板-实例关系。一个 ClusterClass 可以被多个 Cluster 引用,每个 Cluster 通过 spec.topology.class 字段指定引用的 ClusterClass 名称,并通过 spec.topology.variables 传入差异化参数。
实践建议:在生产环境中,建议为每个环境(prod/staging/dev)创建独立的 ClusterClass,而不是在同一个 ClusterClass 中通过变量区分环境。这样可以避免变量膨胀,并降低误配置风险。
3.3 ClusterClass 模板化优势
引入 ClusterClass 后,集群管理从“逐个配置”转变为“模板驱动”。以下是模板化带来的核心优势:
- 一致性保障:所有引用同一 ClusterClass 的集群共享相同的控制平面、基础设施和工作节点模板,避免配置漂移。
- 变更管控:修改 ClusterClass 后,所有关联的 Cluster 会自动触发拓扑协调(Topology Reconciliation),实现批量更新。
- 变量抽象:通过
spec.variables定义可配置参数,将环境差异收敛到变量层,降低复杂度。 - 门禁集成:准入控制器(如 ValidatingAdmissionPolicy / OPA Gatekeeper)可以针对 ClusterClass 的变更进行校验,实现“一次定义,全局生效”。
| 维度 | 传统 Cluster 管理 | ClusterClass 模板化 |
|---|---|---|
| 配置方式 | 每个 Cluster 独立编写完整 YAML | 引用 ClusterClass + 填充变量 |
| 变更范围 | 逐个修改 Cluster 资源 | 修改 ClusterClass 后自动同步 |
| 一致性 | 依赖人工审查,易出现差异 | 模板强制统一,差异仅限变量 |
| 门禁策略 | 需要为每个 Cluster 编写独立规则 | 针对 ClusterClass 编写一次规则即可 |
| 版本管理 | 难以追踪集群配置版本 | ClusterClass 可纳入 GitOps 版本控制 |
注意:ClusterClass 的变更可能触发大规模集群重建。例如,修改控制平面模板中的镜像版本或节点规格,会导致所有关联集群的控制平面滚动更新。因此,必须通过准入策略对 ClusterClass 的变更进行高风险校验。
下图展示了 ClusterClass 模板化如何将“多集群配置”抽象为“模板 + 变量”两层:
总结:ClusterClass 是 Cluster API 实现“多集群标准化”的基石。它将集群的拓扑结构、组件版本和变量定义统一管理,为后续的准入策略覆盖和门禁高风险变更提供了统一的拦截点。在后续章节中,我们将基于 ClusterClass 的变更事件,设计准入策略来拦截高风险操作。