心跳机制

在 k8s v1.13 之前,kubelet 启动协程定时上报状态。

参数 含义 默认间隔时间
--node-status-update-frequency 上报NodeStatus间隔时间 10s
--node-monitor-grace-period 判定Node是NotReady间隔时间 40s
--pod-eviction-timeout Node NotReady后驱逐Pod的时间间隔 5m

k8s v1.13 引入了 NodeLease,k8s v1.17 stable。在 kube-node-lease namespace 下,每个节点都有一个 Lease 对象。 NodeStatus 和 NodeLease 都记录节点的心跳信号,协同工作逻辑如下:

  1. kubelet 定期更新自己的lease对象,默认10秒。
  2. kubelet 定期(默认为10秒)计算一次NodeStatus,独立于上报流程;只有发生有意义的变化或者不上报持续时间超过了参数node-status-update-period(默认5m)时,kubelet才上报NodeStatus。

无论是 NodeStatus 对象还是 NodeLease 对象的更新,NodeController 都视为 kubelet 在上报心跳。NodeLease 对象比 NodeStatus 对象小很多,大幅降低了 NodeStatus 的更新频率,显著降低 etcd 存储压力