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
相关产品推荐
相关产品推荐

