本文參考自:YuniKorn 中文官網:http://www.yunikorn.cn/ 一、YuniKorn 簡介 YuniKorn 是一種輕量級的通用資源調度程式,適用於容器編排系統。它的創建是為了一方面在大規模,多租戶環境中有效地實現各種工作負載的細粒度資源共用,另一方面可以動態地創建雲原生環境 ...
本文參考自:YuniKorn 中文官網:http://www.yunikorn.cn/
一、YuniKorn 簡介
YuniKorn 是一種輕量級的通用資源調度程式,適用於容器編排系統。它的創建是為了一方面在大規模,多租戶環境中有效地實現各種工作負載的細粒度資源共用,另一方面可以動態地創建雲原生環境。
YuniKorn 為混合工作負載提供統一的跨平臺調度體驗,包括無狀態批處理工作負載和狀態服務,支持但不限於 YARN 和 Kubernetes。YuniKorn['ju:nikɔ:n] 是一個虛構的詞,"Y"代表 YARN,"K"代表 K8s,"Uni"代表統一,其發音與"Unicorn"相同。創建它是為了最初支持這兩個系統,但最終目的是創建一個可以支持任何容器協調器系統的統一調度程式。
二、YuniKorn 組件介紹
YuniKorn 目前有 4 個組件,如下所示:
(1)yunikorn-scheduler-interface
(2)yunikorn-core
(3)yunikorn-k8shim
(4)yunikorn-web
三、YuniKorn 組件功能
YuniKorn -scheduler-interface:調度程式介面是資源管理平臺(如 YARN / K8s)將通過諸如 GRPC / 編程語言綁定之類的 API 與之交談的抽象層。
YuniKorn Core:YuniKorn Core 封裝了所有調度演算法,它從資源管理平臺(如 YARN / K8s)下麵收集資源,並負責資源分配請求。它決定每個請求的最佳部署位置,然後將響應分配發送到資源管理平臺。調度程式核心與下層平臺無關,所有通信都通過調度程式介面。
Scheduler Shim Layers:調度程式 Shim 在主機系統內運行(如 YARN / K8s),它負責通過調度程式介面轉換主機系統資源和資源請求,並將它們發送到調度程式核心。在做出調度程式決策時,它負責實際的 pod / 容器綁定。
Scheduler UI:調度程式 UI 為已托管的節點,計算資源,應用程式和隊列提供簡單視圖。
四、YuniKorn 誕生背景
很多企業用戶在不同的平臺上運行工作負載,例如 YARN 和 Kubernetes。他們需要使用不同的資源調度程式,以便規劃其工作負載有效地在這些平臺上運行。但是,在目前來看,調度程式生態系統是分散的,並且在很多方面不是很理想。例如:
(1)YARN 具有批量工作負載的 Capacity Scheduler 和 Fair Scheduler。
(2)K8s 具有服務的預設調度程式。對於批處理工作負載,社區有 Kube-batch,Poseidon,Rubix(Spark 的 Scheduler 擴展)。
五、YuniKorn 架構設計
YuniKorn 的其中一個設計目標是將調度程式與下麵的資源管理系統分離,為此,YuniKorn創建了一個定義通信協議的通用調度程式介面。通過利用它,scheduler-core 和 shim 一起工作來處理調度請求。關於 YuniKorn 架構設計,如下所示:
六、YuniKorn 的調度功能特性
以下是 YuniKorn 目前支持的調度功能列表:
(1)調度功能支持批處理作業和長期運行 / 有狀態服務
(2)具有最小 / 最大資源配額的分層池 / 隊列
(3)隊列,用戶和應用程式之間的資源公平性
(4)基於公平性的跨隊列搶占
(5)自定義資源類型(如 GPU)調度支持
(6)豐富的編排約束支持
(7)根據策略自動將傳入的容器請求映射到隊列
(8)對節點使用專用配額 / ACL 管理將大的集群拆分成若幹子群集