Kubernetes 排程器

在 Kubernetes 中,排程指的是確保 Pod節點 進行匹配,以便 Kubelet 可以執行它們。

排程總覽

排程器監看新建立且未指派節點的 Pod。對於排程器探索到的每個 Pod,排程器負責為該 Pod 找到最佳的執行節點。排程器在做出此放置決策時,會考量以下描述的排程原則。

如果您想了解 Pod 為何放置在特定節點上,或者您計劃自行實作自訂排程器,本頁將幫助您了解排程。

kube-scheduler

kube-scheduler 是 Kubernetes 的預設排程器,並作為 控制平面 的一部分執行。kube-scheduler 的設計使得,如果您想要且需要,您可以編寫自己的排程元件並改用它。

Kube-scheduler 選擇最佳節點來執行新建立或尚未排程(未排程)的 Pod。由於 Pod 中的容器和 Pod 本身可能具有不同的需求,因此排程器會篩選掉任何不符合 Pod 特定排程需求的節點。或者,API 允許您在建立 Pod 時為其指定節點,但這並不常見,僅在特殊情況下才會執行。

在叢集中,符合 Pod 排程需求的節點稱為可行節點。如果沒有節點合適,則 Pod 將保持未排程狀態,直到排程器能夠放置它。

排程器找到 Pod 的可行節點,然後執行一組函數來為可行節點評分,並選擇可行節點中得分最高的節點來執行 Pod。然後,排程器在稱為綁定的過程中,將此決策通知 API 伺服器。

排程決策需要考量的因素包括個別和集體資源需求、硬體/軟體/原則約束、親和性與反親和性規範、資料區域性、工作負載間干擾等等。

kube-scheduler 中的節點選擇

kube-scheduler 在 2 步驟操作中為 Pod 選擇節點

  1. 篩選
  2. 評分

篩選步驟找到一組可以排程 Pod 的可行節點。例如,PodFitsResources 篩選器檢查候選節點是否具有足夠的可用資源來滿足 Pod 的特定資源請求。在此步驟之後,節點清單包含任何合適的節點;通常,會有一個以上的節點。如果清單為空,則該 Pod 尚未可排程。

評分步驟中,排程器對剩餘節點進行排名,以選擇最合適的 Pod 放置位置。排程器根據作用中的評分規則,為每個通過篩選的節點指派一個分數。

最後,kube-scheduler 將 Pod 指派給排名最高的節點。如果有多個節點具有相等的分數,kube-scheduler 會隨機選擇其中一個。

有兩種支援的方式可以設定排程器的篩選與評分行為

  1. 排程原則 允許您為篩選設定Predicate,並為評分設定Priority
  2. 排程設定檔 (Scheduling Profiles) 允許您配置外掛程式 (Plugins) 來實作不同的排程階段,包括:QueueSortFilterScoreBindReservePermit 及其他。您也可以配置 kube-scheduler 來執行不同的設定檔。

接下來

上次修改時間為 2024 年 2 月 16 日下午 5:27 PST:修正 kube scheduler 中的拼字錯誤 (33dcba8aa6)