本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 中的 Pod 優先順序和搶佔
Kubernetes 以運行可擴展的工作負載而聞名。它會根據資源使用量來擴展您的工作負載。當工作負載擴展時,會建立更多應用程式實例。當應用程式對您的產品至關重要時,您會希望確保即使在叢集資源壓力下,也能排程這些新實例。解決此問題的一個顯而易見的解決方案是過度配置您的叢集資源,以便在擴展情況下有一些閒置資源可用。這種方法通常有效,但成本更高,因為您必須為大多數時間處於閒置狀態的資源付費。
Pod 優先順序和搶佔是 Kubernetes 1.14 中普遍提供的排程器功能,可讓您在不需過度配置叢集的情況下,為您的關鍵工作負載實現高排程信心。它還提供了一種在不犧牲基本工作負載可靠性的情況下,提高叢集資源利用率的方法。
以受控成本保證排程
Kubernetes 叢集自動擴展器是生態系統中一個出色的工具,可在您的應用程式需要時向叢集新增更多節點。但是,叢集自動擴展器有一些限制,可能不適用於所有使用者
- 它不適用於實體叢集。
- 向叢集新增更多節點會增加成本。
- 新增節點不是即時的,可能需要幾分鐘才能使這些節點可用於排程。
另一種替代方案是 Pod 優先順序和搶佔。在此方法中,您將多個工作負載合併到單一叢集中。例如,您可以在同一個叢集中運行您的 CI/CD 管道、ML 工作負載和您的關鍵服務。當多個工作負載在同一個叢集中運行時,您的叢集大小會大於您僅用於運行關鍵服務的叢集。如果您為您的關鍵服務提供最高優先順序,並為您的 CI/CD 和 ML 工作負載提供較低優先順序,當您的服務需要更多運算資源時,排程器會搶佔(驅逐)足夠的低優先順序工作負載 Pod,例如 ML 工作負載,以允許排程所有您的較高優先順序 Pod。
透過 Pod 優先順序和搶佔,您可以在自動擴展器配置中設定叢集的最大大小,以確保您的成本得到控制,而不會犧牲服務的可用性。此外,搶佔比向叢集新增新節點快得多。在幾秒鐘內,您的優先順序較高的 Pod 就會排程,這對於延遲敏感型服務至關重要。
提高叢集資源利用率
運行關鍵服務的叢集運營商隨著時間的推移,會大致估算出他們在叢集中實現高服務可用性所需的節點數量。此估計通常是保守的。此類估計會將流量突增納入考量,以找出所需的節點數量。可以將叢集自動擴展器配置為永遠不要將叢集的大小縮減到此水準以下。唯一的問題是,此類估計通常是保守的,並且叢集資源在大多數時間可能仍然未充分利用。Pod 優先順序和搶佔可讓您透過在叢集中運行非關鍵工作負載來顯著提高資源利用率。
非關鍵工作負載可能具有更多可以容納在叢集中的 Pod。如果您為您的非關鍵工作負載提供負優先順序,則當非關鍵 Pod 處於待定狀態時,叢集自動擴展器不會向您的叢集新增更多節點。因此,您不會產生更高的費用。當您的關鍵工作負載需要更多運算資源時,排程器會搶佔非關鍵 Pod 並排程關鍵 Pod。
非關鍵 Pod 會填補叢集資源中的「空洞」,從而在不提高成本的情況下提高資源利用率。
參與其中
如果您對此功能有任何意見回饋,或有興趣參與設計和開發,請加入排程特別興趣小組。