Kubernetes Node NotReady 排查¶
现象¶
kubectl get nodes显示节点状态为NotReady。- 节点上的 Pod 无法正常调度或大量驱逐。
- 监控告警提示 kubelet down、节点磁盘压力或网络不可达。
- 节点重启后长时间无法恢复 Ready。
快速判断¶
先确认节点条件、kubelet 状态和最近事件。
kubectl get nodes -o wide
kubectl describe node <node-name>
kubectl get events -A --sort-by=.lastTimestamp | tail -n 50
排查命令¶
# 在异常节点上检查 kubelet
systemctl status kubelet --no-pager
journalctl -u kubelet -n 200 --no-pager
# 检查容器运行时
systemctl status containerd --no-pager
crictl ps 2>/dev/null
# 检查磁盘、内存和 inode
df -h
df -i
free -m
# 检查节点网络
ip addr
ip route
ss -tulnp | grep -E '10250|10255'
# 查看 CNI 相关 Pod
kubectl get pod -A -o wide | grep <node-name>
kubectl get pod -n kube-system -o wide
常见原因¶
- kubelet 未运行或证书、配置异常。
- containerd、Docker 等容器运行时异常。
- 节点磁盘空间、inode 或内存不足。
- CNI 插件异常导致节点网络不可用。
- 节点到 apiserver 网络不通或时间不同步。
- 节点被手动 cordon、污点或云主机故障影响。
处理建议¶
- 先从
kubectl describe node的 Conditions 判断压力类型。 - kubelet 或运行时异常时,先保存日志再尝试重启服务。
- 磁盘压力优先清理明确可删除的镜像、日志和临时文件。
- 网络异常时检查 CNI Pod、路由、防火墙和安全组。
- 节点恢复后观察 Pod 是否自动拉起,并确认业务副本健康。
高危提醒¶
- 不要在未确认副本和业务影响前直接重启生产节点。
- 清理镜像和日志前确认不会删除业务数据卷。
- 执行
kubectl drain前确认 PodDisruptionBudget 和可用副本。