跨集群调度是在多个 Kubernetes 集群间统一编排工作负载的能力,依据资源水位、地域延迟等策略动态分发 Pod,以提升资源利用率与业务连续性;主流方案中 Karmada 最成熟,支持推 / 拉模式及灵活调度策略。

什么是跨集群调度
跨集群调度是指在多个 Kubernetes 集群之间统一编排和分发工作负载的能力。它不是简单地把应用复制到每个集群,而是根据策略(比如资源水位、地域延迟、故障隔离)动态决定 Pod 该部署到哪个集群的节点上。核心目标是提升资源利用率、增强业务连续性、支持多活或灾备架构。
主流跨集群调度方案选型对比
目前生产可用的方案主要有三类:
- Karmada:CNCF 毕业项目,原生支持多集群联邦 API,调度器可插拔,支持推式(push)和拉式(pull)两种工作模式,适合中大型组织统一纳管数十个集群;
- Cluster API + ClusterClass:偏基础设施层,适合需要标准化集群生命周期管理的场景,调度需配合自定义控制器或外部调度器;
- 自研调度 +K8s Federation v2(已归档):不推荐新项目采用,v2 已停止维护,社区转向 Karmada 等更活跃项目。
对大多数用户,Karmada 是当前最成熟、文档最全、社区最活跃的选择。
用 Karmada 快速实现跨集群调度
以两个已有集群(cluster-a 和 cluster-b)为例,接入 Karmada 并启用跨集群调度只需四步:
- 在主机集群(host cluster)上安装 Karmada 控制平面(含 karmadactl 或 helm);
- 将 cluster-a 和cluster-b作为成员集群注册进 Karmada,Karmada 会自动部署 agent 组件;
- 创建
PropagationPolicy,声明哪些命名空间或资源类型需分发,例如指定 Deployment 按“优先调度到 cluster-a,cluster- a 满载时自动 f ailover 到 cluster-b”; - 提交标准 K8s Deployment 清单,Karmada 调度器会基于集群状态(如 CPU 使用率、节点数、label 匹配)生成对应集群的副本,并同步下发。
关键点:调度策略依赖 ResourceBinding 和ClusterPropagationPolicy联动,实际分发行为由 SchedulingStrategy 中的 Divided 或Replicated模式控制。
常见问题 与避坑提示
跨集群调度不是开箱即用的银弹,落地时要注意:
- 网络连通性必须保障:各成员集群的 kube-apiserver 需对 Karmada host cluster 双向可达,建议用内网或 Service Mesh 打通;
- 证书信任要提前配置:Karmada agent 访问 member cluster 时,默认校验 server 证书,自签 CA 需导入或跳过验证(仅测试环境);
- 不要忽略本地集群约束:比如某 Deployment 依赖特定 StorageClass 或 IngressClass,需确保所有目标集群都存在同名且兼容的资源;
- 监控和可观测性要升级:原生 K8s 指标只覆盖单集群,建议用 Prometheus 联邦或 Thanos 聚合多集群指标,再结合 Karmada 自带的
karmadactl get clusters做健康巡检。