节点NotReady后容器驱逐时间调整方式

 更新时间:2026年01月16日 08:54:03   作者:CN-FuWei  
文章介绍了Kubernetes早期版本中用于节点监控和Pod驱逐的参数,以及在k8s1.20版本后这些参数的废弃情况,通过测试,验证了新的TaintBasedEvictions机制的有效性,此外,还介绍了与Pod驱逐效率相关的kube-controller-manager参数,包括大规模集群的处理逻辑

一、简介

早期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。

四、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Kubernetes(K8S)中强制删除命名空间的实现方式

    Kubernetes(K8S)中强制删除命名空间的实现方式

    本文介绍了在Kubernetes中删除处于Terminating状态的命名空间mysql-operator的步骤,包括检查并清理残留资源、强制删除命名空间等方法
    2026-01-01
  • K8S容器OOM killed排查过程

    K8S容器OOM killed排查过程

    这篇文章主要介绍了K8S容器OOM killed排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Rainbond配置组件自动构建部署官方文档讲解

    Rainbond配置组件自动构建部署官方文档讲解

    这篇文章主要为大家介绍了Rainbond配置组件自动构建部署官方文档讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 在K8S中使用ArgoCD做持续部署的方案

    在K8S中使用ArgoCD做持续部署的方案

    ArgoCD是一个基于Kubernetes的GitOps持续交付工具,应用的部署和更新都可以在Git仓库上同步实现,并自带一个可视化界面,本文介绍如何使用Git+Argocd方式来实现在k8s中部署和更新应用服务,感兴趣的朋友一起看看吧
    2025-03-03
  • 使用kubeadm部署多节点集群

    使用kubeadm部署多节点集群

    这篇文章介绍了使用kubeadm部署多节点集群的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • k8s使用rbd作为存储的操作方法

    k8s使用rbd作为存储的操作方法

    这篇文章主要介绍了k8s使用rbd作为存储的操作方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • k8s中实现mysql主备过程详解

    k8s中实现mysql主备过程详解

    文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致性与高可用性
    2025-09-09
  • K8s Token过期问题及解决(Kubeadm)

    K8s Token过期问题及解决(Kubeadm)

    本文介绍了Kubernetes中Token的生成、管理和使用方法,包括生成默认24小时Token和永久有效Token,以及查看、删除Token和获取CA证书Hash值,此外,还提供了Node节点加入K8s集群的完整命令
    2026-01-01
  • 云原生要素配置分离ConfigMap创建方式

    云原生要素配置分离ConfigMap创建方式

    这篇文章主要为大家介绍了云原生要素配置分离ConfigMap以及多种创建方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • k8s pod如何使用sriov

    k8s pod如何使用sriov

    这篇文章主要介绍了k8s pod如何使用sriov问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论