kubernetes 之QoS服务质量管理

系列目录html

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

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

这三个QoS级别介绍,能够看下面表格:code

QoS级别htm

QoS介绍blog

BestEffort内存

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

Burstable资源

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

Guaranteedkubernetes

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管理的。

相关文章
相关标签/搜索