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

相關文章
相關標籤/搜索