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资源模板完成 ...
随机推荐
- Jmeter 逻辑控制器 之 吞吐量控制器
吞吐量控制器 听起来好像比较难理解或者比较高深,其实它非常简单,今天我仔细看了下帮助,分享下对它的理解. 一.认识吞吐量控制器 作用:控制其下子样例执行的频次,有两种控制模式,一种是直接设置数值,一种 ...
- linux下使用openssl和md5sum加密文件或者字符串
#openssl //在终端中输入openssl后回车. OpenSSL> md5 //输入md5后回车 123456 //接着输入123456,不要输入回车.然后按3次ctr ...
- LoadRunner编程之文件的操作
这篇文章主要写下LoadRunner下如何进行文件的操作. 1,文件的声明 LoadRunner不支持FILE数据类型,所以在LoadRunner中用int来声明一个文件: int MyFile; 2 ...
- Mysql——日期函数,时间操作(汇总)
英文文档连接:https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html 中文文档连接:https://www.docs4 ...
- 【AtCoder】ARC079
ARC079题解 C - Cat Snuke and a Voyage #include <bits/stdc++.h> #define fi first #define se secon ...
- REST架构中的HTTP动词
POST 增 DELETE 删 PUT 改 GET 查 GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新建一个资源. PUT(UPDATE):在服务器更新 ...
- 手机网站支付如何接入支付宝简易版支付功能PHP版
接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台 2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的 ...
- ORC相关的库介绍和应用
将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR) OCR库:Pillow.Tesseract.NumPy Pillow Pillow可以对图 ...
- python+selenium+webdriver+BeautifulSoup实现自动登录
from selenium import webdriverimport timefrom bs4 import BeautifulSoupfrom urllib import requestimpo ...
- Python面向对象中的继承、多态和封装
Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...