You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Pod在Kubernetes集群各节点上的均匀调度

Kubernetes Pod跨节点均匀调度配置方案

方法1:使用Pod拓扑分布约束(推荐,K8s v1.19+支持)

这是官方原生提供的专门用于控制Pod跨拓扑域(此处为节点)分布的方案,配置后可以严格控制不同节点的Pod数量差:

  • 在工作负载(Deployment/StatefulSet等)的spec.template.spec下添加topologySpreadConstraints字段,配置示例如下:
topologySpreadConstraints:
- maxSkew: 1
  topologyKey: kubernetes.io/hostname
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: your-workload-label # 替换为实际的Pod标签
  • 参数说明:
    • maxSkew: 1:不同节点上的Pod副本数量最大差值为1,9副本3节点的场景下可以完美实现每个节点3个Pod
    • topologyKey: kubernetes.io/hostname:指定拓扑域为节点主机名,即按节点维度做分布控制
    • whenUnsatisfiable: DoNotSchedule:如果无法满足均匀分布要求就不调度Pod;如果允许调度后有轻微不均匀可以改为ScheduleAnyway,调度器会尽量满足分布要求
    • labelSelector:匹配当前工作负载的Pod标签,调度器只会统计匹配该标签的Pod做分布计算

方法2:使用Pod软反亲和性(兼容旧版本K8s)

如果你的集群版本低于v1.19,可以用Pod反亲和性实现尽量均匀的调度:

  • 在工作负载的spec.template.spec.affinity下添加如下配置:
affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        topologyKey: kubernetes.io/hostname
        labelSelector:
          matchLabels:
            app: your-workload-label # 替换为实际的Pod标签
  • 该配置会让调度器优先把Pod调度到没有运行同标签Pod的节点,如果所有节点都已经有同标签Pod,就优先调度到同标签Pod数量最少的节点,3节点9副本场景下基本可以实现每个节点3个Pod的分布,注意:该方案是软策略,极端场景下可能出现轻微不均匀

注意事项

  • 配置生效前提是所有节点的可用资源足够容纳对应数量的Pod,如果某个节点资源不足,调度器会自动把Pod调度到其他有剩余资源的节点,无法保证均匀分布
  • 如果是对已经运行的工作负载修改配置,需要执行滚动重启才会触发重新调度,旧Pod会按新的调度规则重新分配
  • 集群默认调度器已经默认开启EvenPodsSpread插件,如果你使用自定义调度器需要确认该插件已启用,拓扑分布约束才会生效

内容的提问来源于stack exchange,提问作者Manjunath reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:09:04