排查定位
NotReady 是结论不是原因:它只说明 kubelet 的心跳或节点条件上报出问题了。适用平台是 Kubernetes。节点侧要看的层次依次是节点 Conditions(Ready、MemoryPressure、DiskPressure、PIDPressure)、kubelet 服务状态、kubelet 日志里的具体报错、以及底层依赖(容器运行时、网络、时钟、磁盘)。按这个顺序走,绝大多数 NotReady 都能在两三条命令内定位到方向。
基本信息
| 适用平台 | Kubernetes 节点(kubelet 与容器运行时) |
|---|---|
| 判定依据 | kubelet 定期上报 NodeStatus,超过阈值未上报则标记 NotReady |
| 常见伴随状态 | MemoryPressure、DiskPressure、PIDPressure、NetworkUnavailable |
| 影响 | 该节点上的 Pod 会被标记异常,受控制器管理的副本会在其他节点重建 |
典型使用场景
- 巡检发现节点掉线:先看 Conditions 定位是心跳问题还是资源压力问题
- 节点重启后起不来:核对 kubelet 与运行时服务是否随系统启动
- 证书到期引发集群告警:kubelet 客户端证书过期会直接导致 NotReady
- 磁盘写满导致不可调度:DiskPressure 会触发镜像与日志驱逐,需清理并核查阈值
- 维护窗口前确认节点健康,避免带病进入维护流程
排查命令(节点上执行)
排查命令(节点上执行)
kubectl describe node node1 | sed -n '/Conditions:/,/Addresses:/p' # 节点条件与原因
systemctl status kubelet --no-pager # kubelet 服务状态
journalctl -u kubelet -n 200 --no-pager | grep -i -E 'error|fail|timeout'
ss -lntp | grep -E '10250|10248' # kubelet 端口是否在听
systemctl status containerd --no-pager # 容器运行时状态
df -h /var/lib/kubelet /var/log # 磁盘水位
date # 时钟是否漂移常见线索
常见线索
connection refused to apiserver:网络策略/防火墙/控制面异常
certificate has expired:节点时钟或证书轮换问题
failed to run Kubelet / cgroup 报错:运行时或 cgroup 驱动不一致Condition 读法
| 条件 | 含义 | 处置方向 |
|---|---|---|
| Ready=False | kubelet 心跳异常或关键依赖不可用 | 看 kubelet 日志与运行时状态 |
| MemoryPressure=True | 节点内存吃紧 | 查高占用 Pod 与驱逐阈值 |
| DiskPressure=True | 可用磁盘低于阈值 | 清镜像、日志与临时文件 |
| PIDPressure=True | 进程数接近上限 | 排查进程泄漏与 limit 配置 |
重启 kubelet 前先看日志:反复重启会刷掉现场,先 journalctl 取证,把关键报错记下来再动手。
NotReady 期间该节点的 Pod 可能已被其他节点接管,节点恢复后要及时核对是否出现双实例写入共享存储的情况。