Pod的QoS服务质量等级

Posted wangshiboloveni

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pod的QoS服务质量等级相关的知识,希望对你有一定的参考价值。



QOS是K8S中的一种资源保护机制,其主要是针对不可压缩资源比如内存的一种控制技术。比如在内存中,其通过为不同的Pod和容器构造OOM评分,并且通过内核策略的辅助,从而实现当节点内存资源不足的时候,内核可以按照策略的优先级,优先kill掉那些优先级比较低(分值越高,优先级越低)的Pod。

Pod的QoS服务质量等级_优先级

 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服务质量等级的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes服务质量 Qos

Kubernetes服务质量 Qos

关于K8s中资源服务质量管理Resource Qos的一些笔记整理

关于K8s中资源服务质量管理Resource Qos的一些笔记整理

ESP32-IDF05-5 WIFI-MQTT高级内容

服务访问质量 QOS