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

K8s同时配置Node Affinity与Pod Affinity的调度异常问题咨询

问题原因分析

你之前认为的node affinity优先级更高导致pod affinity被忽略的判断不成立:Kubernetes调度器的所有requiredDuringSchedulingIgnoredDuringExecution类规则都是必须同时满足的硬约束,不存在某类规则优先级更高的逻辑。
当前调度结果完全符合你现有配置的规则,问题根源是podAffinity的topologyKey配置不符合预期:

  • 你配置的topologyKey: schedule-on表示,只要目标节点的schedule-on标签值和已有同标签Pod所在节点的schedule-on值一致,就满足亲和性要求
  • Node1和Node2的schedule-on值都是gpu,属于同一个拓扑域,因此两个Pod分别调度到Node1和Node2完全符合你写的podAffinity规则
调整方案

要实现两个副本调度到同一个GPU节点的需求,仅需修改podAffinity的topologyKey为节点唯一标识标签kubernetes.io/hostname即可,修改后的affinity配置如下:

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: schedule-on
          operator: In
          values:
          - gpu
  podAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - key: app.kubernetes.io/name
          operator: In
          values:
          - test
      topologyKey: kubernetes.io/hostname

调整后运行逻辑

  • topologyKey: kubernetes.io/hostname的拓扑域粒度为单个节点,每个节点的kubernetes.io/hostname值唯一
  • 第一个副本调度时,集群中无匹配标签的同应用Pod,podAffinity规则默认满足,会被调度到任意符合nodeAffinity要求的GPU节点
  • 第二个副本调度时,必须同时满足两个硬约束:节点属于GPU节点、和已有同应用Pod在同一个kubernetes.io/hostname拓扑域(即同一个节点),因此两个副本必然会被调度到同一个GPU节点
  • 注意:需保证单个GPU节点的可用资源足够承载2个Pod副本,否则第二个副本会调度失败进入Pending状态

内容的提问来源于stack exchange,提问作者RITESH SANJAY MAHAJAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:04