跳转到内容

赛博工地巡检手册:污点与容忍度排查指令集

🌱 创建: 2026/04/14 ⏱️ 更新: 2026/05/22

本手册用于在断电演练、网络分区或节点异常时,快速定位 Kubernetes 集群中的“调度排斥”与“非法滞留”问题。

当发现大量 Pod 无法调度到某个节点(处于 Pending),或者正在被莫名其妙地驱逐时,首先检查节点大门是否被贴了“封条”。

1. 扫描全集群所有节点的污点状态

Section titled “1. 扫描全集群所有节点的污点状态”

一行命令看清哪台机器被打上了什么标签,非常适合大盘巡检。

Terminal window
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints[*].key

2. 深入侦测单台机器的完整污点细节

Section titled “2. 深入侦测单台机器的完整污点细节”

当发现某台节点(如 k3s-master-03)异常时,查看它具体的逐客令类型(NoSchedule 还是 NoExecute)。

Terminal window
kubectl describe node k3s-master-03 | grep Taints

3. 【高危】手动给节点打污点 (隔离节点)

Section titled “3. 【高危】手动给节点打污点 (隔离节点)”

如果在维护物理机,不想让新的业务调度过来,可以手动贴封条:

Terminal window
# 语法:kubectl taint nodes <节点名> <键>=<值>:<效果>
kubectl taint nodes k3s-master-03 maintenance=true:NoSchedule

4. 手动撕掉节点的污点 (解除隔离)

Section titled “4. 手动撕掉节点的污点 (解除隔离)”

节点修好后,把刚才打的污点去掉(注意末尾的减号 - 代表删除):

Terminal window
kubectl taint nodes k3s-master-03 maintenance=true:NoSchedule-

🎟️ Pod 容忍度 (Tolerations) 排查

Section titled “🎟️ Pod 容忍度 (Tolerations) 排查”

当节点明明被打上了 NoExecute 污点,但某些 Pod 却“死皮赖脸”不走时,查查它们兜里是不是揣了特权通行证。

5. 查看单个 Pod 的容忍度与存活时间

Section titled “5. 查看单个 Pod 的容忍度与存活时间”

查验某个具体的 Pod 到底能“硬抗”什么污点,以及能抗多久(tolerationSeconds)。

Terminal window
kubectl describe pod <pod-name> -n <namespace> | grep -A 10 Tolerations

6. 找出整个 Namespace 下所有 Pod 的隐形容忍度

Section titled “6. 找出整个 Namespace 下所有 Pod 的隐形容忍度”

以 YAML 格式输出并使用 grep 过滤,排查是否有被强行注入 tolerationSeconds: 6000 的“钉子户”。

Terminal window
kubectl get pods -n kube-system -o yaml | grep -E "name:|tolerationSeconds"

当等待期耗尽,或者你想跳过五分钟的“缓刑期”时使用的暴力手段。

7. 查看集群最近发生的“驱逐血案”

Section titled “7. 查看集群最近发生的“驱逐血案””

看看 API Server 是在几分几秒正式下达驱逐令的。

Terminal window
kubectl get events -A | grep -i Evict

8. 架构师的铁锤:超度“僵尸 Pod”

Section titled “8. 架构师的铁锤:超度“僵尸 Pod””

无需等待 5 分钟(300秒),瞬间抹除数据库记录,强制触发控制器在其他健康节点重建业务。

Terminal window
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0

最近更新: