事情本身不复杂,线索都在日志里。集群里某个节点状态变成未就绪,上面的 Pod 被迁移,节点本身还能登录,容器运行时看起来也正常。

真正麻烦的地方在于,几个原因的现象几乎一样。kubelet 与容器运行时通信异常。少数情况下是节点磁盘压力或者内存压力触发驱逐。

少数情况下是网络插件异常导致节点心跳丢失。

动手时先看节点状态和压力条件

kubectl describe node 节点名 | grep -A5 Conditions

随后看节点上的服务日志

journalctl -u kubelet -n 100 --no-pager

再往下确认容器运行时状态

systemctl status containerd

等前面都确认过,再确认磁盘与内存水位

df -h /var/lib/kubelet && free -h

恢复的判定其实很直接。节点恢复为就绪状态,Pod 重新调度成功,压力条件消失。

提醒一点。磁盘压力最常见,镜像和日志把节点盘写满就会触发;节点盘要单独监控容量,别和业务数据盘混用,否则一次拉取镜像就能把节点拖垮。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189