Pod的QoS服務質量等級


 

QOS是K8S中的一種資源保護機制,其主要是針對不可壓縮資源比如內存的一種控制技術。比如在內存中,其通過為不同的Pod和容器構造OOM評分,並且通過內核策略的輔助,從而實現當節點內存資源不足的時候,內核可以按照策略的優先級,優先kill掉那些優先級比較低(分值越高,優先級越低)的Pod。

 QoS(Quality of Service),可譯為 "服務質量等級",或者譯作 "服務質量保證",是作用在 Pod 上的一個配置,當 Kubernetes 創建一個 Pod 時,它就會給這個 Pod 分配一個 QoS 等級。

 

K8s中,針對QOS服務質量等級有三種策略:

Guaranteed (該策略下,設置的requests 等於 limits)
pod.spec.containers[].resources中會存在cpu或memory的request和limit。顧名思義是該容器對資源的最低要求和最高使用量限制。如果我們配置了limit,沒有配置request,默認會以limit的值來定義request。具體的配置可以參考以前的這篇筆記。

BestEffort(該策略下,沒有設置requests 、 limits)
當pod的描述文檔中沒有resource.limit、resource.request相關的配置時,意味着這個容器想跑多少資源就跑多少資源,其資源使用上限實際上即所在node的capacity。

Burstable(該策略下,設置的requests 小於 limits)
當resource.limit和resource.request以上述兩種方式以外的形式配置的時候,就會采用本模式。 QoS目前只用cpu和memory來描述,其中cpu可壓縮資源,當一個容器的cpu使用率超過limit時會被進行流控,而當內存超過limit時則會被oom_kill。這里kubelet是通過自己計算容器的oom_score,確認相應的linux進程的oom_adj,oom_adj最高的進程最先被oom_kill。 Guaranteed模式的容器oom_score最小:-998,對應的oom_adj為0或1,BestEffort模式則是1000,Burstable模式的oom_score隨着其內存使用狀況浮動,但會處在2-1000之間。

 

因此可以看出,當某個node內存被嚴重消耗時,BestEffort策略的pod會最先被kubelet殺死,其次Burstable(該策略的pods如有多個,也是按照內存使用率來由高到低地終止),再其次Guaranteed。


免責聲明!

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



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