赛博工地巡检手册:污点与容忍度排查指令集
本手册用于在断电演练、网络分区或节点异常时,快速定位 Kubernetes 集群中的“调度排斥”与“非法滞留”问题。
🛡️ 节点污点 (Taints) 排查
Section titled “🛡️ 节点污点 (Taints) 排查”当发现大量 Pod 无法调度到某个节点(处于 Pending),或者正在被莫名其妙地驱逐时,首先检查节点大门是否被贴了“封条”。
1. 扫描全集群所有节点的污点状态
Section titled “1. 扫描全集群所有节点的污点状态”一行命令看清哪台机器被打上了什么标签,非常适合大盘巡检。
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints[*].key2. 深入侦测单台机器的完整污点细节
Section titled “2. 深入侦测单台机器的完整污点细节”当发现某台节点(如 k3s-master-03)异常时,查看它具体的逐客令类型(NoSchedule 还是 NoExecute)。
kubectl describe node k3s-master-03 | grep Taints3. 【高危】手动给节点打污点 (隔离节点)
Section titled “3. 【高危】手动给节点打污点 (隔离节点)”如果在维护物理机,不想让新的业务调度过来,可以手动贴封条:
# 语法:kubectl taint nodes <节点名> <键>=<值>:<效果>kubectl taint nodes k3s-master-03 maintenance=true:NoSchedule4. 手动撕掉节点的污点 (解除隔离)
Section titled “4. 手动撕掉节点的污点 (解除隔离)”节点修好后,把刚才打的污点去掉(注意末尾的减号 - 代表删除):
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)。
kubectl describe pod <pod-name> -n <namespace> | grep -A 10 Tolerations6. 找出整个 Namespace 下所有 Pod 的隐形容忍度
Section titled “6. 找出整个 Namespace 下所有 Pod 的隐形容忍度”以 YAML 格式输出并使用 grep 过滤,排查是否有被强行注入 tolerationSeconds: 6000 的“钉子户”。
kubectl get pods -n kube-system -o yaml | grep -E "name:|tolerationSeconds"🚨 驱逐与强制清理 (Eviction)
Section titled “🚨 驱逐与强制清理 (Eviction)”当等待期耗尽,或者你想跳过五分钟的“缓刑期”时使用的暴力手段。
7. 查看集群最近发生的“驱逐血案”
Section titled “7. 查看集群最近发生的“驱逐血案””看看 API Server 是在几分几秒正式下达驱逐令的。
kubectl get events -A | grep -i Evict8. 架构师的铁锤:超度“僵尸 Pod”
Section titled “8. 架构师的铁锤:超度“僵尸 Pod””无需等待 5 分钟(300秒),瞬间抹除数据库记录,强制触发控制器在其他健康节点重建业务。
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0