本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 中的 Pod 優先順序和搶佔
Kubernetes 因執行可伸縮的工作負載而聞名。它根據您的資源使用情況伸縮您的工作負載。當工作負載向上伸縮時,會建立更多應用程式例項。當應用程式對您的產品至關重要時,即使您的叢集資源緊張,您也希望確保這些新例項能夠被排程。解決此問題的一個顯而易見的解決方案是超額配置您的叢集資源,以備在伸縮時留出一些空閒資源。這種方法通常有效,但成本更高,因為您將不得不為大部分時間空閒的資源付費。
Pod 優先順序和搶佔是 Kubernetes 1.14 中普遍可用的排程器功能,它允許您在不超額配置叢集的情況下,為關鍵工作負載實現高水平的排程置信度。它還提供了一種在不犧牲關鍵工作負載可靠性的情況下提高叢集資源利用率的方法。
以受控成本實現有保障的排程
Kubernetes 叢集自動伸縮器是生態系統中一個出色的工具,它會在您的應用程式需要時向叢集新增更多節點。但是,叢集自動伸縮器有一些限制,可能不適用於所有使用者。
- 它不適用於物理叢集。
- 向叢集新增更多節點會增加成本。
- 新增節點不是即時的,可能需要幾分鐘才能使這些節點可用於排程。
Pod 優先順序和搶佔是另一種選擇。在這種方法中,您可以在一個叢集中組合多個工作負載。例如,您可以在同一個叢集中執行 CI/CD 流水線、ML 工作負載和關鍵服務。當多個工作負載在同一個叢集中執行時,您的叢集大小會大於您僅用於執行關鍵服務的叢集。如果您將關鍵服務設定為最高優先順序,而將 CI/CD 和 ML 工作負載設定為較低優先順序,那麼當您的服務需要更多計算資源時,排程器會搶佔(驅逐)足夠的較低優先順序工作負載(例如,ML 工作負載)的 Pod,以允許所有較高優先順序的 Pod 排程。
透過 Pod 優先順序和搶佔,您可以在自動伸縮器配置中設定叢集的最大大小,以確保在不犧牲服務可用性的情況下控制成本。此外,搶佔比向叢集新增新節點快得多。您的優先順序高的 Pod 會在幾秒鐘內被排程,這對於對延遲敏感的服務至關重要。
提高叢集資源利用率
執行關鍵服務的叢集運維人員會隨著時間的推移,對叢集中需要多少節點才能實現高服務可用性有一個粗略的估計。這個估計通常是保守的。這些估計會考慮流量高峰來確定所需的節點數量。叢集自動伸縮器可以配置為永不將叢集大小減小到此水平以下。唯一的問題是,這些估計通常是保守的,並且叢集資源在大部分時間可能處於利用不足的狀態。Pod 優先順序和搶佔允許您透過在叢集中執行非關鍵工作負載來顯著提高資源利用率。
非關鍵工作負載可能有很多超出叢集容量的 Pod。如果您為非關鍵工作負載設定負優先順序,則當非關鍵 Pod 處於待處理狀態時,叢集自動伸縮器不會向叢集新增更多節點。因此,您不會產生更高的費用。當您的關鍵工作負載需要更多計算資源時,排程器會搶佔非關鍵 Pod 並排程關鍵 Pod。
非關鍵 Pod 填補了叢集資源中的“空白”,從而提高了資源利用率,而不會增加您的成本。
參與其中
如果您對此功能有任何反饋,或者有興趣參與設計和開發,請加入排程特別興趣小組。