系列目錄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管理的。