隨着 Kubernetes 做爲 AI、大數據和高性能批量計算的下一代基礎設施的趨勢逐漸清晰,愈來愈多的企業對 Kubernetes 在深度學習、科學計算、高性能渲染等方面提出了更高的要求。算法
項目挑戰docker
原生 Kubernetes 做爲通用的容器調度方案,仍與高性能計算場景下業務調度訴求存在必定差距,主要體如今:安全
待完善做業視角調度能力網絡
Kubernetes 自己是以資源視角進行資源調度,Pod 做爲基本的調度單元存在。Kubernetes 採用依次調度的方式實現對每一個容器的調度管理,缺少業務的做業視角進行調度的能力。框架
在大數據、人工智能、高性能計算的應用場景下,每每須要多個容器同時配合執行計算。而 Kubernetes 原生的依次調度方式,徹底沒法知足大數據、人工智能場景下的調度需求。運維
例如,某個大數據應用須要跑1個 Driver 容器+10個 Executor 容器。若是容器以順序的方式一個一個進行調度,在啓動最後一個 Executor 容器時,因爲資源不足而調度失敗,最終形成服務沒法啓動。雖然,前面建立好的9個 Executor 容器運行正常,但平臺沒法提供該大數據應用的正常服務,從資源佔用上來看也是一種浪費狀況。分佈式
或者,當同時提交多個做業任務後,可能會由於資源不足而形成死鎖,進而致使集羣實際資源被佔滿,最終形成全部做業任務都沒法運行的最壞狀況。微服務
待實現 GPU 資源共享切分工具
因爲開源的 Kubernetes 自己對 GPU 提供的管理能力比較弱,沒法實現 GPU共享按需調度的能力要求。oop
每一個容器能夠請求一個或多個 GPU,不支持 GPU 的資源切分
K8S 節點必須預裝相應的驅動程序
必須預裝 nvidia-docker 程序
在容器中,要想調用 NVIDIA 的 GPU ,須要經過 nvidia-docker 調用。nvidia-docker 是一個可使用 GPU 的 docker,它在 docker 上作了一層封裝,經過 nvidia - docker - plugin 將 GPU 調用到 docker 上。
從 K8S 1.8版本後,推薦使用 Device - Plugins 方式來調用 GPU 。
待增長大數據等場景基因
Kubernetes 的核心工做負載面向無狀態應用、微服務應用等互聯網類應用進行設計,對水平伸縮、滾動升級有支持比較好。而到了大數據和高性能計算領域,想直接使用 Kubernetes 完成相應的做業和任務是很是困難。
待完善傳統方案資源隔離性
隨着 Hadoop 生態崛起後,在資源的隔離方面 Yarn 就開始使用 cgroup 用來實現對 CPU 資源隔離管理,藉助 JVM 的內存隔離機制從而實現對內存資源隔離管理;對於磁盤 IO 和網絡 IO 的隔離,目前社區還在討論中;對於文件系統環境的隔離,始終也沒法作到完整的文件系統隔離方案。
從總體上看,Yarn 的資源隔離能力比較弱,這就形成了當多個任務運行到同一個工做節點上時,不一樣任務之間會存在資源搶佔的問題,不一樣任務之間相互影響。
待加強彈性 按需擴容
大數據應用的高峯每每有明顯的週期性特徵。例如,實時計算資源消耗主要在白天。但大數據資源管理平臺廣泛缺少彈性管理能力,沒法按應用所需進行快速擴容,爲了應對業務高峯和突發的計算任務,只能經過預留出足夠多的資源方式來保證做業任務可以正常運行。
解決方案
從2020年開始,愈來愈多的大數據、高性能計算等業務開始往 K8S 遷移。博雲智能算力引擎,經過引入組調度、公平調度等方式,實現了面向做業進行調度,解決原生 K8S 調度器面向 Pod 調度的問題;經過引入CNCF批量計算項目volcano,實現大數據生態做業、隊列管理能力;經過引入博雲容器雲平臺,實現了 GPU 調度能力、資源隔離和資源抽象化供給能力。從而,進一步增強容器做爲資源平臺的能力造成,爲大數據、人工智能、高性能計算等場景提升算力服務作好了準備。
博雲智能算力引擎總體由三部分組成:
業務層:由業務軟件來調用博雲智能算力引擎的接口,達到做業任務的批量計算和編排調度的管理要求;
調度層:由博雲智能算力引擎來提供總體的調度、運算等服務能力;
資源層:由大量物理機或虛擬機爲博雲的企業級 K8S 集羣提供爲計算賦能。
實現靈活的做業調度算法
基於如下原則對做業進行排隊,提高整個集羣的資源利用率和做業吞吐量。
集羣資源使用狀況
做業提交時間
做業資源申請量
做業優先級
做業排他性
做業防餓死
實現 GPU 多維調度能力
平臺實現了 GPU 的統一管理、多維隔離、資源共享等調度能力。支持多個節點能夠配置不一樣數量、不一樣類型的 GPU 卡,實現統一 GPU 卡管理;支持租戶或namespace 級別的 GPU 資源隔離,支持按照 GPU 卡類型進行隔離;支持多個業務共享 GPU 卡,支持 GPU 顯存隔離,提高 GPU 卡資源利用率。
實現基於 MPI 類型做業
通常一個運行的 MPI 做業,由 master/worker 兩部分組成,master 負責啓動 mpirun 命令,worker 負責執行真正的計算做業。
平臺經過對多個 pod 模板定義設置,實現分別對應 master/worker 的定義。藉助 gang scheduling,保證做業中的全部 pod 可以同時啓動,已實現做業的管理。支持做業生命週期管理功能,當 mpirun 結束時,結束整個任務。
實現基於 Spark 框架做業
自 Spark 2.3版本開始,原生支持在 Kubernetes 中部署。
藉助容器的優點,將運行時打包進鏡像中,能夠加快分發速度並提高可移植性。藉助 Kubernetes 的優點,可以實現容器化應用的快速部署、彈性擴容、性能監控、日誌收集等管理功能。
實現隊列和優先級搶佔
將整個集羣的資源分配到不一樣的隊列中,讓不一樣的用戶能夠按需配置使用不一樣的隊列。當某隊列中資源空閒時,能夠提供給另外一個隊列中的做業使用。
當同時運行的做業衆多時,平臺能夠實現高優先級的做業能夠搶佔低優先級的做業資源,從而實現提早調度管理。同時,平臺也可以避免低優先的任務「餓死」,長時間得不到運行。
實現高性能的容器網絡
大數據、超算等場景下,須要在短期啓動數以千計的計算實例並運行,這就對容器網絡性能提出了更高的要求。
博雲自研的 BeyondFabric 網絡方案,經歷了5個版本的迭代,已經在衆多客戶生產環境中穩定運行。目前,BeyondFabric 網絡方案已實現對計算業務中的啓動時間、網絡帶寬、網絡就緒時間等指標的高性能支撐。
同時,BeyondFabric 網絡可以爲 Windows 系統提供更優秀的容器網絡性能。
實現用戶資源深度隔離
在租戶層面,平臺提供多租戶共享底層物理資源(計算、存儲、網絡),作到不一樣租戶的應用、數據、虛擬網絡的隔離,對於租戶自有的應用,租戶能夠自由選擇隔離或者打通。
在資源層面,Docker 在一臺 Linux 上啓動多個在獨立沙箱內運做的應用,相互不影響。對不一樣容器的 CPU、內存、網絡、存儲、進程等進行隔離。
實現資源彈性按需擴容
彈性伸縮是容器雲的一個重要特性,也是實施容器雲的一個重要業務場景。藉助容器雲的彈性能力,實現業務高峯時的資源快速擴容,避免爲應對業務高峯預留過多的資源。
應用場景
HPC 高性能計算做爲傳統分佈式計算模式的表明,在工業仿真、視覺渲染、氣象環境、石油勘探、科研課題等諸多領域依然有着普遍的應用。
隨着雲原生技術的爆發,Kubernetes 做爲雲原生應用編排、管理的工具, 被愈來愈多的應用所接受和選擇。衆多用戶開始但願能將 HPC 應用遷移到容器中運行,經過 Kubernetes 強大的功能來進行做業管理。
工業仿真
某用戶有大量基於 Windows 的 HPC 應用,在遷移到容器環境以前,常常遇到資源佔用高,做業沒有隔離,維護須要後臺手動操做等狀況。
伴隨 HPC 應用遷移到容器雲後,平臺經過優化做業任務,實現縮短計算時長;平臺提供健全資源隔離,下降了不一樣部門因提交做業所形成的數據安全風險,大大提高了運行效率。實現了單次做業提交建立實例數從原來的 300+,提高到如今 1000+,使用內存資源約 15-20T 的規模。
視覺渲染
用戶當前渲染業務仍是以單機服務爲主,現有軟件對批量計算做業調度不夠靈活,對集羣控制能力也比較差,做業配置、建立、釋放還都是以手工操做爲主。
經過對業務的容器化改造,實現資源高性能調度、秒級彈性伸縮、GPU 統一管理等能力,輕鬆應對大規模的渲染需求。
方案優點
博雲智能算力引擎解決方案,基於容器技術實現了高性能計算場景的統一調度管理平臺,方案爲上層各種超算業務提供了大數據、人工智能及雲原生做業編排等技術服務。該方案具備以下技術優點:
統一的資源管理
支持 Linux/Windows 計算資源池
支持 GPU 計算
支持批次、節點組管理
提高資源利用率
靈活的調度機制
支持 gang-scheduling 機制
支持主流的調度算法
支持做業防餓死、排他性等機制
提高做業吞吐率
高效的做業提交
支持 HPC、大數據、人工智能等做業
支持 MPI、TensorFlow 快捷提交
經過 DAG 模式支持 ETL 等常規做業
做業以容器運行,提高做業隔離性
多樣的排隊策略
多隊列管理,支持資源搶佔
支持設置優先級
支持隊列可視化
全面的數據可視
對接 S3 等存儲系統
實時在線查看數據
集中的日誌告警
在線查看做業日誌
在線查看做業監控數據
在線配置告警規則
完善的租戶體系
劃分租戶資源
租戶數據隔離
操做權限審計
兼容全信創生態
支持 X8六、海光、ARM 平臺
支持中標麒麟、統信等操做系統
已獲取主流認證證書
總結
經過容器化技術,博雲智能算力引擎解決方案充分利用容器化技術,使大數據、人工智能、高性能計算等場景在容器化技術的應用下,進一步提高了資源使用效率和下降運維管理複雜性,使雲原生技術價值獲得進一步釋放,支撐高性能等計算場景下的企業完成數字化轉型。