花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述Pod的QoS服务质量等级相关的知识,希望能为你提供帮助。
QOS是K8S中的一种资源保护机制,其主要是针对不可压缩资源比如内存的一种控制技术。比如在内存中,其通过为不同的Pod和容器构造OOM评分,并且通过内核策略的辅助,从而实现当节点内存资源不足的时候,内核可以按照策略的优先级,优先kill掉那些优先级比较低(分值越高,优先级越低)的Pod。
文章图片
QoS(Quality of Service),可译为 "服务质量等级",或者译作 "服务质量保证",是作用在 Pod 上的一个配置,当 Kubernetes 创建一个 Pod 时,它就会给这个 Pod 分配一个 QoS 等级。
K8s中,针对QOS服务质量等级有三种策略:
Guaranteed (该策略下,设置的requests 等于 limits)
pod.spec.containers[].resources中会存在cpu或memory的request和limit。顾名思义是该容器对资源的最低要求和最高使用量限制。如果我们配置了limit,没有配置request,默认会以limit的值来定义request。具体的配置可以参考以前的这篇笔记。
BestEffort(该策略下,没有设置requests 、 limits)
当pod的描述文档中没有resource.limit、resource.request相关的配置时,意味着这个容器想跑多少资源就跑多少资源,其资源使用上限实际上即所在node的capacity。
Burstable(该策略下,设置的requests 小于 limits)
当resource.limit和resource.request以上述两种方式以外的形式配置的时候,就会采用本模式。 QoS目前只用cpu和memory来描述,其中cpu可压缩资源,当一个容器的cpu使用率超过limit时会被进行流控,而当内存超过limit时则会被oom_kill。这里kubelet是通过自己计算容器的oom_score,确认相应的linux进程的oom_adj,oom_adj最高的进程最先被oom_kill。 Guaranteed模式的容器oom_score最小:-998,对应的oom_adj为0或1,BestEffort模式则是1000,Burstable模式的oom_score随着其内存使用状况浮动,但会处在2-1000之间。
因此可以看出,当某个node内存被严重消耗时,BestEffort策略的pod会最先被kubelet杀死,其次Burstable(该策略的pods如有多个,也是按照内存使用率来由高到低地终止),再其次Guaranteed。
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
【Pod的QoS服务质量等级】
推荐阅读
- Nginx+Tomcat负载均衡及动静分离
- Linux 搭建私有 yum 仓库
- 微服务架构 | 3.3 Apache Zookeeper 注册中心 #yyds干货盘点#
- SNAT DANT原理的应用
- WIN11专业版64位21H2正式版 V22000.376 MSDN12月适度精简母盘(2021-12-23)
- 编程进阶之路,虽无捷径但有长短
- VMware vSphere虚拟化常用账户密ma重置-VMware企业虚拟化运维第二季
- #yyds干货盘点#THREE.BoxHelper的使用注意
- 极速开发之Spring Boot五种热部署方式