Kubernetes 排程器
在 Kubernetes 中,_排程_ 指的是確保 Pod 能夠與 節點 匹配,以便 Kubelet 能夠執行它們。
排程概述
排程器會監聽新建立但尚未分配節點的 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 透過兩步操作為 Pod 選擇一個節點
- 過濾
- 評分
_過濾_步驟會找出可排程 Pod 的節點集合。例如,PodFitsResources 過濾器會檢查候選節點是否有足夠的可用資源來滿足 Pod 的特定資源請求。在此步驟之後,節點列表包含所有合適的節點;通常,會有多個。如果列表為空,則該 Pod 暫時無法排程。
在_評分_步驟中,排程器會對剩餘的節點進行排名,以選擇最合適的 Pod 放置位置。排程器根據活躍的評分規則為每個透過過濾的節點分配一個分數。
最後,kube-scheduler 將 Pod 分配給排名最高的節點。如果有多個節點得分相同,kube-scheduler 會隨機選擇其中一個。
有兩種支援的方式來配置排程器的過濾和評分行為
- 排程策略 允許你配置用於過濾的_斷言_和用於評分的_優先順序_。
- 排程配置檔案 允許你配置實現不同調度階段的外掛,包括:`QueueSort`、`Filter`、`Score`、`Bind`、`Reserve`、`Permit` 等。你還可以配置 kube-scheduler 執行不同的配置檔案。
下一步
- 閱讀有關 排程器效能調優 的內容
- 閱讀有關 Pod 拓撲分佈約束 的內容
- 閱讀 kube-scheduler 的 參考文件
- 閱讀 kube-scheduler 配置 (v1) 參考
- 瞭解有關 配置多個排程器 的內容
- 瞭解有關 拓撲管理策略 的內容
- 瞭解有關 Pod 開銷 的內容
- 瞭解有關使用卷的 Pod 排程