关键不是“主动申请”,而是“出示通行证”——这个通行证就是Tolerations,它写在Pod的YAML中,要求匹配污点的key、value(或Exists通配)和effect三要素;Equal模式需完全一致,Exists模式只校验key和effect;NoExecute容忍可配tolerationSeconds延缓驱逐;多污点节点要求Pod声明全部匹配容忍,否则调度失败。

让 Pod 调度到带污点的节点上,关键不是“主动申请”,而是“出示通行证”——这个通行证就是 Tolerations。它写在 Pod 的 YAML 里,告诉调度器:“我清楚这个节点有污点,但我被允许进来。”
容忍必须匹配污点三要素
节点上的污点格式是 key=value:effect,而 Pod 的 toleration 必须在 key、value(或存在性)、effect 三方面达成一致,才算有效。不匹配就进不去。
-
Equal 模式(最常用):要求 key、value、effect 全部精确一致
例如节点有污点gpu-type=A100:NoSchedule,Pod 就得写:
tolerations: - key: "gpu-type" operator: "Equal" value: "A100" effect: "NoSchedule"
-
Exists 模式(灵活通配):只校验 key 和 effect,忽略 value
适合应对多个值的同一类污点,比如所有维护中的节点都打了under-maintain:NoExecute,但没设 value;或你想容忍任意database=xxx的 NoSchedule 污点,可省略 value:
tolerations: - key: "under-maintain" operator: "Exists" effect: "NoExecute"
容忍 NoExecute 时要加驱逐缓冲期
当节点污点 effect 是 NoExecute,已运行的 Pod 若无对应容忍,会被立即驱逐。为避免服务中断,可在 toleration 中加 tolerationSeconds,表示“容忍失效后,再留我 X 秒才走”:
tolerations: - key: "maintenance" operator: "Equal" value: "true" effect: "NoExecute" tolerationSeconds: 300
上面配置表示:该 Pod 可以在污点生效后继续运行 5 分钟,之后被自动驱逐。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
一个 Pod 可声明多个容忍,应对多污点节点
现实节点常打多个污点,比如同时标记了硬件类型和区域:
node-01 污点: - gpu-type=A100:NoSchedule - region=cn-east:NoExecute
那 Pod 必须同时容忍两者,缺一不可:
tolerations: - key: "gpu-type" operator: "Equal" value: "A100" effect: "NoSchedule" - key: "region" operator: "Equal" value: "cn-east" effect: "NoExecute"
调度器会逐条检查,只要有一条污点找不到匹配容忍,整个调度就会失败。
调试技巧:快速定位调度失败原因
如果 Pod 卡在 Pending 状态,别猜,直接查:
- 看节点有没有污点:
kubectl describe node <node-name> | grep Taints - 看 Pod 为什么卡住:
kubectl describe pod <pod-name>,重点看 Events 区域,通常会明确提示 “Taints not tolerated” - 确认污点和容忍是否完全对得上:注意大小写、空格、冒号位置、effect 类型是否一致

















