节点 NotReady 怎么查
节点变成 NotReady 意味着它没有正常上报心跳,新 Pod 无法调度上去,已有负载可能被驱逐。排查思路是先看集群侧的条件与原因,再上节点看 kubelet、容器运行时与基础资源。常见的四类根因是 kubelet 停止、运行时异常、磁盘写满触发压力、节点网络不通导致心跳超时。
基本信息
| 第 1 步 | kubectl get nodes -o wide 看状态、角色与版本 |
|---|---|
| 第 2 步 | kubectl describe node 看 Conditions 中 Ready 的 Reason 与 Message |
| 第 3 步 | 节点上查 kubelet:systemctl status 与 journalctl -u kubelet |
| 第 4 步 | 查容器运行时状态,如 containerd 或 docker 服务是否正常 |
| 第 5 步 | 查基础资源:磁盘空间、内存、内核日志中的 IO 与 OOM 记录 |
典型使用场景
- 集群告警:监控提示节点不可用,需要快速判断影响范围
- Pod 集体异常:同一节点上的服务同时不稳定,怀疑节点侧问题
- 磁盘压力:节点因空间不足进入压力状态并开始驱逐 Pod
- 证书或时间问题:kubelet 与 API 通信失败导致心跳中断
- 升级维护:节点重启或运行时升级后状态未恢复
排查命令
排查命令
kubectl get nodes -o wide # 快速定位哪个节点异常
kubectl describe node node-1 | grep -A6 -i conditions # 看原因与最后心跳
ssh node-1 systemctl status kubelet --no-pager # kubelet 是否在跑
ssh node-1 journalctl -u kubelet -n 100 --no-pager # 关键报错在这里
ssh node-1 df -h /var/lib/containerd /var/lib/kubelet # 磁盘是否写满
ssh node-1 systemctl status containerd --no-pager # 运行时状态原因分类与判断
| 原因 | 判断依据 | 处置方向 |
|---|---|---|
| kubelet 停止 | 服务状态为 failed 或未运行 | 看日志定位原因后重启服务 |
| 运行时异常 | containerd 或其他运行时退出 | 修复运行时并确认镜像可用 |
| 磁盘压力 | 根分区或数据目录接近写满 | 清理空间,检查日志与镜像占用 |
| 网络不通 | 心跳超时,其他节点正常 | 检查节点网络、路由与安全组 |
| 证书过期 | kubelet 日志报证书或认证错误 | 轮换证书后重启服务 |
NotReady 的常见根因集中在四类:kubelet 挂了、运行时挂了、磁盘写满触发压力、节点网络不通导致心跳超时。describe 输出的 Message 通常已经指明了方向。
不要不看原因就直接重启 kubelet:磁盘写满、证书过期这类问题会在重启后反复出现,先定位根因再动手,否则只是延长故障周期。