排程器效能調校

功能狀態: Kubernetes v1.14 [beta]

kube-scheduler 是 Kubernetes 預設的排程器。它負責將 Pod 放置在叢集中的節點上。

叢集中符合 Pod 排程需求的節點稱為 Pod 的「可行」節點。排程器會為 Pod 尋找可行的節點,然後執行一組函數來為可行的節點評分,並選取可行節點中得分最高的節點來執行 Pod。然後,排程器會在稱為「綁定」的過程中,將此決策通知 API 伺服器。

本頁說明與大型 Kubernetes 叢集相關的效能調校最佳化。

在大型叢集中,您可以調校排程器的行為,以平衡排程結果中的延遲(快速放置新的 Pod)和準確性(排程器很少做出不良的放置決策)。

您可以透過 kube-scheduler 設定 percentageOfNodesToScore 來組態此調校設定。此 KubeSchedulerConfiguration 設定決定叢集中排程節點的閾值。

設定閾值

percentageOfNodesToScore 選項接受介於 0 到 100 之間的整數值。值 0 是一個特殊數字,表示 kube-scheduler 應使用其編譯時內建的預設值。如果您將 percentageOfNodesToScore 設定為高於 100,kube-scheduler 的行為就像您已設定值為 100 一樣。

若要變更值,請編輯 kube-scheduler 組態檔,然後重新啟動排程器。在許多情況下,組態檔可以在 /etc/kubernetes/config/kube-scheduler.yaml 找到。

在您進行此變更後,您可以執行

kubectl get pods -n kube-system | grep kube-scheduler

以驗證 kube-scheduler 元件是否健康。

節點評分閾值

為了改善排程效能,kube-scheduler 一旦找到足夠的可行節點,就可以停止尋找。在大型叢集中,與會考慮每個節點的簡單方法相比,這可以節省時間。

您可以指定足夠節點的閾值,以叢集中所有節點的整數百分比表示。kube-scheduler 會將其轉換為整數節點數。在排程期間,如果 kube-scheduler 識別出足夠的可行節點以超過組態的百分比,則 kube-scheduler 會停止搜尋更多可行的節點,並繼續進行評分階段

排程器如何迭代節點 詳細描述了此過程。

預設閾值

如果您未指定閾值,Kubernetes 會使用線性公式計算一個數字,該公式對於 100 個節點的叢集產生 50%,對於 5000 個節點的叢集產生 10%。自動值的下限為 5%。

這表示 kube-scheduler 始終會對至少 5% 的叢集進行評分,無論叢集有多大,除非您已明確將 percentageOfNodesToScore 設定為小於 5。

如果您希望排程器對叢集中的所有節點進行評分,請將 percentageOfNodesToScore 設定為 100。

範例

以下是一個範例組態,將 percentageOfNodesToScore 設定為 50%。

apiVersion: kubescheduler.config.k8s.io/v1alpha1
kind: KubeSchedulerConfiguration
algorithmSource:
  provider: DefaultProvider

...

percentageOfNodesToScore: 50

調校 percentageOfNodesToScore

percentageOfNodesToScore 必須是介於 1 到 100 之間的值,預設值根據叢集大小計算。還有一個硬編碼的最小值 100 個節點。

設定此值時要考慮的一個重要細節是,當叢集中檢查可行性的節點數量較少時,某些節點不會被發送以針對給定的 Pod 進行評分。因此,可能在執行給定 Pod 時得分更高的節點甚至可能不會傳遞到評分階段。這將導致 Pod 的放置不夠理想。

您應避免將 percentageOfNodesToScore 設定得非常低,以避免 kube-scheduler 做出頻繁且不良的 Pod 放置決策。除非排程器的輸送量對於您的應用程式至關重要,並且節點的分數並不重要,否則請避免將百分比設定為低於 10% 的任何值。換句話說,只要 Pod 可行,您就寧願在任何節點上執行 Pod。

排程器如何迭代節點

本節適用於想要了解此功能內部細節的人員。

為了讓叢集中的所有節點都有公平的機會被考慮用於執行 Pod,排程器以循環方式迭代節點。您可以想像節點位於一個陣列中。排程器從陣列的開頭開始,檢查節點的可行性,直到找到足夠數量的節點,如 percentageOfNodesToScore 所指定。對於下一個 Pod,排程器會從上次檢查前一個 Pod 的節點可行性時停止的節點陣列中的位置繼續。

如果節點位於多個區域中,排程器會迭代不同區域中的節點,以確保來自不同區域的節點在可行性檢查中被考慮。例如,考慮兩個區域中的六個節點

Zone 1: Node 1, Node 2, Node 3, Node 4
Zone 2: Node 5, Node 6

排程器依此順序評估節點的可行性

Node 1, Node 5, Node 2, Node 6, Node 3, Node 4

在檢查完所有節點後,它會回到節點 1。

接下來是什麼?

上次修改時間:2024 年 6 月 27 日下午 6:06 PST:fix: minimum feasible nodes 50->100 (44460b3ee3)