Pod因节点污点Pending时需在spec下添加tolerations字段,格式为key、operator、value、effect全小写且冒号后空格;Deployment更新需在spec.template.spec下插入,避免patch导致重建中断。

当Pod因节点污点卡在Pending状态,比如报错“0/5 nodes are available: 1 node(s) had untolerated taint {dedicated=gpu: NoSchedule}”,说明调度器已识别到节点排斥策略,但Pod没带对应通行证——此时必须在Pod定义中显式声明容忍度,否则它永远进不了目标节点。
直接在Pod YAML里写tolerations字段
这一步最常用,适合长期稳定部署的业务Pod。打开你的Pod或Deployment YAML文件,在spec层级下插入tolerations列表。
在spec字段下方新增tolerations块,格式必须严格对齐,缩进错误会导致YAML解析失败:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
注意:key、operator、value、effect四个字段名全部小写,冒号后必须有空格;operator默认是Equal,不能省略;value必须与节点污点的value完全一致,包括大小写和空格。
用kubectl patch动态给运行中Pod加容忍(不推荐)
这种方法仅用于紧急排查,因为Pod对象本身是不可变的,patch操作实际会触发Pod重建——原有IP、卷挂载、启动时间全部丢失。
执行命令:kubectl patch pod my-pod -p '{"spec":{"tolerations":[{"key":"dedicated","operator":"Equal","value":"gpu","effect":"NoSchedule"}]}}'
【此操作会强制删除原Pod并新建一个,业务将出现秒级中断】
Deployment滚动更新时注入容忍
如果你用Deployment管理Pod,修改模板后触发滚动更新是最安全的方式。以下是三步操作路径:
第一步:编辑Deployment资源
kubectl edit deploy/my-app
第二步:在spec.template.spec下找到containers同级位置,插入tolerations字段(位置不能错,必须在spec.template.spec下,不能插到spec下或containers内)
第三步:保存退出,kubectl会自动触发滚动更新,新Pod带容忍上线,旧Pod按maxSurge/maxUnavailable策略逐步替换
这一步生效后,所有由该Deployment创建的新副本都会携带容忍,无需每次手动改YAML。











