全部產品
Search
文件中心

Container Service for Kubernetes:開啟搶佔

更新時間:Nov 13, 2025

叢集資源緊張時,高優任務可能會因資源不足而無法運行。開啟搶佔(Preemption)後,ACK Scheduler能夠通過資源類比判斷並驅逐低優任務Pod,釋放計算資源以優先保障高優任務快速啟動。

搶佔策略介紹

一次搶佔任務的核心流程如下:

  1. 標記任務優先順序:為工作負載Pod添加priorityClassName,聲明Pod的優先順序。

    系統組件(例如 kube-proxy、etcd)通常被顯式標記為高優先順序(例如 system-node-critical),並且由於 DaemonSet 等特性,預設不會被驅逐。
  2. 資源不足時“類比搶佔”:檢測到新任務調度資源不足時,ACK Scheduler會類比是否能夠關閉某些低優任務,為更高優的任務搶佔足夠的資源。

  3. 安全驅逐低優任務:ACK Scheduler 觸發搶佔邏輯後,節點 kubelet 會根據指令安全地驅逐低優 Pod,釋放資源以完成高優任務的調度。

  4. 低優任務重新調度:被驅逐的低優Pod會被Controller(例如Deployment Controller)重新建立,尋找其他可用節點。若叢集資源持續緊張,重新調度的 Pod 可能仍無法運行,處於Pending狀態。

ACK Scheduler預設支援以下搶佔策略,您可通過PreemptionAlgorithm參數進行管理和配置。

策略

說明

Default

Kubernetes社區預設搶佔機制,即首先嘗試直接調度,資源不足時類比資源的搶佔,確定搶佔後執行低優Pod的驅逐,完成高優Pod的調度。詳情請參見Pod優先順序和搶佔

ElasticQuota

基於ElasticQuotaTree進行搶佔。

  1. 明確待搶佔列表:區別於普通任務,ACK Scheduler會將整個Gang未調度的Pod組合成“待搶佔列表”,僅當列表中所有Pod都能通過資源搶佔被調度時,整個Gang才會被處理,否則將全部等待。若Gang中任何一個Pod設定了高優先順序,整個隊伍將採用這個最高優先順序參與資源搶佔。

  2. 產生可行節點列表:ACK Scheduler進一步判斷哪些節點會被選中。規則如下。

    • Gang中有多個Pod需搶佔:只要其中一個Pod能匹配某個節點條件,那麼該節點會被加入候選池,後續再嘗試是否能為所有Pod騰出資源。

    • 僅一個Pod需搶佔:篩選Filter階段已標記為不可調度(Unschedulable)的節點,更精確地定位資源不足或不匹配的節點。

  3. 類比搶佔:ACK Scheduler會嘗試類比搶佔,在可行節點列表中根據以下條件式篩選出可能被搶佔的 Pod。基本條件如下:

    • 沒有正在被其他Pod或任務搶佔的Pod

    • 遵循PDB規則,可以被驅逐的Pod

    然後,根據叢集的彈性配額(ElasticQuotaTree)配置,進一步分情況處理。

    • 搶佔者屬於某個 Quota:

      • 若 Quota 使用量 ≤ Min資源量:該 Quota 的資源使用未超過“最低保障資源”,屬於受保護資源,可搶佔其他超過Min資源量的Pod。

      • 若 Quota 使用量 > Min資源量:僅允許搶佔同一 Quota 內且優先順序低於搶佔者的 Pod。

    • 搶佔者不屬於任何 Quota:不允許搶佔。

    篩選被搶佔Pod後,ACK Scheduler會類比移除這些 Pod,驗證搶佔者可否調度:若成功,被搶佔 Pod 會跨節點重新調度,被安全驅逐;若失敗,則終止搶佔流程。

Auto

根據叢集配置調整搶佔策略。簡單來說,優先使用ElasticQuota策略,並在ElasticQuota策略無法生效時自動調整為Default策略。

None

不開啟搶佔能力,即叢集中不發生任何搶佔行為。

開啟搶佔能力時,搶佔策略的生效邏輯如下。

啟用步驟

開啟搶佔前,建議您已參見Pod優先順序和搶佔瞭解相關概念。

您可以通過自訂調度器參數,配置preemptionAlgorithm以啟用搶佔。預設參數為Auto策略。