节点NotReady后容器驱逐时间调整方式
一、简介
早期k8s版本中,Kubernetes Controller Manager 有一些相关参数,用于控制节点监控和 Pod 驱逐的行为。
- --node-monitor-grace-period=40s(节点失联后等待多久才标记为不健康)
- --node-monitor-period=30s(Controller Manager 检查节点状态的频率)
- --pod-eviction-timeout=5m0s(节点标记为不健康后,等待多久才开始驱逐 Pod)
但是在k8s 1.20版本后,节点失联后 Pod 的驱逐逻辑已完全由 基于污点的驱逐 (Taint Based Evictions) 机制接管。完全废弃了--pod-eviction-timeout参数。
参考官方链接:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/

接下来,我们测试一下,看看是否有效。
二、验证
2.1 先创建一个测试用例

现在可以看到,默认的容忍度时间是300秒。
2.2 修改kube-apiserver的启动参数
vim /etc/kubernetes/manifests/kube-apiserver.yaml #添加以下启动参数 - --default-not-ready-toleration-seconds=60 - --default-unreachable-toleration-seconds=60

#重启kube-apsierver容器
mv kube-apiserver.yaml /tmp/
mv /tmp/kube-apiserver.yaml .
#检查容器是否正常启动
docker ps|grep apiserver
docker logs ${docker_id}
kubectl get pod -n kube-system -o wide|grep kube-apiserver
2.3 验证驱逐时间
修改完kube-apiserver的启动参数后,只对新增容器有效,存量容器需要重启后生效:


接下来咱们模拟node节点故障,触发节点驱逐:



结果符合预期(可能有微小误差):
时间 | 动作 |
10:34:20 | 节点关机 |
10:35:11 | 节点NotReady |
10:36:10 | 驱逐容器 |
三、扩展
有关于pod驱逐的效率可以参考kube-controller-manager的启动参数,官方链接:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/
相关参数:
参数 | 含义 |
--large-cluster-size-threshold int32 默认值:50 | node-lifecycle-controller 在执行 Pod 驱逐操作逻辑时, 基于此标志所设置的节点个数阈值来判断所在集群是否为大规模集群。 当集群规模小于等于此规模时, --secondary-node-eviction-rate 会被隐式重设为 0。 注意:如果节点位于多个区域中,则此阈值将被每个区域视为区域节点大小阈值,以独立确定节点驱逐率。 |
--node-eviction-rate float 默认值:0.1 | 当某区域健康时,在节点故障的情况下每秒删除 Pods 的节点数。 请参阅 --unhealthy-zone-threshold 以了解“健康”的判定标准。 这里的区域(zone)在集群并不跨多个区域时指的是整个集群。 |
--secondary-node-eviction-rate float32 默认值:0.01 | 当一个区域不健康造成节点失效时,每秒钟从此标志所给的节点上删除 Pod 的节点个数。 参见 --unhealthy-zone-threshold 以了解“健康与否”的判定标准。 在只有一个区域的集群中,区域指的是整个集群。如果集群规模小于 --large-cluster-size-threshold 所设置的节点个数时, 此值被隐式地重设为 0。 |
四、总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Rainbond的ServiceMesh架构组件端口冲突处理解决
这篇文章主要大家介绍了Rainbond ServiceMesh架构组件端口冲突处理方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-04-04


最新评论