首页/云/云与容器速查/节点 NotReady 排查(kubelet/运行时/磁盘)

节点 NotReady 排查(kubelet/运行时/磁盘)

节点失联时新 Pod 无处调度、已有负载可能被驱逐:先看 Node 条件与 Reason,再上节点查 kubelet、容器运行时、磁盘与网络。

云与容器速查云更新于 2026-10-13

节点 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:磁盘写满、证书过期这类问题会在重启后反复出现,先定位根因再动手,否则只是延长故障周期。

易错点

  • 只盯 Pod 不看节点,Pod 集体漂移时根因其实在节点侧
  • 不查前因直接重启 kubelet,磁盘满或证书过期导致问题反复出现
  • 忽略磁盘压力阈值,节点进入压力状态后开始驱逐业务 Pod
  • 节点故障期间不做负载转移规划,长时间单副本运行在大盘上

数据来源与参考

  • Kubernetes Docs:Node Status
  • Kubernetes Docs:Troubleshooting Clusters

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌