排程器效能調優

特性狀態: 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 個節點的硬編碼最小值。

設定此值時要考慮的一個重要細節是,當叢集中檢查可排程節點的數量較少時,有些節點不會被髮送去為給定的 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。

下一步

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