事情本身不复杂,线索都在日志里。集群里某个节点状态变成未就绪,上面的 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 重新调度成功,压力条件消失。
提醒一点。磁盘压力最常见,镜像和日志把节点盘写满就会触发;节点盘要单独监控容量,别和业务数据盘混用,否则一次拉取镜像就能把节点拖垮。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。