zoukankan      html  css  js  c++  java
  • kubernetes 之QoS服务质量管理

    系列目录

    在kubernetes中,每个POD都有个QoS标记,通过这个Qos标记来对POD进行服务质量管理。QoS的英文全称为"Quality of Service",中文名为"服务质量",它取决于用户对服务质量的预期,也就是期望的服务质量。对于POD来说,服务质量体现在两个指标上,一个指标是CPU,另一个指标是内存。在实际运行过程中,当NODE节点上内存资源紧张的时候,kubernetes根据POD具有的不同QoS标记,采取不同的处理策略。

    高
    ^  +------------------------+
    |  |                        |
    |  |       Guaranteed       |
    |  |                        |
    |  +------------------------+
    |  |                        |
    |  |       Burstable        |
    |  |                        |
    |  |                        |
    |  +------------------------+
    |  |                        |
    |  |       BestEffort       |
    +  |                        |
    低  +------------------------+
    
    

    这三个QoS级别介绍,可以看下面表格:

    QoS级别

    QoS介绍

    BestEffort

    POD中的所有容器都没有指定CPU和内存的requests和limits,那么这个POD的QoS就是BestEffort级别

    Burstable

    POD中只要有一个容器,这个容器requests和limits的设置同其他容器设置的不一致,那么这个POD的QoS就是Burstable级别

    Guaranteed

    POD中所有容器都必须统一设置了limits,并且设置参数都一致,如果有一个容器要设置requests,那么所有容器都要设置,并设置参数同limits一致,那么这个POD的QoS就是Guaranteed级别

    以下是举例说明:

    QoS级别

    QoS配置例子

    BestEffort

    containers:

        name: foo

            resources:

        name: bar

            resources:

    Burstable

    containers:

        name: foo

            resources:

                limits:

                    cpu: 10m

                    memory: 1Gi

                requests:

                    cpu: 10m

                    memory: 1Gi

     

        name: bar

    containers:

        name: foo

            resources:

                limits:

                    memory: 1Gi

     

        name: bar

            resources:

                limits:

                    cpu: 100m

    containers:

        name: foo

            resources:

                requests:

                    cpu: 10m

                    memory: 1Gi

     

        name: bar

    Guaranteed

    containers:

        name: foo

            resources:

                limits:

                    cpu: 10m

                    memory: 1Gi

        name: bar

            resources:

                limits:

                    cpu: 100m

                    memory: 100Mi

    containers:

        name: foo

            resources:

                limits:

                    cpu: 10m

                    memory: 1Gi

                requests:

                    cpu: 10m

                    memory: 1Gi

     

        name: bar

            resources:

                limits:

                    cpu: 100m

                    memory: 100Mi

                requests:

                    cpu: 10m

                    memory: 1Gi

    QoS级别决定了kubernetes处理这些POD的方式,我们以内存资源为例:

    • 当NODE节点上内存资源不够的时候,QoS级别是BestEffort的POD会最先被kill掉;当NODE节点上内存资源充足的时候,QoS级别是BestEffort的POD可以使用NODE节点上剩余的所有内存资源。

    • 当NODE节点上内存资源不够的时候,如果QoS级别是BestEffort的POD已经都被kill掉了,那么会查找QoS级别是Burstable的POD,并且这些POD使用的内存已经超出了requests设置的内存值,这些被找到的POD会被kill掉;当NODE节点上内存资源充足的时候,QoS级别是Burstable的POD会按照requests和limits的设置来使用。

    • 当NODE节点上内存资源不够的时候,如果QoS级别是BestEffort和Burstable的POD都已经被kill掉了,那么会查找QoS级别是Guaranteed的POD,并且这些POD使用的内存已经超出了limits设置的内存值,这些被找到的POD会被kill掉;当NODE节点上内存资源充足的时候,QoS级别是Burstable的POD会按照requests和limits的设置来使用。

    • 从容器的角度出发,为了限制容器使用的CPU和内存,是通过cgroup来实现的,目前kubernetes的QoS只能管理CPU和内存,所以kubernetes现在也是通过对cgroup的配置来实现QoS管理的。

  • 相关阅读:
    grep用法小结
    观察者模式
    类之间的关系
    Linux——makefile编写
    探索C++多态和实现机理
    进程间通信——管道
    C++继承引入的隐藏与重写
    Linux 文件读写操作与磁盘挂载
    xShell终端下中文乱码问题
    深入理解C++ new/delete, new []/delete[]动态内存管理
  • 原文地址:https://www.cnblogs.com/tylerzhou/p/11043280.html
Copyright © 2011-2022 走看看