首页/云/Kubernetes 速查/节点心跳与租约(Lease)
集群运维与排障54 条

节点心跳与租约(Lease)

节点健康由 Lease 心跳维持:kubelet 周期性续约,控制面在宽限期内未见续约才标记 NotReady,避免把网络抖动当宕机。

Kubernetes 速查云更新于 2026-10-13

节点心跳靠租约维持

在较新的实现里,节点健康由 Lease 对象维持:kubelet 以较短间隔周期性续约,控制面只有在宽限期内没看到续约时,才把节点标记为 NotReady。这样设计是为了避免把一次网络抖动或控制面忙碌当成节点宕机,从而误触发大规模重新调度。租约对象存放在 kube-node-lease 命名空间,排查节点状态来回抖动时,先看续约时间是否正常。

基本信息

适用平台启用节点租约特性的集群,较新版本默认开启
对象位置kube-node-lease 命名空间,每个节点一个 Lease 对象
关键字段renewTime、leaseDurationSeconds、acquireTime
心跳间隔kubelet 侧可调,常见默认在十秒量级
宽限期由控制面参数控制,常见默认在数十秒量级

典型使用场景

  • 节点状态抖动排查:区分短暂续约中断与真实失联
  • 大规模同时 NotReady:判断是控制面压力还是网络分区
  • 维护窗口评估:确认节点是否真已下线再执行操作
  • 参数调优:按集群规模与网络质量调整心跳与宽限
  • 告警降噪:把亚分钟级抖动与真实故障在监控上分开

查看租约

查看租约
kubectl get leases -n kube-node-lease
kubectl get lease node1 -n kube-node-lease -o yaml | grep -A2 renewTime
kubectl get lease node1 -n kube-node-lease -o jsonpath='{.spec.renewTime}{"\n"}'
date -u                              # 与本机时间对照,判断续约是否新鲜
kubectl get node node1 -o jsonpath='{.status.conditions[?(@.type=="Ready")]}'

常见现象与含义

现象含义处理方向
亚分钟级 NotReady 抖动续约短暂中断,可能来自负载或网络先看租约与网络,再决定是否干预
NotReady 持续kubelet 未能续约查 kubelet 日志与节点资源
租约正常但状态异常其他健康检查失败查看节点状态条件详情
多节点同时 NotReady控制面或网络层问题查控制面负载与 apiserver 连通性
节点状态的判定逻辑是「宽限期过后仍未续约」,因此短暂抖动后自动恢复属于设计预期,不必立即人工介入,先观察再动作往往更稳。
调整心跳间隔与宽限期会改变故障判定速度:调得快会放大误判,调得慢会拉长真实故障的发现时间,规模大或网络抖动明显的集群要整体权衡。

易错点

  • 把亚分钟级 NotReady 抖动当成故障处理:重启 kubelet 或驱逐 Pod 反而扩大影响面
  • 宽限期设得过短:网络抖动即触发大规模重新调度,出现雪崩式重建
  • 只看节点状态不看续约时间:无法区分真实失联与判定延迟,动作容易做早或做晚
  • 忽略控制面负载:apiserver 压力大时续约写入变慢,节点状态随之抖动,问题根源不在节点

数据来源与参考

  • Kubernetes 官方文档 · 节点心跳与 Lease
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌