心跳机制
在 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 都记录节点的心跳信号,协同工作逻辑如下:
- kubelet 定期更新自己的lease对象,默认10秒。
- kubelet 定期(默认为10秒)计算一次NodeStatus,独立于上报流程;只有发生有意义的变化或者不上报持续时间超过了参数node-status-update-period(默认5m)时,kubelet才上报NodeStatus。
无论是 NodeStatus 对象还是 NodeLease 对象的更新,NodeController 都视为 kubelet 在上报心跳。NodeLease 对象比 NodeStatus 对象小很多,大幅降低了 NodeStatus 的更新频率,显著降低 etcd 存储压力