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

如何仅在NodeSelector可用时为Kubernetes Job配置它?

实现Kubernetes Job的条件式节点调度:仅当GPU标签存在时优先调度

Kubernetes原生的nodeSelector是硬约束,一旦配置就必须找到匹配标签的节点,否则Pod会处于Pending状态——这就是你现在遇到的问题:因为运维还没配置sma-gpu-size标签,导致30个节点都不匹配选择器,加上部分节点的taint无法容忍,最终没有可用节点。

要实现“有GPU标签时优先选GPU节点,没有时随便调度”的逻辑,你需要用节点亲和性(Node Affinity)的软约束替代nodeSelector,具体配置如下:

job = f"""
apiVersion: batch/v1
kind: Job
....
      # 可选:若需要调度到带taint的infra/master节点,添加容忍规则
      tolerations:
      - key: "node-role.kubernetes.io/infra"
        operator: "Exists"
        effect: "NoSchedule"
      - key: "node-role.kubernetes.io/master"
        operator: "Exists"
        effect: "NoSchedule"
      # 用软亲和性替代nodeSelector
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: sma-gpu-size
                operator: In
                values:
                - {gpu_size}
"""

配置说明:

  • preferredDuringSchedulingIgnoredDuringExecution是软偏好设置:调度器会优先尝试匹配带有sma-gpu-size={gpu_size}标签的节点,如果找不到(比如当前标签未配置),则会忽略这个偏好,将Pod调度到其他可用节点。
  • weight: 100表示这个偏好的优先级(权重越高,调度器越优先满足)。
  • 可选的tolerations用来解决报错里的taint问题:如果需要将Pod调度到带有node-role.kubernetes.io/infra或node-role.kubernetes.io/master污点的节点,就添加对应的容忍规则,否则可以忽略这部分。

当运维团队配置好sma-gpu-size标签后,新创建的Job会自动优先调度到GPU节点,无需修改任何配置,完美契合你的需求。

内容的提问来源于stack exchange,提问作者Data Mastery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:35:21