kubernetes之node资源紧缺时pod驱逐机制
在系统硬件资源紧缺的情况下保证node的稳定性, 是kubelet需要解决的一个重要问题
1.驱逐策略
kubelet持续监控主机的资源使用情况, 一旦出现资源紧缺的迹象, kubelet就会主动终止一个或多个pod的运行,以回收紧缺的资源
2.驱逐信号
kubelet根据信号作为决策依据来触发驱逐行为
- memory.available
- nodefs.available
- nodefs.inodesFree
- imagefs.available
- imagefs.inodesFree
memory : 内存,不是根据系统的free 收集,取值来自于cgroupfs,free -m命令不支持在容器中工作
nodefs: 指node自身的存储,存储daemon的运行日志等,一般指root分区/;
imagefs: 指docker daemon用于存储image和容器可写层(writable layer)的磁盘;
3.驱逐阀值:一旦超过阀值, 就会触发kubelet进行资源回收
例:memory.available<10% 可用内存不足10%时进行驱逐
软驱逐: 当系统资源消耗达到软阀值, 有一段的宽限期, kubelet不会触发驱逐动作,
--eviction-soft=memory.available<1.5GiB 驱逐阀值
-eviction-soft-grace-period=memory.available=1m30s 驱逐宽限期
硬驱逐: 没有宽限期, 达到硬阀值, 直接触发对pod的驱逐操作
--eviction-hard=memory.available<1.5GiB
4.驱逐监控频率
--housekeeping-interval 定义一个时间间隔, kubelet每隔一个时间间隔就会对驱逐阀值进行评估
5.节点资源紧张情况下的kubelet行为
node节点回收资源: 磁盘有压力的情况下回收资源方式:删除死掉的pod, 删除无用的镜像
如果通过删除上面的方式无法回收资源, 那么会进行驱逐用户的pod策略: 根据pod服务的服务质量qos(besteffort, burstable, guaranteed)
6.节点资源紧张情况下的系统行为
调度器行为: kubelet会向master报告这个情况, 调度器不再继续向节点调度新的pod
node的oom行为: kubelet根据pod的qos为每个容器设置了一个oom_score_adj 值, 得分最高的容器会被驱逐, 与pod驱逐不同, 一个pod容器被oom杀掉, 可能被kubelet根据restartpolicy重启
kubelet无法区分daemonset类型的pod, 所以不建议把daemonset的pod设置成besteffort类型
7.驱逐策略建议
保留10%的内存给系统守护进程(内核, kubelet, kube-proxy, flanneld) 防止进程资源不够
内存使用率达到95%立即进行pod驱逐防止系统的oom
以节点内存容量10G为例子
--eviction-hard=memory.available<500Mi
--system-reserved=memroy=1.5Gi
8.主动驱逐保护:PodDisruptionBudget资源对象
当节点处于维护状态(kubectl drain),会马上驱逐节点上的pod, 需求是系统应该保证应用以不低于一定数量的pod保障服务的正常运行, 系统将确保每终止一个pod后, 一定会在另一台健康的node上启动新的pod, 再继续终止下一个pod
kubernetes之node资源紧缺时pod驱逐机制的更多相关文章
- kubernetes之node 宕机,pod驱离问题解决
背景: 当node宕机时,希望该node节点上的pod能够快速疏散到其他节点,并提供服务.测试发现,要等待5分钟,上面的pod才会疏散. 网上介绍通过修改 /etc/kubernetes/manife ...
- 十六, k8s集群资源需求和限制, 以及pod驱逐策略。
目录 容器的资源需求和资源限制 QoS Classes分类 Guaranteed Burstable Best-Effort kubernetes之node资源紧缺时pod驱逐机制 Qos Class ...
- Kubernetes调整Node节点快速驱逐pod的时间
在高可用的k8s集群中,当Node节点挂掉,kubelet无法提供工作的时候,pod将会自动调度到其他的节点上去,而调度到节点上的时间需要我们慎重考量,因为它决定了生产的稳定性.可靠性,更快的迁移可以 ...
- Kubernetes 针对资源紧缺处理方式的配置
如何在资源紧缺的情况下,保证 Node 的稳定性,是 Kubelet 需要面对的一个重要的问题.尤其对于内存和磁盘这种不可压缩的资源,紧缺就相当于不稳定. 在kubelet启动作为参数或者在配置文件中 ...
- Kubernetes Pod 驱逐详解
原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...
- Kubernetes中资源清单与Pod的生命周期(二)
一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...
- Kubernetes Pod驱逐策略
Kubelet 能够主动监测和防止计算资源的全面短缺. 在资源短缺的情况下,kubelet 可以主动地结束一个或多个 Pod 以回收短缺的资源. 当 kubelet 结束一个 Pod 时,它将终止 P ...
- kubernetes资源清单之pod
什么是pod? Pod是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范. Pod的内容始终位于同一地点,并在同一时间安排,并在共享上下文中运行. Po ...
- 6、kubernetes资源清单之Pod控制器190714
一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...
随机推荐
- Java使用Java OCR API进行验证码识别
Maven坐标: <!-- https://mvnrepository.com/artifact/com.asprise.ocr/java-ocr-api --> <dependen ...
- java-对象的区别
1.JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员 ...
- 【手记】解决Intel Management Engine Interface黄色感叹号
安装补丁KB2685811.重启.
- vue-cli 3.x搭建项目以及其中vue.config.js文件的配置
参考链接:https://www.cnblogs.com/wxh0929/p/11271551.html vue-cli3全面配置详解:https://www.jb51.net/article/150 ...
- .Net WebApi接口之Swagger UI 隐藏指定接口类或方法
swagger的一个最大的优点是能实时同步api与文档,但有些时候我们不想全部公开接口,而要隐藏或屏蔽一些接口类或方法,swagger也是支持的,只需要设置一下DocumentFilter方法. 第一 ...
- 自己对flash memory的总结
1.综述类文章 1.A Survey of Storage Management in Flash based Data 2.Understanding the Flash Translation L ...
- 小菜鸟之oracle
oracle 存储过程 函数 创建 删除 参数 传递 函数 查看 包 系统包 分类: Oracle 2011-10-27 17:31 264人阅读 评论(0) 收藏 举报 认识存储过程和函数 存储 ...
- leetcode 算法整理
一 字符串中的最大回文串(第5题) Given a string s, find the longest palindromic substring in s. You may assume that ...
- spring入门一:框架整体简介
1:spring的基本框架主要包含六大模块:DAO.ORM.AOP.JEE.WEB.CORE DAO:(Data Access Object) 数据访问对象,是一个面向对象的数据库接口. ORM:(O ...
- ubuntu下安装navicat
1.去官网下载 https://www.navicat.com/en/download/navicat-premium 2.命令行输入(解压命令) tar -zxvf xxxxx.tar.gz 3.移 ...