全部產品
Search
文件中心

Container Service for Kubernetes:重調度概述

更新時間:Jul 05, 2024

重調度(Descheduling)通常是指將部署在某個節點上調度不合理的Pod重新調度到另一個節點。在叢集利用率不均而產生熱點節點、節點屬性變化導致存量Pod調度規則不匹配等情境下,您可以使用重調度來最佳化資源使用,確保Pod在最佳節點上運行,從而保障叢集的高可用性和工作負載的高效運行。

閱讀前提示

為了協助您更好地使用重調度功能,建議您提前瞭解以下概念:

閱讀完本文檔後,您將瞭解:

  • 在什麼情境下需要使用重調度功能。

  • 重調度的工作流程。

  • 重調度相關概念,包括重調度模板、重調度策略Deschedule與Balance、驅逐器DefaultEvictor與MigrationController。

為什麼需要重調度功能

Kubernetes調度器會根據當前的叢集狀態決定如何將一個Pod調度到合適的節點上。但叢集的狀態會不斷變化,出於某些原因,某些情境下可能需要將運行中的Pod移動到其他節點,例如:

  • 叢集的工作負載分布不均,造成某些節點過載,影響這些熱點節點上的工作負載效能。

  • 叢集的總體資源使用率較低,期望下線部分節點以節約成本。這些節點上的Pod需要重新調度到其他節點上。

  • 叢集存在大量資源片段,導致叢集資源總量充足,但單節點上資源不足。此時一些較大規格的Pod無法調度,增加了叢集資源成本。

  • 節點新增或移除了汙點或標籤,導致不再符合該節點上某些Pod的親和性要求,需要將這些Pod遷移至滿足條件的節點上。

例如,應用在不同時間段的負載水位差異較大,在流量高峰期可能會產生熱點節點,進而影響應用的服務品質。此時,重調度功能可以驅逐異常的Pod,緩解熱點節點的壓力,保障工作負載的服務品質達到預期標準。

為瞭解決以上問題,ack-koordinator組件提供了重調度器模組Koordinator Descheduler,以Deployment的形式部署在節點上。Koordinator Descheduler基於社區Kubernetes DeschedulerDescheduling Framework重調度架構實現,相容了目前社區Kubernetes Descheduler提供的全部重調度策略,並在此基礎上對重調度策略、Pod驅逐方式、驅逐流量控制、驅逐過程觀測等多維度進行了增強,最佳化了Pod重調度的體驗。關於Koordinator Descheduler與Kubernetes Descheduler關聯與差異,請參見Koordinator Descheduler與Kubernetes Descheduler

重調度工作流程

Koordinator Descheduler周期性運行,您可以配置多種重調度策略,對Pod進行篩選和檢查,並對滿足驅逐條件的目標Pod進行驅逐。其整體的工作流程如下圖所示。

  1. 遍曆每個重調度模板,依次執行每個重調度模板中開啟的Deschedule類型的策略。

    1. 擷取節點、工作負載和Pod的資料資訊。

    2. 根據Deschedule策略規則篩選滿足驅逐條件的Pod。

    3. 對所有滿足驅逐條件Pod進行過濾、檢查和排序。

    4. 由重調度模板中開啟的Pod驅逐器發起Pod驅逐請求。

  2. 再次遍曆每個重調度模板,依次執行每個重調度模板中開啟的Balance類型的策略。流程類似步驟1。

其中涉及的術語概念如下。

重調度模板

針對不同類型的重調度需求,您可以配置一個或多個重調度模板。在每個重調度模板中,您可以指定希望使用的重調度策略以及Pod驅逐器,並差異化地配置對應的Pod生效範圍和進階參數。

使用重調度模板能夠根據不同的應用情境調整Pod的驅逐策略。例如,如需在不同的命名空間中驅逐超過不同存活時間長度的Pod,您可以配置多個重調度模板,對每一個命名空間中的Pod存活時間長度設定不同的閾值。

運行過程中,Koordinator Descheduler會按順序遍曆配置的所有重調度模板,先執行每個重調度模板中的Deschedule策略,待全部Deschedule策略執行完畢後,再一次遍曆所有的重調度模板,執行每個重調度模板中的Balance策略。

重調度策略Deschedule與Balance

重調度策略可以決定哪些Pod應該被驅逐,包括Deschedule和Balance兩種策略類型。關於策略類型支援的功能和配置方式,請參見策略外掛程式配置

  • Deschedule:逐個檢查Pod是否符合當前的調度約束,並依次進行驅逐,例如逐一驅逐不再滿足節點親和性或反親和性的Pod。

  • Balance:最佳化所有Pod或一組Pod在叢集中的分布均勻性,繼而決定驅逐哪些Pod,例如基於節點的真實利用率驅逐負載熱點上的Pod。

每個重調度策略的決策是相互獨立的。重調度策略會按照自身的驅逐規則選擇待驅逐的Pod,然後對符合規則的Pod進行過濾、檢查和排序,期間會綜合考量叢集容量、資源使用率水位、副本數比例等約束,最終確定待驅逐的目標Pod,並請求Pod驅逐器完成對目標Pod的驅逐。

驅逐器與驅逐控制

Koordinator Descheduler中,驅逐器負責完成對目標Pod的驅逐,支援DefaultEvictor和MigrationController兩種Pod驅逐器。

  • DefaultEvictor:提供基礎的Pod驅逐功能,支援限制Pod驅逐的最大數量。DefaultEvictor在使用方法和配置上與Kubernetes Descheduler原生的驅逐器一致,請參見DefaultEvictor

  • MigrationController:支援更安全、可追溯的Pod驅逐遷移。詳細的配置參數說明,請參見驅逐器外掛程式配置

關於兩者之間的詳細差異對比說明,請參見差異對比

啟用重調度功能

您可以安裝ack-koordinator組件並開啟重調度功能,請參見啟用重調度功能

您也可以在ConfigMap中對系統、重調度模板、策略外掛程式和驅逐器外掛程式進行進階配置,請參見進階配置參數

相關文檔

  • 如果您正在使用Kubernetes Descheduler,推薦您遷移至Koordinator Descheduler。關於組件之間的關聯與差異,以及如何?組件的遷移,請參見Koordinator Descheduler與Kubernetes Descheduler

  • 重調度功能由ack-koordinator組件的Koordinator Descheduler模組實現。ack-koordinator組件本身的安裝和使用是免費的,但在部分情境下可能會產生額外費用。更多資訊,請參見費用說明