首页/云/Kubernetes 速查/污点与容忍
调度与资源52 条

污点与容忍

污点是节点侧「拒绝调度」的声明(key=value:Effect),容忍是 Pod 的豁免;与亲和性方向相反,互为补充。

Kubernetes 速查云更新于 2026-10-13

污点与容忍是什么

污点是节点上的一段声明,表示「不希望某类对象被调度到这里」;容忍是对象上的一段声明,表示「我可以接受这个污点」。两者配合使用:节点打上污点后,只有带上对应容忍的对象才能被调度上去,其余对象会被挡在外面。这是把特定设备或特殊规格节点留给指定业务的标准做法。

容忍只代表可以被调度

关键区别在于容忍是「准入」而不是「定向」:带上容忍只说明这个对象允许落到该节点,并不保证它会去那里。想让业务真正落在特定节点上,还要配合节点选择器或亲和规则,两者组合使用才能同时达到「别人进不来」和「自己一定去」的效果。

基本信息

适用环境任何 Kubernetes 发行版
作用对象污点打在节点上,容忍写在对象模板里
效果类型分不影响调度、尽量不调度与不可调度三种
匹配方式按键值对匹配,或按键是否存在匹配
与亲和的区别污点是节点拒绝,亲和是对象挑选,方向相反
典型用途专用节点隔离、特殊硬件保留、独占资源

典型使用场景

  • 专用节点:把带特殊硬件的节点留给需要的业务,其他服务不得占用
  • 独占资源:为授权类业务保留节点,避免与普通负载争抢
  • 节点维护前:临时阻止新对象调度到待维护的机器上
  • 系统组件隔离:控制面节点默认带污点,只允许系统组件与显式容忍的业务
  • 成本分层:把不同规格节点分配给不同优先级的服务
  • 分批调度:对目标节点打上污点,逐步放行新版本实例

给节点打污点

给节点打污点
kubectl taint nodes node-1 dedicated=gpu:NoSchedule      # 打上专用污点
kubectl taint nodes node-1 dedicated=gpu:NoSchedule-     # 末尾加减号即移除
kubectl describe node node-1 | grep -i taints            # 核对现有污点
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints

对象上的容忍

对象上的容忍
spec:
  tolerations:
    - key: dedicated
      operator: Equal
      value: gpu
      effect: NoSchedule
  nodeSelector:              # 配合选择器才能真正定向
    node-pool: gpu

效果类型对比

效果含义适用场景
不可调度不允许新的对象调度上来常用,隔离专用节点
尽量不调度尽量避开,必要时仍可上去软性偏好场景
不可执行已在节点上的对象也要被驱逐节点下线或故障处理
容忍只影响能否被调度,不能把对象定向到某个节点;需要定向要额外配置节点选择器或亲和规则。
给节点打上污点后,部署在该节点上的系统组件如果没有对应容忍,也会被一起挡在外面,操作前先确认影响范围。

易错点

  • 只加容忍不配选择器:对象可能落到普通节点,独占意图落空,特殊节点也被其他负载占用
  • 给节点打污点后忘了系统组件同样需要容忍:采集与网络插件被挡住,节点功能不完整
  • 使用会驱逐已有对象的效果类型:节点上运行中的业务被立即赶走,可能造成服务中断
  • 以为污点能定向:它只做拒绝,不做吸引,两个方向需要用两种机制配合

数据来源与参考

  • Kubernetes 官方文档 · Taints and Tolerations
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌