kubernets之了解Qos等级

一  Qos的种类

  • BestEffort(优先级最低)
  • Burstable(中等优先级)
  • Guaranteed(最高优先级)

 

二  Qos的作用

  众所周知,节点上面的limits允许超卖,当节点上面的内存总值大于100的时候,就必须要对某个容器删除,从而为其他容器腾出来内存空间,以上的Qos等级就决定着当出现上述情况的时候,优先杀死哪些pod里面的容器,这便是Pod的Qos的作用。

 

三 如何评定一个pod的Qos等级

 

  3.1  为pod分配Guaranteed等级

    这个等级是pod的最高优先级,而如果需要能够分配这个等级的pod需要具备几下几个条件

    • cpu和内存都要设置requests和limits
    • 每个容器都要设置资源值
    • 他们必须相等(每个容器的每种资源的requests和limits必须相等)

  因为如果容器的资源requests没有显示设置,默认与limits相等,所以只设置所有资源的限制量就可以使pod的Qos等级为Guaranteed,这些pod的容器可以使用它所申请的等额资源,但无法消耗更多,因为它们的requests和limits值相等

  

  3.2  为pod分配Burstable等级

    这个Qos等级介于BestEffort和Guaranteed之间,requests和limits值为一下情况

    • pod里面的容器设置了requests或者limits,但是他们的数值不相等的单容器pod
    • 多容器pod里面的至少有一个pod未设置limits值,或者未设置requests值(这个和未设置requests效果一样)

  因为pod可以申请节点上面的requests值,并且可以使用系统额外的值

 

  3.3 为pod分配BestEffort等级

    这个等级是pod的最低等级,这个pod里面的容器的requests和limits的值是如下情况

    • pod里面的所有的容器的requests和limits值都未被设置
    • 这个pod的里面的容器在系统的内存出现超卖的时候会优先被kill
    • 这个pod的里面的容器在系统资源充足的时候,可任由pod里面的容器对系统的资源进行访问

    

  3.4 让我们来通过一幅图来更直观和贴切的描述requests和limits的设置是如何决定pod的Qos等级

       

 

   3.5 通过评定容器的Qos等级从而判定pod的Qos等级

    申明一下,容器实际上并没有Qos这一说法的,我们是以评定pod的方式来评定容器的Qos,进而通过pod里面的容器的Qos来评定Pod的Qos等级,这里给出一张列表

             

    • 如果设置了requests而为设置limits,则参考Requests<limits一列
    • 如果设置了limits,而没有设置requests的话,则参考Requests=Limits这一列
    • 单容器的pod,容器的Qos就等于pod的Qos

    

  3.6  多容器的pod的Qos则由pod里面的所有容器的Qos来决定,可以参考下表进而得到结论,这里假设以2个容器的pod为例

     

 

  • 总结起来正正得正,负负得负,正负则取中间态
  • 当两个容器的的Qos都为BestEffort则pod的Qos也为BestEffort
  • 当两个容器的Qos都为Guaranteed则pod的Qos也为Guaranteed
  • 如果一个为BestEffort,另一个为Guaranteed则pod的Qos为Burstable

 

四 了解在超卖系统中,哪个进程优先会被杀死

 

  4.1  在超卖系统中,Qos等级决定着哪个pod会优先被杀掉,BestEffort最先会被干掉,其次是Burstable,最后才会是Guaranteed的pod被干掉(Guaranteed只有当系统级别的pod的资源不足才会被干掉),我们通过一幅图来展示并对其中哪个优先级会被杀死来说明。

           

  •   当系统中的资源超卖的时候,被优先处理的顺序是BestEffort > Burstable > Guaranteed
  •   当释放完所有的BestEffort的pod的时候仍然节点内存依然不足的情况下,就会考虑释放Burstable的pod
  •   由于系统中处于Burstable的pod较多,仍然需要一个比较规则,来决定超卖的时候先处理哪个pod,可能让你惊讶的是,系统并不是根据谁使用的内存量多的优先处理谁,而是根据资源使用量比上实际使用量的比值,优先处理更大的比值
  • 综上所述,我们在为pod的容器分配requests和limits的时候不仅仅需要注意两个的值,同时还需要还要留意requests和实际使用的内存资源大小的关系          

 

 

  

  

 

posted @ 2021-01-20 09:56  伊铭(netease)  阅读(798)  评论(0编辑  收藏  举报