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 選擇節點
- 篩選
- 評分
篩選步驟找到一組可以排程 Pod 的可行節點。例如,PodFitsResources 篩選器檢查候選節點是否具有足夠的可用資源來滿足 Pod 的特定資源請求。在此步驟之後,節點清單包含任何合適的節點;通常,會有一個以上的節點。如果清單為空,則該 Pod 尚未可排程。
在評分步驟中,排程器對剩餘節點進行排名,以選擇最合適的 Pod 放置位置。排程器根據作用中的評分規則,為每個通過篩選的節點指派一個分數。
最後,kube-scheduler 將 Pod 指派給排名最高的節點。如果有多個節點具有相等的分數,kube-scheduler 會隨機選擇其中一個。
有兩種支援的方式可以設定排程器的篩選與評分行為
- 排程原則 允許您為篩選設定Predicate,並為評分設定Priority。
- 排程設定檔 (Scheduling Profiles) 允許您配置外掛程式 (Plugins) 來實作不同的排程階段,包括:
QueueSort
、Filter
、Score
、Bind
、Reserve
、Permit
及其他。您也可以配置 kube-scheduler 來執行不同的設定檔。
接下來
- 閱讀關於 排程器效能調校 (scheduler performance tuning)
- 閱讀關於 Pod 拓樸擴散約束 (Pod topology spread constraints)
- 閱讀 kube-scheduler 的參考文件 (reference documentation)
- 閱讀 kube-scheduler 設定檔 (v1) 的參考資料 (kube-scheduler config (v1) reference)
- 瞭解關於配置多個排程器 (configuring multiple schedulers)
- 瞭解關於拓樸管理策略 (topology management policies)
- 瞭解關於 Pod 額外負擔 (Pod Overhead)
- 瞭解關於使用 Volume 的 Pod 的排程,在