在K8S中,Scheduler 作用及實現原理有哪些?

黄嘉波發表於2024-10-11

在Kubernetes(K8s)中,Scheduler是一個至關重要的核心元件,其主要作用是負責叢集中Pod的排程。以下是Scheduler的詳細作用及實現原理:

1. Scheduler的作用
  1. 資源分配:Scheduler根據每個Pod的資源請求(如CPU、記憶體)以及節點當前的可用資源情況,選擇合適的Node來執行Pod。這有助於確保Pod能夠在滿足其資源需求的節點上執行,從而提高資源的利用率和系統的效能。
  2. 滿足約束條件:Scheduler會考慮Pod的排程約束條件和親和性/反親和性規則,如節點標籤、區域、拓撲結構等要求。這些規則有助於確保Pod被排程到符合其特定需求的Node上,從而滿足應用的部署要求。
  3. 服務穩定性與最佳化:透過預選(Filtering)和優選(Scoring)兩個階段的策略執行,Scheduler不僅確保Pod能夠成功排程,還儘可能地最佳化叢集的整體效能和可靠性。這包括將Pod分散到不同的節點上以降低故障風險,以及選擇負載較低的節點以提高系統的響應速度等。
2. Scheduler的實現原理

Scheduler的工作流程主要包括以下幾個關鍵步驟:

  1. 監聽事件:Scheduler會持續監聽API Server的事件。一旦有新的待排程Pod或已有Pod需要重新排程時,Scheduler將介入並進行排程決策。
  2. 預選過程:Scheduler遍歷整個叢集的所有Node列表,並對於每一個Node,檢查該節點是否滿足Pod的資源需求和其他硬性約束條件,如節點標籤匹配、容忍度(Taints and Tolerations)、儲存容量等。如果一個Node透過了所有預選策略,則會被加入候選節點集合。
  3. 優選過程:Scheduler對候選節點集合應用一系列優選策略,為每個節點計算一個優先順序分數。這些優選策略可以包括預設的系統策略(如基於資源利用率的打分)以及使用者自定義的策略。Scheduler根據各個節點得到的積分排序,得分最高的節點將被選為Pod的最佳排程位置。
  4. 繫結節點:當確定了最優節點後,Scheduler會在API Server中為Pod建立一個binding物件,將Pod與選定的Node繫結在一起。排程結果會被寫入etcd,並通知kubelet開始在該Node上啟動Pod。
  5. 持續觀察與調整:Scheduler不斷地觀察叢集狀態的變化,並相應地調整Pod的位置,以適應叢集資源的實時變化及業務需求。
3. Scheduler的擴充套件與自定義

Kubernetes允許使用者編寫和部署自定義的排程器,以替代預設的排程器或與之共存。這可以透過以下步驟實現:

  1. 建立排程器外掛:基於Kubernetes提供的排程框架,使用者可以建立新的排程外掛。這些外掛可以是過濾外掛、打分外掛、預繫結外掛等,用於實現特定的排程邏輯。
  2. 配置排程器:在kube-scheduler配置檔案中新增或修改排程外掛,以啟用自定義的排程邏輯。
  3. 部署自定義排程器:將自定義排程器部署到Kubernetes叢集中,並在Pod定義中指定使用自定義排程器。

綜上所述,Kubernetes Scheduler實現了叢集資源的有效利用和Pod的智慧排程。同時,透過提供擴充套件和自定義的功能,Scheduler還能夠滿足不同應用的需求,為Kubernetes叢集的高效執行提供有力支援。

相關文章