本文已發布超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Poseidon-Firmament 排程器 – 基於流網絡圖的排程器
簡介
雲端規模資料中心環境(也稱為資料中心即電腦或 倉儲規模運算 - WSC)中的叢集管理系統,例如 Mesos、Google Borg、Kubernetes 等,通常透過執行諸如追蹤機器活動狀態、啟動、監控、終止工作負載以及更重要的是使用叢集排程器來決定工作負載放置位置等任務來管理應用程式工作負載。
叢集排程器基本上執行工作負載至運算資源的排程 – 將工作在全球 WSC 環境中的放置位置結合起來,使「倉儲規模電腦」更有效率、提高利用率並節省能源。叢集排程器範例包括 Google Borg、Kubernetes、Firmament、Mesos、Tarcil、Quasar、Quincy、Swarm、YARN、Nomad、Sparrow、Apollo 等。
在這篇部落格文章中,我們簡要介紹 Kubernetes 中基於新穎 Firmament 流程網路圖的排程方法 ( OSDI 論文 )。我們特別描述 Firmament 排程器,以及它如何使用 Poseidon 作為整合膠水與 Kubernetes 叢集管理員整合。我們已看到這種新穎的排程方法在效能基準測試數字方面表現出極為驚人的排程吞吐量。最初,Firmament 排程器是由劍橋大學研究人員 Malte Schwarzkopf 和 Ionel Gog 概念化、設計和實作。
Poseidon-Firmament 排程器 – 運作方式
在非常高的層級,Poseidon-Firmament 排程器 透過結合基於新穎流程網路圖的排程功能以及預設 Kubernetes 排程器,來擴增目前的 Kubernetes 排程功能。它將排程問題建模為流程網路圖上的基於約束的最佳化 – 透過將排程簡化為最小成本最大流量最佳化問題。由於固有的重新排程功能,新的排程器實現了全域最佳排程環境,該環境持續動態地精進工作負載放置位置。
主要優點
基於流程圖排程的 Poseidon-Firmament 排程器 提供以下主要優點
工作負載 (Pod) 進行批量排程,以實現大規模的排程決策。
根據廣泛的效能測試結果,隨著叢集中節點數量的增加,Poseidon-Firmament 的擴充性遠優於 Kubernetes 預設排程器。這是因為 Poseidon-Firmament 能夠在工作負載之間攤銷越來越多的工作。
在運算資源需求在各項工作 (Replicaset/Deployment/Job) 中大致均勻的情況下,Poseidon-Firmament 排程器的吞吐量效能數字遠遠優於 Kubernetes 預設排程器。Poseidon-Firmament 排程器的端對端吞吐量效能數字(包括綁定時間)隨著叢集中節點數量的增加而持續提高。例如,對於 2,700 個節點的叢集(圖表顯示在 此處),Poseidon-Firmament 排程器實現了比 Kubernetes 預設排程器高出 7 倍或更高的端對端吞吐量,其中包括綁定時間。
複雜規則約束的可用性。
Poseidon-Firmament 中的排程非常動態;它在每次排程執行期間都使叢集資源保持全域最佳狀態。
高效的資源利用率。
Firmament 流程網路圖 – 概述
Firmament 排程器在流程網路上執行最小成本流量演算法,以找到最佳流量,並從中提取隱含的工作負載 (Pod 放置位置)。流程網路是一個有向圖,其弧線將流量從來源節點(即 Pod 節點)傳輸到接收節點。與每個弧線相關聯的成本和容量限制了流量,並指定了流量的優先路徑。
下圖 1 顯示了具有兩個任務(工作負載或 Pod)和四台機器(節點)的叢集的流程網路範例 – 左側的每個工作負載都是一個單位流量的來源。所有此類流量都必須排入接收節點 (S),才能獲得最佳化問題的可行解。

圖 1. 流程網路範例
Poseidon 調解層 – 概述
Poseidon 是一項服務,充當 Firmament 排程器與 Kubernetes 的整合膠水。它透過結合新的基於流程網路圖的 Firmament 排程功能以及預設 Kubernetes 排程器來擴增目前的 Kubernetes 排程功能;多個排程器同時執行。下圖 2 描述了高階整體設計,說明 Poseidon 整合膠水如何與底層的基於 Firmament 流程網路圖的排程器協同運作。

圖 2. Firmament Kubernetes 整合概述
作為 Kubernetes 多個排程器支援的一部分,每個新的 Pod 通常由預設排程器排程,但可以指示 Kubernetes 在 Pod 部署時使用另一個自訂排程器(在我們的案例中為 Poseidon-Firmament)的名稱。在這種情況下,預設排程器將忽略該 Pod,並允許 Poseidon 排程器將 Pod 排程到相關節點。
注意
有關此專案設計的詳細資訊,請參閱設計文件。可能的使用案例情境 – 何時使用
Poseidon-Firmament 排程器 由於其批量排程方法的優越性(相較於 K8s 一次一個 Pod 的方法),因此能夠實現極高吞吐量的大規模排程環境。在我們廣泛的測試中,我們觀察到只要傳入 Pod 的資源需求 (CPU/記憶體) 在各項工作 (Replicaset/Deployment/Job) 中是均勻的,吞吐量效益就會顯著,這主要是因為工作之間的有效工作攤銷。
雖然 Poseidon-Firmament 排程器 能夠排程各種類型的工作負載(服務、批次等),但以下是它最擅長的少數使用案例
對於由大量任務組成的「大數據/人工智慧」工作,吞吐量效益非常顯著。
對於工作負載資源需求在各項工作 (Replicaset/Deployment/Job) 中均勻的服務或批次工作情境,吞吐量效益也很顯著。
目前專案階段
目前 Poseidon-Firmament 專案是一個孵化專案。Alpha 版本可在 https://github.com/kubernetes-sigs/poseidon 取得。