3、多集群调度的核心概念:集群联邦(KubeFed)、Cluster API、多集群服务(MCS)的基本原理

在多集群 Kubernetes 架构中,集群联邦(KubeFed)、Cluster API 和 多集群服务(MCS) 是三个最核心的抽象层。它们分别解决了资源分发、集群生命周期管理和跨集群服务发现的问题。理解这三者的定位与协作关系,是设计多集群调度策略的前提。

3.1 集群联邦(KubeFed)—— 资源分发与策略同步

KubeFed(Kubernetes Cluster Federation)是 CNCF 的早期孵化项目,其核心思想是让用户通过一个“控制平面”将 Kubernetes 原生资源(如 Deployment、ConfigMap、Service)同步到多个成员集群中。它不负责实际的 Pod 调度,而是负责策略定义与资源分发。

3.1.1 核心组件与工作流

  • Federation API:定义 FederatedDeployment、FederatedConfigMap 等 CRD,作为多集群资源的模板。
  • Placement 策略:通过 ClusterSelector 或 ReplicaSchedulingPreference 指定资源应分发到哪些集群,以及副本如何按权重或比例分配。
  • Sync Controller:监听 Federation API 的变化,将模板和策略下推到目标集群的对应命名空间。
  • Status Controller:从各成员集群收集资源状态,聚合后写回 Federation API 的 Status 字段。
关键设计点: KubeFed 采用“推模式”(Push-based),控制平面主动向成员集群同步资源。它不要求成员集群之间直接通信,适合网络隔离或跨云场景。

3.1.2 调度策略示例:ReplicaSchedulingPreference

apiVersion: scheduling.kubefed.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:
  name: my-app-rsp
  namespace: my-namespace
spec:
  targetTemplate:
    spec:
      replicas: 10
  overrides:
    - clusterName: cluster-aws
      spec:
        replicas: 6
    - clusterName: cluster-azure
      spec:
        replicas: 4
  totalReplicas: 10

上述配置表示:总副本数为 10,其中 6 个分发到 AWS 集群,4 个分发到 Azure 集群。KubeFed 的调度器会根据权重和集群当前容量自动调整分发比例。

3.2 Cluster API —— 集群生命周期管理

Cluster API(CAPI)是 Kubernetes SIG Cluster Lifecycle 主导的项目,专注于声明式地管理 Kubernetes 集群的创建、升级、扩缩容和销毁。它通过一组 CRD 将基础设施(如虚拟机、网络、负载均衡器)抽象为 Kubernetes 资源。

3.2.1 核心 CRD 与角色

CRD 名称 职责 示例提供者
Cluster 定义集群的全局配置,包括控制平面和基础设施的引用 AWSCluster, AzureCluster
Machine 代表一个计算节点(虚拟机或裸金属),包含节点规格和启动模板 AWSMachine, DockerMachine
MachineDeployment 类似 Deployment,管理一组 Machine 的滚动更新和扩缩容 —
MachineSet 类似 ReplicaSet,确保指定数量的 Machine 处于运行状态 —
KubeadmControlPlane 使用 kubeadm 初始化和管理控制平面节点 —

3.2.2 工作流:从声明到集群就绪

  1. 用户提交一个 Cluster 对象,指定集群名称、Kubernetes 版本、控制平面和 Worker 的 Machine 模板。
  2. Cluster API Controller 调用基础设施提供者(如 AWS 的 CAPA)创建虚拟机、安全组、负载均衡器等资源。
  3. 控制平面 Machine 启动后,KubeadmControlPlane Controller 自动执行 kubeadm init 初始化控制平面。
  4. Worker Machine 启动后,自动加入集群,成为 Ready 节点。
  5. 用户可以通过更新 MachineDeployment 的 replicas 或 version 来扩缩容或升级节点。
与 KubeFed 的协作: Cluster API 负责“造集群”,KubeFed 负责“用集群”。两者结合可以实现从集群创建到应用分发的全自动化流水线。

3.3 多集群服务(MCS)—— 跨集群服务发现与连通

多集群服务(Multi-Cluster Services,MCS)是 Kubernetes SIG Multicluster 提出的标准,旨在解决跨集群的服务发现和流量路由问题。它定义了一组 API,让 Pod 能够通过统一的 DNS 名称访问其他集群中的 Service。

3.3.1 核心 API 对象

  • ServiceExport:将一个命名空间下的 Service 标记为“可被其他集群发现”。
  • ServiceImport:在消费集群中创建一个虚拟 Service,代表来自其他集群的导出 Service。

MCS 不定义具体的网络实现(如东西向流量如何穿透集群边界),而是定义控制面接口。底层实现可以是 Submariner、Cilium ClusterMesh、Istio Multi-Primary 等。

3.3.2 DNS 解析与流量模型

当 ServiceImport 被创建后,MCS Controller 会在消费集群的 CoreDNS 中注入一条记录,格式为:

<service-name>.<namespace>.svc.clusterset.local

Pod 通过这个域名访问服务时,流量会被路由到提供该服务的任意集群中的健康端点。MCS 支持两种路由模式:

模式 说明 适用场景
ClusterSet 所有集群组成一个逻辑集合,服务端点全局可见,流量按权重或延迟分发 低延迟、高可用、全局负载均衡
Per-Cluster 每个集群独立暴露服务,消费方需显式指定目标集群 数据本地化、合规要求、严格隔离

3.4 三者关系与架构总览

下图展示了 KubeFed、Cluster API 和 MCS 在多集群体系中的分层关系:

多集群核心概念架构图 多集群调度核心概念分层架构 用户 / 运维控制面 KubeFed(资源分发与策略同步) FederatedDeployment / ReplicaSchedulingPreference Cluster API(集群生命周期管理) Cluster / Machine / MachineDeployment 多集群服务 MCS(服务发现与连通) ServiceExport / ServiceImport / clusterset.local 集群 A 集群 B 集群 C KubeFed 负责“分发”,Cluster API 负责“创建”,MCS 负责“连通”——三者互补,构成多集群调度的基础设施层

3.5 三者的对比与选型建议

维度 KubeFed Cluster API MCS
核心职责 资源分发与策略同步 集群创建、升级、扩缩容 跨集群服务发现与路由
操作对象 Deployment、ConfigMap、Service 等 虚拟机、网络、负载均衡器 Service 的导出与导入
调度粒度 副本级别(ReplicaScheduling) 节点级别(Machine 扩缩) 流量级别(DNS 路由)
网络依赖 控制平面与成员集群可达即可 需要访问基础设施 API 需要集群间网络连通(如 VPN、Cilium)
成熟度 稳定但社区活跃度下降 GA,生产就绪 Beta,实现多样
典型组合 KubeFed + Cluster API 实现 GitOps 多集群 Cluster API + MCS 实现动态集群池 KubeFed + MCS 实现全局服务网格
避坑提示: 不要将 KubeFed 当作“多集群调度器”使用。它不感知单个 Pod 的调度决策,也不处理集群间的负载均衡。真正的跨集群 Pod 调度需要结合调度器扩展(如 Karmada、Clusternet)或自定义调度器插件。

3.6 小结