考点精讲
- Taints 和 Toleration 是一套「排斥 + 容忍」的调度机制,用于控制哪些 Pod 能调度到哪些节点。Taint 是打在节点上的排斥标记,Toleration 是写在 Pod 上的容忍声明,只有带匹配 Toleration 的 Pod 才能调度到带对应 Taint 的节点。Taint 有三种效果:NoSchedule(不调度新 Pod)、PreferNoSchedule(尽量不调度)、NoExecute(既拒绝新 Pod、又驱逐已运行的 Pod)。Toleration 与 Taint 按 key/value/effect 三要素匹配。典型的应用是:控制平面节点默认带有 NoSchedule 污点,普通工作负载不会调度上去。与 nodeSelector/nodeAffinity(把 Pod「拉」到指定节点)不同,Taint 是「排斥」机制。
记忆技巧
Taint 是节点上的禁区,Toleration 是通行证
NoExecute 最狠:既拒绝新 Pod 又驱逐旧 Pod
NoExecute 最狠:既拒绝新 Pod 又驱逐旧 Pod
常见误区
- 以为加了 Toleration 就等于强制调度(还需资源满足)
- Taint 与 Toleration 的 key/effect 不完全一致导致不生效
- 混淆 nodeSelector(选节点)与 Taint(排斥节点)
真题思路
- 【示例】本页题目为教学模拟题,非真题,仅用于讲解答题思路 给节点打上效果为 NoExecute 的 Taint 后,会发生什么?
只拒绝新 Pod,已运行的 Pod 不受影响 拒绝新 Pod,并驱逐已运行且无对应 Toleration 的 Pod 所有 Pod 照常调度 节点自动关闭
答案:B
解析:NoExecute 效果最强:既拒绝新 Pod,又驱逐已运行且无匹配 Toleration 的 Pod。
常见问题
Q:Taint 和 Toleration 是什么关系
A:Taint 打在节点上表示排斥,Toleration 写在 Pod 上表示容忍,匹配后才能调度。
Q:NoExecute 和 NoSchedule 区别
A:NoSchedule 只拒绝新 Pod,NoExecute 还驱逐已运行的 Pod。
Q:nodeSelector 和 Taint 区别
A:nodeSelector 把 Pod「拉」到指定节点,Taint 是节点「排斥」Pod。
相关知识
教材出处:第12章 Kubernetes资源调度 调度策略、Taints与Toleration