叢集資源緊張時,高優任務可能會因資源不足而無法運行。開啟搶佔(Preemption)後,ACK Scheduler能夠通過資源類比判斷並驅逐低優任務Pod,釋放計算資源以優先保障高優任務快速啟動。
搶佔策略介紹
一次搶佔任務的核心流程如下:
標記任務優先順序:為工作負載Pod添加
priorityClassName,聲明Pod的優先順序。系統組件(例如 kube-proxy、etcd)通常被顯式標記為高優先順序(例如
system-node-critical),並且由於 DaemonSet 等特性,預設不會被驅逐。資源不足時“類比搶佔”:檢測到新任務調度資源不足時,ACK Scheduler會類比是否能夠關閉某些低優任務,為更高優的任務搶佔足夠的資源。
安全驅逐低優任務:ACK Scheduler 觸發搶佔邏輯後,節點 kubelet 會根據指令安全地驅逐低優 Pod,釋放資源以完成高優任務的調度。
低優任務重新調度:被驅逐的低優Pod會被Controller(例如Deployment Controller)重新建立,尋找其他可用節點。若叢集資源持續緊張,重新調度的 Pod 可能仍無法運行,處於Pending狀態。
ACK Scheduler預設支援以下搶佔策略,您可通過PreemptionAlgorithm參數進行管理和配置。
策略 | 說明 |
Default | Kubernetes社區預設搶佔機制,即首先嘗試直接調度,資源不足時類比資源的搶佔,確定搶佔後執行低優Pod的驅逐,完成高優Pod的調度。詳情請參見Pod優先順序和搶佔。 |
ElasticQuota | 基於ElasticQuotaTree進行搶佔。
|
Auto | 根據叢集配置調整搶佔策略。簡單來說,優先使用ElasticQuota策略,並在ElasticQuota策略無法生效時自動調整為Default策略。 |
None | 不開啟搶佔能力,即叢集中不發生任何搶佔行為。 |
開啟搶佔能力時,搶佔策略的生效邏輯如下。
啟用步驟
開啟搶佔前,建議您已參見Pod優先順序和搶佔瞭解相關概念。
您可以通過自訂調度器參數,配置preemptionAlgorithm以啟用搶佔。預設參數為Auto策略。