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资源模板完成 ...
随机推荐
- 【JS新手教程】弹出两层div,及在LODOP内嵌上层
前面的博文有个简单的弹出div层[JS新手教程]浏览器弹出div层1,有一层,不过为了提示,一般会不让用户可以点击该提示之外的地方的.如果让用户弹出层后,把其他的按钮和链接都设置不可用应该比较麻烦,如 ...
- smoothstep(),平滑阶梯函数,平滑过渡函数【转】
函数定义: 参考:https://en.wikipedia.org/wiki/Smoothstep 相关函数图形如下: 计算机图形中经常用到正如上图所示的:两个smooth()函数相减. 相关C+ ...
- Jetson TX2 不同的工作模式
Jetson TX2 有五种工作模式,下面介绍这几种工作模式下电压.频率以及如何启动. 原理图 几种不同的工作模式 mode mode name Denver Frequency ARM Freque ...
- Insomni’hack CTF-l33t-hoster复现分析
题目地址: https://github.com/eboda/insomnihack/tree/master/l33t_hoster 源码如下: <?php if (isset($_GET[&q ...
- 43.QQ聊天软件GUI窗口编写
QQ聊天软件代码功能编写 一,Tkinter聊天界面编写 1,聊天软件客户端界面开发-1 Tkinter的模块(“TK接口”)是标准的Python接口从Tk的GUI工具包 https://i.cnbl ...
- Mysql:too many connect
1.问题展现应用端登录出现Too many connections报错 检查发现mysql数据库服务端已经达到了max_connections上限 #查看最大连接数 mysql> show va ...
- Django使用DataTables插件总结
Django使用Datatables插件总结 文章中的例子已上传至github 基本使用 Datatables插件是一款方便简单的展示数据的列表插件.关于基本使用,官方网站上的已介绍的很详细,这里我再 ...
- python的logging的配置
在python项目中,开发环境是windows环境,发布环境是linux系统. import logging import logging.handlers import platform impor ...
- Python解Leetcode: 725. Split Linked List in Parts
题目描述:给定一个单链表,写一个函数把它分成k个单链表.分割成的k个单链表中,两两之间长度差不超过1,允许为空.分成的k个链表中,顺序要和原先的保持一致,比如说每个单链表有3个结点,则第一个单链表的结 ...
- Secret的三种形式
Secret ConfigMap这个资源对象是Kubernetes当中非常重要的一个对象,一般情况下ConfigMap是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMa ...