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 不再更新说明心跳链路中断;MemoryPressure、DiskPressure 和 PIDPressure 则指向具体资源。
登录节点验证
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
节点恢复后检查时间同步、内核日志和硬件错误,确认问题不会在重新调度后复发。