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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM