直接回答:NotReady 的含义很窄:node-controller 在租约期内(默认 40s 上报、约 5 分钟判定)没收到 kubelet 的心跳。排查从心跳链路两端入手:节点侧 kubelet 是否存活且能上报,网络侧 kubelet 到 apiserver 是否可达。命令路径:kubectl describe node 看 Conditions 与 Events → 上节点 systemctl status kubelet 加 journalctl -u kubelet → 再查网络与系统资源。
展开解析:高频原因按经验排序:一是磁盘压力(nodefs/imagefs 超阈值触发 DiskPressure,镜像垃圾占满最常见,kubelet 驱逐失败进一步恶化);二是内存压力触发 OOM 杀掉 kubelet 或容器运行时;三是 PIDs 耗尽(某容器 fork 炸弹);四是容器运行时(containerd/dockerd)挂了,kubelet 的 CRI 健康检查失败;五是网络分区或云厂商底层故障;六是节点证书过期(kubelet 证书轮换失败)。处置动作分轻重:轻的开 drain 把 Pod 驱逐走再修;云厂商托管节点池直接替换节点通常比修更快。预防侧:给系统组件(kubelet、containerd)配 system-reserved 资源、镜像 GC 阈值调积极、节点 exporter 监控磁盘与 PID 用量并对 NotReady 持续时间告警。注意 Ready=False 与 Ready=Unknown 的区别:前者是 kubelet 明确上报不健康,后者是心跳丢失,定位方向不同。
追问方向:NotReady 后 Pod 多久被驱逐(tolerationSeconds)?如何预防磁盘被打满?
(约 490 字)