排程器效能調校
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 個節點。
注意
在可行節點少於 100 個的叢集中,排程器仍然會檢查所有節點,因為沒有足夠的可行節點可以提早停止排程器的搜尋。
在小型叢集中,如果您為 percentageOfNodesToScore
設定較低的值,您的變更將沒有或幾乎沒有效果,原因類似。
如果您的叢集有數百個或更少的節點,請將此組態選項保留為預設值。進行變更不太可能顯著改善排程器的效能。
設定此值時要考慮的一個重要細節是,當叢集中檢查可行性的節點數量較少時,某些節點不會被發送以針對給定的 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。