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

Argo Workflows任务Pod默认nodeAffinity与toleration自定义问题

解决Argo Workflows自动添加nodeAffinity和Toleration的问题

一、移除固定节点的nodeAffinity,让Kubernetes默认调度

Argo自动绑定特定节点的nodeAffinity,通常是控制器默认配置或模板继承导致的。要把调度权交回给Kubernetes,有两种处理方式:

1. 单Workflow/模板级别覆盖

在你的Workflow或WorkflowTemplate的任务模板里,显式设置空的affinity字段,直接覆盖Argo的默认配置:

templates:
  - name: your-timed-task
    container:
      image: your-task-image:latest
    affinity: {}  # 清空默认的nodeAffinity配置
    schedulerName: default-scheduler  # 确保使用Kubernetes默认调度器

2. 全局生效(所有Workflow)

修改Argo的workflow-controller-configmap,添加或调整workflowDefaults配置,全局清空默认affinity:

apiVersion: v1
kind: ConfigMap
metadata:
  name: workflow-controller-configmap
data:
  workflowDefaults: |
    spec:
      templates:
        - name: default
          affinity: {}

修改后需要重启Argo控制器Pod,配置才会生效。

二、自定义或移除默认Toleration

Argo默认添加的这两个NoExecute toleration,是为了让Pod在节点短暂失联(比如重启、网络波动)时,不会立刻被驱逐,给节点留5分钟恢复时间,避免任务意外中断。如果不需要这个逻辑,可以这样处理:

1. 移除所有默认Toleration

在任务模板里显式设置空数组:

templates:
  - name: your-timed-task
    container:
      image: your-task-image:latest
    tolerations: []  # 清空默认的toleration配置

2. 自定义Toleration

替换成你需要的规则,比如只容忍特定污点:

templates:
  - name: your-timed-task
    container:
      image: your-task-image:latest
    tolerations:
      - key: "your-custom-taint-key"
        operator: "Exists"
        effect: "NoSchedule"

3. 全局配置Toleration

同样通过workflow-controller-configmap的workflowDefaults设置全局默认:

apiVersion: v1
kind: ConfigMap
metadata:
  name: workflow-controller-configmap
data:
  workflowDefaults: |
    spec:
      templates:
        - name: default
          tolerations: []  # 全局清空,或替换为自定义规则

三、验证配置生效

部署修改后的Workflow后,用以下命令查看Pod的实际配置:

kubectl get pod <your-pod-name> -o yaml | grep -A 20 -B 5 "affinity\|tolerations"

确认affinity已为空,tolerations符合你的设置即可。

内容的提问来源于stack exchange,提问作者Ian Chu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:23:18