pod QoS等级(A)
一、了解Pod Qos等级
一个节点不一定能提供所有pod所指定的资源limits之和那么多的资源量。
假设有两个pod,pod A使用了节点内存的 90%,pod B突然需要比之前更多的内存,这时节点无法提供足量内存,哪个容器将被杀掉呢?应该是pod B吗?因为节点无法满足它的内存请求。或者应该是pod A吗?这样释放的内存就可以提供给pod B了。
显然,这要分情况讨论。Kubernetes无法自己做出正确决策,因此就需要一种方式,我们通过这种方式可以指定哪种pod在该场景中优先级更高。Kubernetes将pod划分为3种QoS等级:
- BestEffort(优先级最低)
- Burstable
- Guaranteed(优先级最高
1.1 定义pod的Qos等级
QoS等级来源于pod所包含的容器的资源requests和limits的配置。下面介绍分配QoS等级的方法。
为pod分配BestEffort等级
最低优先级的QoS等级是BestEffort。会分配给那些没有(为任何容器)设置任何requests和limits的pod。在这个等级运行的容器没有任何资源保证。在最坏情况下,它们分不到任何CPU时间,同时在需要为其他pod释放内存时,这些容器会第一批被杀死。不过因为BestEffort pod没有配置内存limits,当有充足的可用内存时,这些容器可以使用任意多的内存。
为pod分配Guaranteed等级
与Burstable相对的是Guaranteed等级,会分配给那些所有资源request和limits相等的pod。对于一个Guaranteed级别的pod,有以下几个条件:
- CPU和内存都要设置requests和limits
- 每个容器都需要设置资源量
- 它们必须相等(每个容器的每种资源的requests和limits必须相等)
因为如果容器的资源requests没有显式设置,默认与limits相同,所以只设置所有资源(pod内每个容器的每种资源)的限制量就可以使pod的QoS等级为Guaranteed。这些pod的容器可以使用它所申请的等额资源,但是无法消耗更多的资源(因为它们的limits和requests相等)。
为pod分配Burstable等级
Burstable QoS等级介于BestEffort和Guaranteed之间。其他所有的pod都属于这个等级。
1. 容器的requests和limits不相同的单容器pod,
2. 至少有一个容器只定义了requests但没有定义limits的pod,
3. 一个容器的requests和limits相等,但是另一个容器不指定requests或limits的pod。
Burstable pod可以获得它们所申请的等额资源,并可以使用额外的资源(不超过limits)。
requests和limits之间的关系如何定义QoS等级
举例:3个QoS等级和它们与requests和limits之间的关系
资源的requests、limits和QoS等级
考虑一个pod应该属于哪个QoS等级足以令人脑袋快速运转,因为它涉及多个容器、多种资源,以及requests和limits之间所有可能的关系。如果一开始从容器级别考虑QoS(尽管它并不是容器的属性,而是pod的属性),然后从容器QoS推导出pod QoS,这样可能更容易理解。
1.2 明白容器的QOS等级
基于资源requests和limits如何为单个容器定义QoS等级。对于单容器pod,容器的QoS等级也适用于pod。
基于资源请求量和限制量的单容器pod的QoS等级
注意 如果设置了requests而没有设置limits,参考表中requests小于limits那一行。如果设置了limits,requests默认与limits相等,因此参考request等于limits那一行。
了解多容器pod的QoS等级
对于多容器pod,如果所有的容器的QoS等级相同,那么这个等级就是pod的QoS等级. 如果至少有一个容器的QoS等级与其他不同,无论这个容器是什么等级,这个pod的QoS等级都是Burstable等级。
由容器的QoS等级推导出pod 的QoS等级
注意 运行 kubectl describe pod 以及通过pod的YAML/JSON描述的status.qosClass 字段都可以查看pod的QoS等级。
1.3 Qos根据等级杀掉容器
1.3.1 内存不足时,哪个进程会被杀
QoS等级决定着哪个容器第一个被杀掉,这样释放出的资源可以提供给高优先级的pod使用。BestEffort等级的pod首先被杀掉,其次是Burstable pod,最后是Guaranteed pod。Guaranteed pod只有在系统进程需要内存时才会被杀掉。
杀死顺序:BestEffort Pod--->Burstable Pod--->Guaranteed Pod
1.3.2 了解QoS等级的优先顺序
假设两个单容器的pod,第一个属于BestEffort QoS等级,第二个属于Burstable等级。当节点的全部内存已经用完,还有进程尝试申请更多的内存时,系统必须杀死其中一个进程(甚至包括尝试申请额外内存的进程)以兑现内存分配请求。这种情况下,BestEffort等级运行的进程会在Burstable等级的进程之前被系统杀掉。
显然,BestEffort pod的进程会在Guaranteed pod的进程之前被杀掉。同样地,Burstable pod的进程也先于Guaranteed pod的进程被杀掉。但如果只有两个Burstable pod会发生什么呢?很明显需要选择一个优先于另一个的进程。
1.3.3 如何处理相同QoS等级的容器
每个运行中的进程都有一个称为OutOfMemory(OOM)分数的值,系统通过比较所有运行进程的OOM分数来选择要杀掉的进程。当需要释放内存时,分数最高的进程将被杀死。
OOM分数由两个参数计算得出:进程已消耗内存占可用内存的百分比,与一个基于pod QoS等级和容器内存申请量固定的OOM分数调节因子。对于两个属于Burstable等级的单容器的pod,系统会杀掉内存实际使用量占内存申请量比例更高的pod。
使用了内存申请量 90% 的pod B在pod C(只使用了70%)之前被杀掉的原因,尽管pod C比pod B使用了更多兆字节的内存。
转自:https://zhuanlan.zhihu.com/p/359854581
pod QoS等级(A)的更多相关文章
- 如何为k8s中的pod配置QoS等级?
1.概述 本文介绍如何为pod分配特定的QoS等级. 我们知道,在k8s的环境中,通过使用QoS等级来做决定,在资源紧张的时候,将哪些的pod进行驱逐,或者说如何对pod进行调度. OK,话不多说,让 ...
- MQTT 协议学习: QoS等级 与 会话
背景 QoS 等级 与 通信的流程有关,直接影响了整个通信.而且篇幅比较长,所以我觉得应该单独拎出来讲一下. 概念 QoS 代表了 服务质量等级. 设置上,由2 位 的二进制控制,且值不允许为 3(0 ...
- Kubernetes的资源管理
本节讲解为一个pod配置资源的预期使用量和最大使用量.通过设置这两组参数,可以确保pod公平地使用Kubernetes集群资源,同时也影响着整个集群pod的调度方式. 1.为pod中的容器申请资源 创 ...
- pod资源限制和QoS探索
简述 默认情况下,k8s不会对pod的资源使用进行限制,也就是说,pod可以无限使用主机的资源,例如CPU.内存等.为了保障k8s整体环境运行的稳定性,一般情况下,建议是对pod的资源使用进行限制,将 ...
- K8s QoS Pod资源服务质量控制
Kubernetes 中如果一个 Node 节点上的 Pod 占用资源过多并且不断飙升导致 Node 节点资源不足,可能会导致为了保证节点可用,将容器被杀掉.在遇见这种情况时候,我们希望先杀掉那些不太 ...
- k8s QoS与pod驱逐
概述 QoS是Quality of Service的缩写,即服务质量.每个pod属于某一个QoS分类,而Kubernetes会根据pod的QoS级别来决定pod的调度.抢占调度和驱逐优先级,而且pod ...
- Kubernetes Pod 驱逐详解
原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...
- 十六, k8s集群资源需求和限制, 以及pod驱逐策略。
目录 容器的资源需求和资源限制 QoS Classes分类 Guaranteed Burstable Best-Effort kubernetes之node资源紧缺时pod驱逐机制 Qos Class ...
- Kubernetes中 Pod 是怎样被驱逐的?
前言 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 IO).可压缩资源不可能导致 Pod 被驱 ...
- 8.深入k8s:资源控制Qos和eviction及其源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com,源码版本是1.19 又是一个周末,可以愉快的坐下来静静的品味一段源码,这一篇涉及到资源的 ...
随机推荐
- TP6框架--EasyAdmin学习笔记:实现数据库增删查改
这是我写的学习EasyAdmin的第三章,这一章我给大家分享下如何进行数据库的增删查改 上一章链接:点击这里前往 上一章我们说到,我仿照官方案例,定义了一条路由goodsone和创建了对应数据库,我们 ...
- 记录--10个超级实用的Set、Map使用技巧
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Set是一种类似于数组的数据结构,但是它的值是唯一的,即Set中的每个值只会出现一次.Set对象的实例可以用于存储任何类型的唯一值,从而使 ...
- 记录--Vue中使用websocket的正确姿势
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1:首先谈谈websocket是什么? WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket通信协议于201 ...
- uni-app如何实现USB插入后自动弹出对应软件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近碰到了一个奇葩需求,要用uni-app来实现usb接入设备的时候,让软件自动弹出来,这里给出我制作的过程和参考的各种思路,希望对大家有 ...
- 应急响应靶机训练-Linux2
靶机来源: 知攻善防实验室公众号 https://mp.weixin.qq.com/s/xf2FgkrjZg-yWlB9-pRXvw 我是在另一台主机上通过ssh连接到靶机进行解题的,我的ip为192 ...
- 原生js实现table的增加删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- #轻重链剖分,交互#LOJ 6669 Nauuo and Binary Tree
题目 有一棵大小为\(n\)只知道根节点为1的二叉树, 可以不超过\(3*10^4\)询问两点之间距离, 最后输出除了点1以外其余点的祖先 \(n\leq 3000\) 分析 \(O(n^2)\)的时 ...
- 2024最新AIGC系统ChatGPT网站源码,GPTs应用,Ai绘画网站源码
一.前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型.本期针对源码系统整体测试下来非常完美,那么 ...
- Windows下Net6开源akstream项目vs2022调试GB28181协议对接摄像头全流程
一.背景介绍 笔者经历多个项目对接摄像头需求,不同项目具体要求又有所不同,碰到的摄像头对接开发问题,整理记录.此篇主要用于记录备用及给有缘人提供解决思路等. 1. 同一局域网对接(海康摄像头),如 ...
- react native 0.73 配置 react-native-fs
安装react-native-fs npm npm install react-native-fs --save yarn yarn add react-native-fs 安卓配置 android/ ...