首页/云/Kubernetes 速查/tolerationSeconds 与驱逐宽限
调度与资源52 条

tolerationSeconds 与驱逐宽限

容忍可携带 tolerationSeconds:节点打上 NoExecute 污点后,Pod 会保留指定秒数再被驱逐,为优雅下线留时间。

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

宽限期让 Pod 慢一点被驱逐

容忍条目可以带 tolerationSeconds:当节点被打上 NoExecute 类污点(例如失联、不可用)之后,Pod 会保留指定秒数再被驱逐,为优雅下线与重新调度预留时间。不写这个字段表示无限容忍,Pod 会一直留在该节点上。控制面为不可用、未就绪等状况配置的默认容忍通常是有限时间的,因此节点失联后 Pod 会在宽限期结束后被重新调度到其他节点。

基本信息

适用对象各版本 Pod 的 tolerations 配置
关键字段tolerationSeconds,配合 effect: NoExecute 使用
语义未设置表示无限容忍
常见默认控制器为节点不可用、未就绪等状况配置的容忍多为有限值
影响范围决定节点异常后 Pod 多久被驱逐并重新调度

典型使用场景

  • 有状态服务优雅下线:给数据回收与主从切换留出时间窗
  • 无状态服务快速重调度:缩短宽限期,尽快把副本补到健康节点
  • 专用节点保留:对特定污点设置无限容忍,让 Pod 长期留在该节点
  • 维护演练:观察宽限期与副本补齐的实际时间关系
  • 告警设计:把节点失联类异常单独覆盖,避免被无限容忍掩盖

宽限期配置示例

宽限期配置示例
spec:
  tolerations:
    - key: node.kubernetes.io/unreachable
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300        # 节点不可达后保留 300 秒再驱逐
  containers:
    - name: app
      image: registry.example.com/app:1.5

核对污点与容忍

核对污点与容忍
kubectl get node node1 -o jsonpath='{.spec.taints}'
kubectl get pod web-x -o jsonpath='{.spec.tolerations}'
kubectl describe node node1 | grep -i -A3 taints
kubectl get pods -A -o wide --field-selector spec.nodeName=node1   # 节点失联后副本变化

配置与行为

配置行为适用
不设置 tolerationSeconds无限容忍,不被驱逐必须长期留在特定节点的负载
设置较短值很快被驱逐并重调度可快速重建的无状态服务
设置较长值留出下线与回收时间有状态服务与主从切换
节点恢复后由控制器补齐副本重调度结果取决于调度约束
宽限期调得太短会加速重调度:有状态服务可能出现两个实例同时写的风险,调整前先把数据一致性方案想清楚。
无限容忍失联节点时,副本数看着正常但流量已经进不来,节点失联类异常需要有独立告警覆盖,不能只依赖副本数指标。

易错点

  • 无限容忍不可达污点:节点失联后 Pod 长期挂在那里,副本数正常而服务实际不可用
  • 宽限期调得过短:有状态服务出现双写或数据不一致,问题现象具有随机性
  • 只配容忍不配污点:两边条件不匹配,策略完全没有生效
  • 忽略控制器自带的默认容忍:以为没设置就会立即驱逐,与实际行为不符

数据来源与参考

  • Kubernetes 官方文档 · Tolerations(tolerationSeconds)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌