说明
每个节点上的 kubelet 需要定时向 apiserver 上报当前节点状态,如果两者间网络异常导致心跳终端,kube-controller-manager 中的 NodeController 会将该节点标记为 Unknown 或 Unhealthy,持续一段时间异常状态后 kube-controller-manager 会将该节点上的所有 pod 驱逐(1.24 版本后驱逐通过 taint toleration 实现)。
为了防止发生大面积 pod 驱逐,需要修改 kube-controller-manager 的以下参数:
● --pod-eviction-timeout duration The grace period for deleting pods on failed nodes. (default 5m0s )
● --node-monitor-grace-period duration Amount of time which we allow running Node to be unresponsive before marking it unhealthy. Must be N times more than kubelet's nodeStatusUpdateFrequency, where N means number of retries allowed for kubelet to post node status. (default 40s)
修改方式
编辑所有管理节点的 /etc/kubernetes/manifests/kube-controller-manager.yaml 文件,在 spec.containers.command 增加如下命令行参数:
csharp
- --pod-eviction-timeout=180m
- --node-monitor-grace-period=180m
重启进程,或者移动配置文件,如果没有变化重启kubelet