排程器效能調優
Kubernetes v1.14 [beta]
kube-scheduler 是 Kubernetes 的預設排程器。它負責在叢集中將 Pod 放置到節點上。
叢集中滿足 Pod 排程需求的節點被稱為該 Pod 的 可排程 節點。排程器會為 Pod 找到可排程節點,然後執行一系列函式對這些可排程節點進行打分,選擇分數最高的節點來執行 Pod。排程器透過一個名為 繫結 (Binding) 的過程將此決策通知 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,排程器以迴圈的方式迭代節點。你可以想象節點在一個數組中。排程器從陣列的開頭開始,檢查節點的可排程性,直到找到足夠多的節點,數量由 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。