Kubernetes Pod Eviction 简介
谈谈K8S Pod Eviction 机制_YP小站的博客-CSDN博客Pod Eviction 简介Pod Eviction是k8s一个特色功能,它在某些场景下应用,如节点NotReady、Node节点资源不足,把pod驱逐至其它Node节点。从发起模块...https://blog.csdn.net/qq_24794401/article/details/106626042
Controller Manager
很多场景都需要多个控制器协同工作,比如某个节点宕机,kubelet 将会停止汇报状态到Node 对象。NodeLifecycle 控制器会发现节点状态没有按时更新,超过一段时间(可通过参数--pod-eviction-timeout 来指定)后,它将驱逐节点上的Pod。
如果这个Pod 属于某个Deployment 对象,那么Deployment 对象所需的副本数量将减少,这时Deployment 控制器将会补齐Pod 副本数量,替换掉因为宕机而被删除的Pod。
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,默认为5min
- node-eviction-rate: 驱赶速率,即驱赶Node的速率,由令牌桶流控算法实现,默认为0.1,即每秒驱赶0.1个节点,注意这里不是驱赶Pod的速率,而是驱赶节点的速率。相当于每隔10s,清空一个节点
- secondary-node-eviction-rate: 二级驱赶速率,当集群中宕机节点过多时,相应的驱赶速率也降低,默认为0.01
- unhealthy-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 Pod Eviction 简介相关推荐
- 谈谈K8S Pod Eviction 机制
Pod Eviction 简介 Pod Eviction 是k8s一个特色功能,它在某些场景下应用,如节点NotReady.Node节点资源不足,把pod驱逐至其它Node节点. 从发起模块的角度,p ...
- 记一次 Kubernetes 集群 Pod Eviction 问题排查过程
声明: 本博客欢迎转发,但请保留原作者信息! 新浪微博:@Lingxian_kong; 微信公众号:飞翔的尘埃; 内容系本人学习.研究和总结,如有雷同,实属荣幸! 现象:一个普通的 k8s 集群,3 ...
- Kubernetes Pod 所需要掌握的一切
文章目录 pod 简介 kubectl apply 创建 pod 创建一个 nginx pod 创建一个 执行命令的 pod kubectl create 创建 pod kubectl run 创建 ...
- kubernetes pod podsecurityPolicies(PSP)
kubernetes pod podsecurityPolicies tags: 资源对象,pod 文章目录 kubernetes pod podsecurityPolicies 1. 简介 2. A ...
- 深度解析Kubernetes Pod Disruption Budgets(PDB)
2019独角兽企业重金招聘Python工程师标准>>> Author: xidianwangtao@gmail.com PDB的应用场景 大概在Kubernetes 1.4新增了Po ...
- 在Kubernetes Pod中使用Service Account访问API Server
2019独角兽企业重金招聘Python工程师标准>>> 在Kubernetes Pod中使用Service Account访问API Server 博客分类: Kubernetes ...
- 如何查看Kubernetes pod yaml文件的在线语法帮助
我们在撰写Kubernetes pod的yaml文件时,一定都为Kubernetes yaml文件复杂的语法苦恼过. 其实Kubernetes是提供了很好的在线(online)文档的. 命令: kub ...
- 容器编排技术 -- Kubernetes Pod 优先级和抢占
容器编排技术 -- Kubernetes Pod 优先级和抢占 1 怎么样使用优先级和抢占 2 启用优先级和抢占 3 PriorityClass 3.1 PriorityClass 示例 4 Pod ...
- 容器编排技术 -- Kubernetes Pod概述
容器编排技术 -- Kubernetes Pod概述 1 了解Pod 1.1 Pods如何管理多个容器 1.1.1 网络 1.1.2 存储 2 使用Pod 2.1 Pod和Controller 3 P ...
最新文章
- 【MATLAB教程案例2】GPS信号捕获算法的案例分析
- URLCache探索
- NeurIPS 2021 | 图像损坏场景下行人重识别新基准
- 【ElasticSearch】ElasticSearch immense term错误
- Vue 项目创建并发布
- 从入门到入土:[linux实践]-pam|编写基于libpam的用户认证程序|编写基于PAM认证的应用程序|详细说明|实验步骤|实验截图
- iOS开发中常用的宏
- Python实现快速大文件比较代码解析
- 面试常见的26个问题
- 通过驱动断链来隐藏驱动
- R语言入门——不掉包实现FNN(单层感知机)
- 【QTdesigner】课时37.按钮控件(QPushButton)【pyqt5+QTdesigner模式】
- opensips代码分析
- 耳机断线了怎么修 耳机头部断线了如何修4线修复的方法
- JMockit Mock 私有方法和私有属性
- react 动态修改路由_升级到 React Router 4 并实现动态加载和模块热替换
- 计算机毕业设计之java+javaweb的充电桩综合管理系统
- 神雕侠侣手游服务器维修到多久,神雕侠侣手游常见问题_神雕侠侣手游问答_疑难解答_九游手机游戏...
- 玩过这些经典单机游戏_就说明你已经老了
- 作为一名程序员,我都在电脑上都装过哪些 Chrome 插件?
热门文章
- 82.【LibraryManger】
- 神奇的递归!一文读懂函数递归(python实现)
- h5 微信支付 php,用h5做出微信的支付过程的实现步骤
- 从RTP包中分析OPUS码流
- 安卓TV开发(九) Android模拟事件 遥控器变身成鼠标来操作TV
- 曾做erp开发工程师,谈下自己的经验
- moto edge 如何开启usb调试
- CodeForces-1016C Vasya And The Mushrooms(模拟+思维+前缀和的前缀和) 解题报告 Apare_xzc
- JavaScript实现鼠标点击监听---弹出社会主义核心价值观(面向对象小练习)
- Steam游戏服务器配置选择 IP