K8s污点与容忍怎么配:让Pod避开特定节点的实操方法

K8s污点与容忍怎么配:让Pod避开特定节点的实操方法

Kubernetes 的污点(Taint)和容忍(Toleration)是控制 Pod 能否调度到某个节点的机制。
简单说,节点打上污点表示“这里不欢迎普通 Pod”,Pod 声明对应容忍表示“我可以接受这个条件”。
它常用于把专用节点留给特定业务、隔离故障节点或在维护前阻止新 Pod 进入。

本文面向零基础用户,用 kubectl 命令演示完整操作流程。
你需要一个可用的 K8s 集群(版本差异不影响基本命令),以及具备操作节点和 Pod 的权限。

先理解污点的三个效果和容忍的匹配规则

一个污点由三部分组成:key、value、effect。
effect 决定 Pod 不匹配时的行为:

  • NoSchedule:新 Pod 不会调度到该节点,已运行的 Pod 不受影响。
  • PreferNoSchedule:调度器尽量不往该节点放,但没有其他选择时仍可能调度。
  • NoExecute:不仅阻止新 Pod,还会驱逐节点上不容忍该污点的已有 Pod。

容忍写在 Pod 的 spec.tolerations 中,需要匹配污点的 key、value 和 effect。
operator 为 Equal 时要求 value 一致,为 Exists 时只要求 key 存在。
effect 留空表示匹配所有 effect。

查看节点已有的污点

先确认目标节点当前状态,避免重复添加或误删:

kubectl describe node <节点名> | grep Taints

输出类似 Taints: node-role.kubernetes.io/control-plane:NoSchedule。
如果显示 ,说明该节点没有污点。

给节点添加、修改和删除污点

添加一个 NoSchedule 污点,key 为 dedicated,value 为 gpu:

kubectl taint nodes <节点名> dedicated=gpu:NoSchedule

如果只想用 key 标记,不指定 value:

kubectl taint nodes <节点名> dedicated:NoSchedule

删除污点时在末尾加一个减号,注意 key、value、effect 要和添加时完全一致:

kubectl taint nodes <节点名> dedicated=gpu:NoSchedule-

修改污点没有直接命令,通常先删除旧污点再添加新污点。
操作前建议记录原污点内容,便于回滚。

在 Pod 中声明容忍

以下 YAML 片段声明了一个容忍,匹配上面添加的污点:

spec:
  tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

如果只按 key 匹配,可以用 Exists:

  tolerations:
  - key: "dedicated"
    operator: "Exists"
    effect: "NoSchedule"

要让 Pod 容忍节点上所有污点,可以省略 key 并使用 Exists:

  tolerations:
  - operator: "Exists"

这种写法适合临时排错,不建议在生产环境中长期使用。

操作后的验证和常见调度失败排查

应用配置后,确认 Pod 是否调度到预期节点:

kubectl get pod  -o wide

查看 Pod 的调度事件,定位失败原因:

kubectl describe pod  | grep -A 10 Events

如果事件中出现 untolerated taint,说明容忍没有匹配上污点。
逐项核对 key、value、effect 拼写和大小写,尤其是 effect 必须完全一致。

如果节点被标记为不可调度(node.kubernetes.io/unschedulable),
那是 cordon 操作产生的,
不是普通污点,
需要用 kubectl uncordon <节点名> 恢复。

另外注意,污点和容忍只影响调度决策,不改变资源配额、亲和性等其他约束。
Pod 不调度时,要同时检查节点资源是否足够、是否有 nodeSelector 或亲和性冲突。

使用时的几个注意点

  • 给节点加 NoExecute 污点前,先确认节点上运行的 Pod 是否都声明了容忍,否则它们会被驱逐。
  • 生产环境修改污点前建议先在小范围节点验证,并保留回滚命令。
  • 容忍只是允许调度,不保证一定调度到该节点。如果希望 Pod 优先或必须去某个节点,还需要配合 nodeSelector 或 nodeAffinity。
  • 删除污点时如果参数写错,命令会报错而不是静默失败,按提示核对即可。

掌握污点与容忍的配置和验证方法后,你可以更精确地控制 Pod 落在哪些节点上。
遇到调度异常时,优先用 describe 查看事件,再逐项比对污点和容忍的字段。

分享到:
上一篇
服务器K8s亲和性配置:从节点选择到Pod互斥的落地实践
下一篇
服务器K8s VPA配置实战:从安装到验证的完整教程
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意