Kubernetes Node NotReady:从心跳到运行时逐层排查

检查 Node Condition、Lease、kubelet、容器运行时和节点资源,快速定位 NotReady 原因。

文章目录 · 3 节

Node NotReady 只是控制面观察到的结果。真正原因可能是 kubelet 停止上报、运行时卡死、磁盘压力、网络分区或节点时钟异常。

读取 Condition 与事件

kubectl describe node <NODE>
kubectl get lease -n kube-node-lease <NODE> -o yaml
kubectl get events --field-selector involvedObject.name=<NODE> --sort-by=.lastTimestamp

Lease 不再更新说明心跳链路中断;MemoryPressureDiskPressurePIDPressure 则指向具体资源。

登录节点验证

systemctl status kubelet containerd
journalctl -u kubelet --since '-30m'
crictl info
df -h && df -i

检查 kubelet 能否访问 API Server,容器运行时 socket 是否响应,以及证书是否过期。不要在证据不足时先删除节点对象。

控制影响

确认节点不可恢复时先 cordon,再评估 drain。对本地存储、DaemonSet 和 PDB 做检查,避免驱逐动作扩大影响。

kubectl cordon <NODE>
kubectl drain <NODE> --ignore-daemonsets --delete-emptydir-data

节点恢复后检查时间同步、内核日志和硬件错误,确认问题不会在重新调度后复发。