4. 跨集群调度策略类型:duplicated、divided、static、weighted 分布策略对比与适用场景
在 Kubernetes Federation 中,跨集群调度策略决定了工作负载(Deployment、Service 等)如何被分发到成员集群。Federation 提供了四种核心策略:Duplicated、Divided、Static 和 Weighted。理解每种策略的调度模型、数据一致性要求以及适用边界,是调试跨集群调度问题的前提。
核心原则:策略选择直接影响跨集群的流量分配、资源利用率以及故障域隔离。生产环境中,通常需要组合使用多种策略来满足多租户与多集群的复杂需求。
4.1 四种策略核心对比
| 策略类型 | 调度模型 | Pod 副本分布 | 跨集群一致性 | 典型场景 |
|---|---|---|---|---|
| Duplicated | 全量复制 | 每个集群运行相同数量的副本 | 强一致(完全同步) | 灾备、全局服务、边缘缓存 |
| Divided | 按比例拆分 | 根据集群权重或容量自动拆分 | 最终一致(独立调度) | 多区域负载均衡、资源池化 |
| Static | 手动指定 | 仅部署到指定集群 | 无自动同步 | 合规隔离、专用硬件集群 |
| Weighted | 加权分配 | 按权重比例分配副本 | 最终一致(权重驱动) | 灰度发布、流量倾斜、成本优化 |
4.2 策略详解与调度流程
4.2.1 Duplicated(全量复制策略)
Federation 控制平面将工作负载的完整定义复制到所有目标集群。每个集群独立运行相同数量的 Pod 副本。该策略适用于需要全局一致性的场景,例如全局 DNS 服务、配置中心或灾备集群。
- 优点:部署逻辑简单,故障切换快(任一集群均可独立提供服务)。
- 缺点:资源消耗大,所有集群必须保持相同的副本数,不适合资源异构环境。
- 调试要点:检查每个集群的
ReplicaSet是否都达到期望副本数;注意跨集群的 ConfigMap/Secret 同步延迟。
4.2.2 Divided(拆分策略)
Federation 将总副本数按集群的 maxReplicas 或可用容量进行自动拆分。每个集群只运行总副本的一部分。该策略适用于多区域负载均衡或资源池化场景。
- 优点:资源利用率高,自动适应集群容量差异。
- 缺点:调度依赖集群容量报告,容量信息延迟可能导致调度不均。
- 调试要点:验证
ClusterResourceOverride或ReplicaSchedulingPreference中的容量配置;检查集群状态是否被正确上报。
4.2.3 Static(静态指定策略)
管理员手动指定工作负载只部署到特定的一个或多个集群。Federation 不进行自动调度或副本拆分。该策略适用于合规要求(数据必须留在特定地域)或专用硬件集群(GPU、ARM 节点)。
- 优点:完全可控,无自动调度风险。
- 缺点:需要人工维护集群列表,无法自动故障转移。
- 调试要点:确认
FederatedDeployment的spec.placement.clusterNames列表是否正确;检查目标集群是否处于 Ready 状态。
4.2.4 Weighted(加权分配策略)
Federation 根据管理员为每个集群设置的权重值,按比例分配 Pod 副本。权重可以基于集群的 CPU 配额、内存配额或自定义指标。该策略是生产中最灵活的调度方式,常用于灰度发布、流量倾斜和成本优化。
- 优点:细粒度控制,支持动态调整权重,适合渐进式发布。
- 缺点:权重配置错误可能导致流量雪崩;需要配合健康检查使用。
- 调试要点:检查
weights字段是否在ReplicaSchedulingPreference中正确配置;验证权重总和是否为 100 或预期比例;监控实际 Pod 分布与权重比例的偏差。
生产建议:在灰度发布场景中,建议将 Weighted 策略与
maxReplicas 上限结合使用,防止权重调整导致某个集群瞬间被大量 Pod 淹没。
4.3 策略选择决策流程
4.4 策略组合与租户隔离
在实际的多租户 Federation 环境中,单一策略往往无法满足所有需求。常见的组合模式包括:
- Duplicated + Weighted:核心服务使用 Duplicated 保证全局可用,非核心服务使用 Weighted 进行流量分配。
- Static + Divided:合规集群使用 Static 锁定数据,计算集群使用 Divided 自动扩缩。
- 租户级别策略绑定:通过
FederatedNamespace的注解(annotation)为不同租户绑定不同的调度策略,实现租户间的调度隔离。
常见调试陷阱:当同时使用 Divided 和 Weighted 策略时,Federation 控制平面会优先处理 Divided 的容量拆分,再应用 Weighted 的权重分配。如果权重配置与集群容量冲突,可能导致部分集群副本数为 0。务必在
ReplicaSchedulingPreference 中同时设置 maxReplicas 和 weights 的合理上限。
4.5 策略配置示例(FederatedDeployment)
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
name: app-frontend
namespace: production
spec:
template:
metadata:
labels:
app: frontend
spec:
replicas: 6
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: nginx
image: nginx:1.21
placement:
clusters:
- name: cluster-asia
- name: cluster-eu
- name: cluster-us
overrides:
- clusterName: cluster-asia
clusterOverrides:
- path: "/spec/replicas"
value: 2
- clusterName: cluster-eu
clusterOverrides:
- path: "/spec/replicas"
value: 2
- clusterName: cluster-us
clusterOverrides:
- path: "/spec/replicas"
value: 2
---
apiVersion: scheduling.kubefed.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:
name: app-frontend-rsp
namespace: production
spec:
targetKind: FederatedDeployment
totalReplicas: 6
clusters:
cluster-asia:
minReplicas: 1
maxReplicas: 3
weight: 30
cluster-eu:
minReplicas: 1
maxReplicas: 3
weight: 30
cluster-us:
minReplicas: 1
maxReplicas: 3
weight: 40
上述示例中,FederatedDeployment 定义了基础模板和副本数,ReplicaSchedulingPreference 通过 weight 字段实现了 Weighted 策略,同时通过 minReplicas 和 maxReplicas 限制了每个集群的副本范围,防止调度偏差。
4.6 策略调试清单
| 策略类型 | 关键检查项 | 常见异常 | 修复方向 |
|---|---|---|---|
| Duplicated | 所有集群的 ReplicaSet 状态 |
部分集群副本数不一致 | 检查集群网络连通性、Federation 控制平面日志 |
| Divided | ClusterResourceOverride 容量报告 |
副本分布严重不均 | 调整 maxReplicas 或手动触发容量同步 |
| Static | placement.clusters 列表 |
Pod 未调度到预期集群 | 确认集群名称拼写、集群是否处于 Ready 状态 |
| Weighted | weights 总和与比例 |
实际 Pod 分布与权重比例偏差 > 10% | 检查 minReplicas 是否限制了权重生效;调整权重值 |
调试命令速查:
kubefedctl federate deployment <name> -n <ns> — 将 Deployment 转换为 FederatedDeploymentkubectl get federateddeployment <name> -n <ns> -o yaml — 查看调度策略配置kubectl get replicaschedulingpreference <name> -n <ns> -o yaml — 查看权重与容量配置