概述
Volcano是一個基于Kubernetes的云原生批量計算平臺魄藕,也是CNCF的首個批量計算項目涡匀。
Volcano 主要用于AI和大數(shù)據(jù)等諸多高性能計算場景淌实,對主流通用計算框架均有很好的支持募逞。它提供如下能力:
- 高性能計算任務(wù)調(diào)度
- 異構(gòu)設(shè)備管理
- 任務(wù)運行時管理
Volcano架構(gòu)
1凌埂、Volcano全景
Volcano是基于Kubernetes的高性能批量計算平臺驱显,目前支持幾乎所有的主流計算框架,包括TensorFlow侨舆、Kubeflow秒紧、MPI、PyTorch挨下、飛漿熔恢、Spark等。
Volcano支持的部分計算框架遇到的問題:
- 1)operator部署運維復(fù)雜
- 2)不同框架對作業(yè)管理臭笆、并行計算等要求不同
- 3)計算密集高叙淌,資源需求波動大,需要高級調(diào)度能力
Volcano面向主流計算框架提供: - 1)統(tǒng)一容器基礎(chǔ)設(shè)施愁铺,提高資源利用率
- 2)通用作業(yè)管理鹰霍、隊列Fair-share, Gang, bin-pack等高級調(diào)度算法
- 3)簡化運維管理
2、Volcano整體架構(gòu)
Volcano的系統(tǒng)架構(gòu)
Volcano由scheduler茵乱、controllermanager茂洒、admission和vcctl組成:
- Scheduler Volcano scheduler通過一系列的action和plugin調(diào)度Job,并為它找到一個最適合的節(jié)點瓶竭。與Kubernetes default-scheduler相比督勺,Volcano與眾不同的 地方是它支持針對Job的多種調(diào)度算法。
- Controllermanager Volcano controllermanager管理CRD資源的生命周期斤贰。它主要由Queue ControllerManager智哀、 PodGroupControllerManager、 VCJob ControllerManager構(gòu)成荧恍。
- Admission Volcano admission負(fù)責(zé)對CRD API資源進(jìn)行校驗瓷叫。
- Vcctl Volcano vcctl是Volcano的命令行客戶端工具。
Volcano利用聲明式的CRD定義我們的API送巡,主要有3個核心的API: - Volcano Job:對高性能任務(wù)的通用定義
- PodGroup:提供了Job中Task的管理能力
- Queue:為任務(wù)的分類提供了基礎(chǔ)
Volcano 架構(gòu)的核心組件主要包含三個: - Admission:對Volcano CRD API提供校驗?zāi)芰Γ?/li>
- ControllerManager:負(fù)責(zé)對Volcano CRD進(jìn)行資源管理;
- Scheduler:對任務(wù)提供豐富的調(diào)度能力摹菠。
3、Volcano工作流程
從零開始運行Volcano作業(yè):
- 1)用戶創(chuàng)建一個 Volcano 作業(yè)
- 2)Volcano Admission 攔截作業(yè)的創(chuàng)建請求授艰,并進(jìn)行合法性校驗
- 3)Kubernetes 持久化存儲 Volcano Job 到 ETCD
- 4)ControllerManager 通過 List-Watch 機制觀察到Job 資源的創(chuàng)建辨嗽,創(chuàng)建任務(wù)(Pod)
- 5)Scheduler 負(fù)責(zé)任務(wù)的調(diào)度,綁定 Node
- 6)Kubelet Watch 到 Pod的創(chuàng)建淮腾,接管 Pod 的運行
- 7)ControllerManager 監(jiān)控所有任務(wù)的運行狀態(tài)糟需,保證所有的任務(wù)在期望的狀態(tài)下運行
Volcano核心概念及功能
1屉佳、Volcano核心概念
- 1)Queue:Queue的概念源于 Yarn,它是Cluster 級別的資源對象洲押,可為其聲明資源配額武花,也可由多namespace 共享,并且提供 soft isolation
- 2)PodGroup:PodGroup是任務(wù)的分組杈帐,它與 queue 綁定体箕,占用隊列的資源。它與 Volcano Job 是一對一的關(guān)系挑童;也可為其聲明 Scheduling 條件
- 3)Volcano Job:它是批量計算作業(yè)的定義累铅,支持定義作業(yè)所屬隊列、生命周期策略站叼、所包含的任務(wù)模板以及持久卷等信息
2娃兽、作業(yè)管理插件
- svc:提供不同類型任務(wù)之間互訪能力
- env:任務(wù)索引,例如 Tensorflow Worker index
- ssh:ssh 秘鑰對創(chuàng)建及掛載尽楔,主要供 MPI 作業(yè)使用
-### 3投储、Scheduler架構(gòu)
Scheduler支持動態(tài)配置和加載。
4阔馋、核心調(diào)度算法
- 1)Gang Scheduling
- 2)Fair Share
- 3)Preempt & Reclaim
- 4)Reserve & Backfill
- 5)Topology Aware Scheduling
- 6)GPU Sharing
Volcano 代碼目錄結(jié)構(gòu)
- cmd目錄是Volcano所有組件啟動的入口玛荞;
- config 是Volcano的配置;
- defs 是安裝時的配置呕寝;
- docs 是Volcano的設(shè)計文檔勋眯;
- example 提供了簡單的例子,hack 提供安裝時的腳本下梢;installer 提供安裝的模板凡恍。
- pkg 是最重要的目錄,里面包含了 api怔球、controller、scheduler 浮还、webhook 等代碼竟坛。
- test 提供了e2e測試用例, vendor是依賴庫。
安裝部署
1钧舌、Volcano Install
Volcano安裝部署有多種方式:若已存在K8S集群担汤,建議通過 Helm方式安裝部署,該方式支持自定義安裝配置洼冻;開發(fā)者建議通過Development Yaml方式部署崭歧。
對于開發(fā)者,Volcano已內(nèi)置一鍵式安裝部署腳本撞牢,路徑為 volcano. sh/volcano/hack/local-up-volcano. sh率碾。運行該腳本時叔营,默認(rèn)會使用kind創(chuàng)建 Docker in Docker的模擬集群,并安裝部署Volcano所宰。
2绒尊、Volcano 組件
正確安裝部署后,將生成4個組件仔粥,分別為:Volcano-admission婴谱、Volcano-admission-init、Volcano-controllers躯泰、 Volcano-scheduler ,其中admission-init以作業(yè)的方式生成證書谭羔。