直接回答:机制先行:kubelet 默认每 10s 上报 Lease(node lease),控制面 40s 收不到就标记 NotReady,随后 pod-eviction 计时(默认 5 分钟)到期驱逐该节点 Pod。排查顺序:kubectl describe node 看 Conditions 的最后一条原因(Ready=False 的 message 直接给线索)→ 上节点看 kubelet 状态(systemctl status kubelet + journalctl -u kubelet)→ 查节点资源(磁盘、内存、PID 压力)。

展开解析:常见根因按频率:资源压力——DiskPressure(镜像垃圾塞满磁盘,containerd 的 GC 阈值与节点磁盘规划)、MemoryPressure、PIDPressure,describe node 的 Conditions 会标,磁盘场景先清旧镜像与日志;kubelet 挂了——证书过期(kubeadm 集群一年证书的经典坑,kubeadm certs check-expiration)、配置错误、依赖的 container runtime(containerd)先挂;网络分区——节点与 API server 不通(云厂商安全组、路由变更),节点上 curl API server 地址验证;CNI 故障——网络插件 Pod 崩溃导致 NetworkUnavailable;云厂商特有问题——宿主机被回收但 VM 对象残留。恢复动作要分场景:临时分区自愈后 kubelet 自动重报;kubelet 修复后节点恢复;磁盘压力清完自动解除。驱逐副作用要预判:NotReady 5 分钟后 Pod 被标记驱逐重建,有状态服务(本地盘、长连接)受冲击——生产调优 eviction 超时与 PDB 保护。监控建议:node Ready 条件、kubelet 运行状态、证书剩余天数挂告警,NotReady 在集群视角是少数必须秒级响应的事件。大规模集群注意 Lease 对象的心跳风暴已优化,不用早期版本的 nodeStatus 大对象问题。

追问方向:Lease 对象相对 node status 更新优化了什么?节点自愈(cluster autoscaler 替换)如何衔接?

(约 500 字)