谈谈K8S Pod Eviction 机制
Pod Eviction 简介
Pod Eviction
是k8s一个特色功能,它在某些场景下应用,如节点NotReady、Node节点资源不足,把pod驱逐至其它Node节点。
从发起模块的角度,pod eviction 可以分为两类:
Kube-controller-manager: 周期性检查所有节点状态,当节点处于 NotReady 状态超过一段时间后,驱逐该节点上所有 pod。
Kubelet: 周期性检查本节点资源,当资源不足时,按照优先级驱逐部分 pod。
Kube-controller-manger 触发的驱逐
Kube-controller-manager
周期性检查节点状态,每当节点状态为 NotReady,并且超出 podEvictionTimeout 时间后,就把该节点上的 pod 全部驱逐到其它节点,其中具体驱逐速度还受驱逐速度参数,集群大小等的影响。提供了以下启动参数控制eviction。
pod-eviction-timeout
:即当节点宕机该事件间隔后,开始eviction机制,驱赶宕机节点上的Pod,默认为5minnode-eviction-rate
: 驱赶速率,即驱赶Node的速率,由令牌桶流控算法实现,默认为0.1,即每秒驱赶0.1个节点,注意这里不是驱赶Pod的速率,而是驱赶节点的速率。相当于每隔10s,清空一个节点secondary-node-eviction-rate
: 二级驱赶速率,当集群中宕机节点过多时,相应的驱赶速率也降低,默认为0.01unhealthy-zone-threshold
:不健康zone阈值,会影响什么时候开启二级驱赶速率,默认为0.55,即当该zone中节点宕机数目超过55%,而认为该zone不健康large-cluster-size-threshold
:大集群法制,当该zone的节点多余该阈值时,则认为该zone是一个大集群。大集群节点宕机数目超过55%时,则将驱赶速率降为0.0.1,假如是小集群,则将速率直接降为0
Kubelet 触发的驱逐
在讲 Kubelet 驱逐之前,首先得知道 kubelet node 预留,具体介绍,请参考我上篇文章 Kubernetes Node资源预留。
Kubelet 周期性检查本节点的内存和磁盘资源,当可用资源低于阈值时,则按照优先级驱逐 pod,具体检查的资源如下:
memory.available
nodefs.available
nodefs.inodesFree
imagefs.available
imagefs.inodesFree
kubelet 只支持两种文件系统分区:
nodefs
文件系统,kubelet 将其用于卷和守护程序日志等。imagefs
文件系统,容器运行时用于保存镜像和容器可写层,imagefs 是可选的参数。
以内存资源为例,当内存资源低于阈值时,驱逐的优先级大体为 BestEffort > Burstable > Guaranteed
,具体的顺序可能因实际使用量有所调整。当发生驱逐时,kubelet 支持 soft
和 hard
两种模式,soft
模式表示缓期一段时间后驱逐,hard
模式表示立刻驱逐。
Kubelet 软驱逐阈值
软驱逐阈值
使用一对由驱逐阈值和管理员必须指定的宽限期组成的配置对。在超过宽限期前,kubelet不会采取任何动作回收和驱逐信号关联的资源。如果没有提供宽限期,kubelet启动时将报错。
此外,如果达到了软驱逐阈值,操作员可以指定从节点驱逐 pod 时,在宽限期内允许结束的 pod 的最大数量。如果指定了 pod.Spec.TerminationGracePeriodSeconds 值,kubelet将使用它和宽限期二者中较小的一个。如果没有指定,kubelet将立即终止 pod,而不会优雅结束它们。
软驱逐阈值的配置支持下列标记:
eviction-soft
描述了驱逐阈值的集合(例如 memory.available<1.5Gi),如果在宽限期之外满足条件将触发 pod 驱逐。eviction-soft-grace-period
描述了驱逐宽限期的集合(例如 memory.available=1m30s),对应于在驱逐 pod 前软驱逐阈值应该被控制的时长。eviction-max-pod-grace-period
描述了当满足软驱逐阈值并终止 pod 时允许的最大宽限期值(秒数)。
Kubelet 硬驱逐阈值
硬驱逐阈值没有宽限期,一旦触发,kubelet将立即采取行动回收关联的短缺资源。如果满足硬驱逐阈值,kubelet将立即结束 pod 而不是优雅终止。
硬驱逐阈值的配置支持下列标记:
eviction-hard
描述了驱逐阈值的集合(例如 memory.available<1Gi),如果满足条件将触发 pod 驱逐。
对上篇 Kubernetes Node资源预留 参数解释
--system-reserved=memory=3Gi,storage=5Gi # 设置预留系统服务的资源
--eviction-hard=memory.available<1Gi,nodefs.available<10Gi,imagefs.available<15Gi # 硬驱逐阈值,描述了驱逐阈值的集合,如果满足条件将触发 pod 驱逐
--eviction-soft=memory.available<1.5Gi,nodefs.available<15Gi,imagefs.available<20Gi # 软驱逐阈值,描述了驱逐阈值的集合,如果在宽限期之外满足条件将触发 pod 驱逐
--eviction-soft-grace-period=memory.available=2m,nodefs.available=2m,imagefs.available=2m # 软驱逐阈值,描述了驱逐宽限期的集合,对应用在驱逐 pod 前软驱逐阈值应该被控制的时长
--eviction-max-pod-grace-period=30 # 描述了当满足软驱逐阈值并终止 pod 时允许的最大宽限期值(秒数)
--eviction-minimum-reclaim=memory.available=200Mi,nodefs.available=5Gi,imagefs.available=5Gi # 最小驱逐,默认值为 0
总结
对于 kubelet 触发的驱逐,往往是资源不足导致,它优先驱逐 BestEffort 类型的容器,这些容器多为离线批处理类业务,对可靠性要求低。驱逐后释放资源,减缓节点压力,弃卒保帅,保护了该节点的其它容器。无论是从其设计出发,还是实际使用情况,该特性非常 nice。
对于由 kube-controller-manager 触发的驱逐,效果需要商榷。正常情况下,计算节点周期上报心跳给 master,如果心跳超时,则认为计算节点 NotReady,当 NotReady 状态达到一定时间后,kube-controller-manager 发起驱逐。配置参数要按集群规模合理设置。
参考链接
https://kubernetes.io/zh/docs/tasks/administer-cluster/out-of-resource/
http://wsfdl.com/kubernetes/2018/05/15/node_eviction.html
https://blog.csdn.net/redenval/article/details/84237654
往期精彩文章
Kubernetes Node资源预留
PrometheusAlert 多渠道告警通知神器
Etcd v3备份与恢复
Docker 必修课程 Dockerfile
Nginx 配置生成神器
k8s 蓝绿部署之 Service Label
您的关注是小站的动力
欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native
扫码『加群』交流技术
谈谈K8S Pod Eviction 机制相关推荐
- k8s 驱逐eviction机制源码分析
原理部分 1. 驱逐概念介绍 kubelet会定期监控node的内存,磁盘,文件系统等资源,当达到指定的阈值后,就会先尝试回收node级别的资源,比如当磁盘资源不足时会删除不同的image,如果仍然在 ...
- Kubernetes Pod Eviction 简介
谈谈K8S Pod Eviction 机制_YP小站的博客-CSDN博客Pod Eviction 简介Pod Eviction是k8s一个特色功能,它在某些场景下应用,如节点NotReady.Node ...
- k8s的list-watch机制和 pod调度约束
文章目录 一: k8s的list-watch 机制 1.1 k8s通过list-watch 机制进行每个组件的写作 1.2 Pod 的典型启动过程 1.3 调度过程 1.3.1 预算策略(predic ...
- 【kubernetes/k8s源码分析】eviction机制原理以及源码解析
kubernetes v1.12.1 What? kubelet 驱赶的是节点上的某些 Pod,驱赶哪些 Pod与 Qos 机制有关(1.8),1.9 以后的版本请看下文分解 只有当节点内存和磁盘资源 ...
- 理解 K8s 资源更新机制,从一个 OpenKruise 用户疑问开始
作者 | 酒祝 阿里云技术专家 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment / StatefulSet 等 ...
- 从OpenKruise用户疑问开始理解K8s资源更新机制
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kuberne ...
- 带你玩转kubernetes-k8s(第61篇-Kubernetes之资源紧缺时的Pod驱逐机制)
资源紧缺时的Pod驱逐机制 如何在系统硬件资源紧缺的情况下保证Node的稳定性,是kubelet需要解决的一个重要问题.尤其对于内存和磁盘这种不可压缩的资源,紧缺就意味着不稳定.下面对驱逐的策略.信号 ...
- k8s pod基础概念
k8s pod基础概念 Pod基础概念: Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象.一个Pod代表着集群中运行的一个进程.kubernetes中其他大 ...
- 记一次k8s pod频繁重启的优化之旅
1.背景 最近有运维反馈某个微服务频繁重启,客户映像特别不好,需要我们尽快看一下. 听他说完我立马到监控平台去看这个服务的运行情况,确实重启了很多次.对于技术人员来说,这既是压力也是动力,大多数时候我 ...
最新文章
- roku能不能安装软件_如何阻止假期更改Roku主题
- 播撒汗水,收获希望!
- 企业即时通讯最可见的价值是效率和成本
- 运用计算机计算电力系统潮流分布时,电力系统【第四章:复杂电力系统潮流分布的计算机算法】...
- FFmpeg中AVFrame中width与linesize的关系
- 做了n年程序猿,才知道电脑是这样工作的
- 搭建FTP服务之pure-ftpd
- NV21 旋转+转为NV12
- 新能源汽车前景广袤但痛点多多,大圆柱电池能否提供最优解?
- uc极度精简版_UC浏览器安卓版-UC浏览器(UCBrowser)12.0.4.987 去广告精简版-东坡下载...
- Postman启动慢一直加载解决方案
- 一种点到特定高维平面的距离的优化算法
- android路由器,Android工程师面试该怎么准备?年薪50W
- 毕业即月薪上万,但这才是悲催人生的开始
- 自动驾驶分级 - 练习测验
- OSINT 和 15 大开源情报工具
- 解决pygame中按键连续按下的问题
- BGP的路由优选规则
- 鸿蒙系统可以跟ios媲美吗,国产系统有盼头了?任正非说不需要两三年,鸿蒙就能和iOS媲美...
- hdcp key校验流程
热门文章
- android 延时拍照,手机如何延时拍摄 手机延时拍摄技巧有哪些
- spring MVC从零开始
- matlab离散系统pid控制系统,离散系统的数字PID控制仿真
- 遍历字符串str1的所有非空子串
- iOS开发-沙盒(sandbox)机制
- Maximum Noise Fraction(MNF)算法理解
- flash 火狐总是崩溃_火狐浏览器提示插件Adobe Flash已崩溃的解决方法
- 如何帮助公司设计一个优秀的品牌标志?
- Python3 装饰器进行log日志输出
- 论文解析[10] Contextual Transformer Networks for Visual Recognition