k8s資源需求和限制, 以及pod驅逐策略


容器的資源需求和資源限制

requests:需求,最低保障, 保證被調度的節點上至少有的資源配額
limits:限制,硬限制, 容器可以分配到的最大資源配額

QoS Classes分類

如果Pod中所有Container的所有Resource的limit和request都相等且不為0,則這個Pod的QoS Class就是Guaranteed。
注意,如果一個容器只指明了limit,而未指明request,則表明request的值等於limit的值。

Burstable

至少有一個容器設置CPU或內存資源的requests屬性
Best-Effort

如果Pod中所有容器的所有Resource的request和limit都沒有賦值,則這個Pod的QoS Class就是Best-Effort.

Qos Class優先級排名

Guaranteed > Burstable > Best-Effort
可壓縮資源與不可壓縮資源

Pod 使用的資源最重要的是 CPU、內存和磁盤 IO,這些資源可以被分為可壓縮資源(CPU)和不可壓縮資源(內存,磁盤 IO)。

可壓縮資源(CPU)不會導致pod被驅逐

因為當 Pod 的 CPU 使用量很多時,系統可以通過重新分配權重來限制 Pod 的 CPU 使用

不可壓縮資源(內存)則會導致pod被驅逐

於不可壓縮資源來說,如果資源不足,也就無法繼續申請資源(內存用完就是用完了),此時 Kubernetes 會從該節點上驅逐一定數量的 Pod,以保證該節點上有充足的資源。

那么,Kubernetes 為 Pod 設置這樣三種 QoS 類別,具體有什么作用呢?實際上,QoS 划分的主要應用場景,是當宿主機資源緊張的時候,kubelet 對 Pod 進行 Eviction(即資源回收)時需要用到的。具體地說,當 Kubernetes 所管理的宿主機上不可壓縮資源短缺時,就有可能觸發 Eviction。比如,可用內存(memory.available)、可用的宿主機磁盤空間(nodefs.available),以及容器運行時鏡像存儲空間(imagefs.available)等等。
目前,Kubernetes 為你設置的 Eviction 的默認閾值如下所示:

memory.available<100Mi
nodefs.available<10%
nodefs.inodesFree<5%
imagefs.available<15%

當然,上述各個觸發條件在 kubelet 里都是可配置的。比如下面這個例子:

kubelet --eviction-hard=imagefs.available<10%,memory.available<500Mi,nodefs.available<5%,nodefs.inodesFree<5% --eviction-soft=imagefs.available<30%,nodefs.available<10% --eviction-soft-grace-period=imagefs.available=2m,nodefs.available=2m --eviction-max-pod-grace-period=600

在這個配置中,你可以看到 Eviction 在 Kubernetes 里其實分為 Soft 和 Hard 兩種模式。
其中,Soft Eviction 允許你為 Eviction 過程設置一段“優雅時間”,比如上面例子里的 imagefs.available=2m,就意味着當 imagefs 不足的閾值達到 2 分鍾之后,kubelet 才會開始 Eviction 的過程。
而 Hard Eviction 模式下,Eviction 過程就會在閾值達到之后立刻開始。Kubernetes 計算 Eviction 閾值的數據來源,主要依賴於從 Cgroups 讀取到的值,以及使用 cAdvisor 監控到的數據。當宿主機的 Eviction 閾值達到后,就會進入 MemoryPressure 或者 DiskPressure 狀態,從而避免新的 Pod 被調度到這台宿主機上。而當 Eviction 發生的時候,kubelet 具體會挑選哪些 Pod 進行刪除操作,就需要參考這些 Pod 的 QoS 類別了。首當其沖的,自然是 BestEffort 類別的 Pod。其次,是屬於 Burstable 類別、並且發生“飢餓”的資源使用量已經超出了 requests 的 Pod。最后,才是 Guaranteed 類別。並且,Kubernetes 會保證只有當 Guaranteed 類別的 Pod 的資源使用量超過了其 limits 的限制,或者宿主機本身正處於 Memory Pressure 狀態時,Guaranteed 的 Pod 才可能被選中進行 Eviction 操作。當然,對於同 QoS 類別的 Pod 來說,Kubernetes 還會根據 Pod 的優先級來進行進一步地排序和選擇。


免責聲明!

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



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