Project: Volcano (Orchestration & Management / Scheduling & Orchestration)
File: Volcano - A Kubernetes Native Batch System.pdf

Klaus MaVolcano: A Kubernetes Native
Batch System
2018 ~ 2020github.com/ volcano -sh/volcano
@k82cnBI, Data lake, AI Platform, Customized System ……
SQL
Hive
Spark 
SQL
……Streaming
Spark -
Streaming
Flink
……Batch
Spark
Flink Batch
MR
……WKflow
Oozie
Argo
Pipeline
……
HDFS, Hbase , NoSQL ……AI
TesorFlow
Pytorch
Caffee
……电商 金融 视频
Service
DevOps
Mesher
…………
 超算
HPC
WRF
MPI
Cromwell
……资讯
迁移•业务复杂性 驱动统一资源管理
随着业务复杂性 的增加，单一的框架、技
术很难支撑业务的发展
基于不同技术栈的资源池增加了 资源成本 ，
管理、运维成本
不同技术栈增加了 技术成本 ，e.g. YARN
和K8s经验无法互通
•云原生 促进统一资源管理落地
云原生 (CNCF) 提供了 活跃的社区和丰富的
生态系统 ，支持大数据、 AI等多种负载；
促使用户向云原生技术迁移
Kubernetes 提供了标准的生态、扩展接
口，无缝接入 网络、存储、调度 等能力
各硬件厂商提供对 Kubernetes 的支持，
例如 GPU，ARM, IB 等
GPUx86 鲲鹏 昇腾 GPU多领域框架 + 统一资源管理Kubernetes + 多领域框架
2018 2010 2013•Slurm
199*•LSF
•PBS
•SGE
2005•Symphony •SGE/UGE
2005 ~ 2008•Globus •HPC for AI
2015•Tensorflow
•Caffe2
•Pytorch
2017•kubeflow•Hadoop 1.0
•HDFS
2006 2008•Hive
2012•YARN
•Impala
2014•Spark
•Storm
•Flink
2010•Hbase
•NOSQL
2013•Tez
2017•Spark on k8sDecouple framework 
& resource manager
K8s, 
framework, 
containerisc/vhpc
•Kubeflow
•kubecon
1.New framework and ecosystem is possible since Spark
2.YARN, Mesos , Kubernetes are known as resource manager
3.HPC application would like to leverage container (ISC/ VHPC )
4.New bigdata framework, e.g. Spark, start to support kubernetes
5.Most AI application are built on Kubernetes nativelyWhat’s new?Volcano: A K8S Native Batch System
•挑战 1: 面向高性能负载的调度策略 , e.g. fair -share, gang -scheduling
•挑战 2: 支持多种作业生命周期管理 , e.g. multiple pod template, error handling
•挑战 3: 支持多种异构硬件 , e.g. GPU , FPGA
•挑战 4: 面向高性能负载的性能优化， e.g. scalability, throughput, network, container 
runtimeKubernetesA CNCF Project
CRD + Controllers + Scheduler
kube -apiserverETCDkube -controller -
managerkube -scheduler
kubelet
kubectlJobvc-controllers
Queuevc-scheduler
12
3 54
vsubOverall Architecture
•相比默认调度器， AI训练
作业性能提升 31%
•测试结果为 3 个作业的总
执行时间 ; 每个作业包含
2ps + 4workers •相比默认调度器， AI训练
作业性能提升 30%
•Gang -scheduling 同时解
决了多作业死锁的情况
•相比默认调度器，
Spark 作业性能提
升51%
•测试结果为 104 个
TP-DCS 查询语句
usedNode
usedNode
……
AI 大数据 HPC
……
派发作业1
2
3支持多种类型作业混
合部署
支持多队列 用于多租
户资源共享， 资源规
划；并分时复用 资源
支持多种高级调度
策略 ，有效提升整
集群资源利用率
4•支持资源实时监控，
用于高精度资源调
度，例如 热点，网
络带宽
•容器引擎，网络性
能优化 , e.g. 免加载
Tensorflow on Volcano (Gang)
http://status.openlabtesting.org/builds?project=theopenlab%2Fvolcano
•Case 1: 1 job with 2ps + 4workers
•Case 2: 2 jobs with 2ps + 4workers
•Case 3: 5 jobs with 2ps + 4workers
•没有足够的资源同时运行两个作业 ; 
如果没有 gang -scheduling ，其中的
一个作业会出现 忙等 !
•当作业数涨到 5后，很大概率出现 死
锁；一般只能完成 2个作业Tensorflow on Volcano (IOAware)
•3个作业的执行时间总和 ; 每个作
业带2ps + 4workers
•默认调度器执行时间波动较大
•执行时间的提高量依据数据在作
业中的比例而定
•减少 Pod Affinity/Anti -Affinity ，
提高调度器的整体性能Spark on Volcano
•Spark -sql-perf (TP-DCS, master)
•104 queries concurrently
•(8cpu, 64G, 1600SSD) * 4nodes
•Kubernetes 1.13
•Driver: 1cpu,4G; Executor: 
(1cpu,4G)*5•Volcano (min -res): 3.3cpu, 12G
•Kubernetes : 1node for drivers•如果没有固定的 driver 节点， 最多同时运行 26 条查询语句
•由于Volcano 提供了作业级的资源预留，总体性能提高了
~30%MPI on Volcano
mpirun
worker_1
worker_3worker_2
作业级 ssh免密认证，
无需更新 keyKubernetes$ kubectl –f mpi_example.yaml
资源请求少， e.g. 
0.5 CPU
资源请求较多，还有
异构资源， e.g. GPU容器网络或主机网
络，支持 IB/RoCE1.组调度
2.作业生命周期
3.资源成本 , e.g. 
竞价GPU Sharing
API server
用户提交任务
Volcano
Scheduler
podVolcano
Device PluginNodeKubelet
1
2
Scheduled
3
SetAllocated算力优化：
•GPU 硬件加速， TensorCore
•GPU 共享
•昇腾改造
调度算法优化：
•Job/Task 模型，提供 AI类Job统一批
量调度
•多任务排队，支持多租户 /部门共享集
群
•单Job内多任务集群中最优化亲和性调
度、Gang Scheduling 等
•主流的 PS-Worker 、Ring AllReduce
等分布式训练模型
流程优化
•容器镜像
•CICD 流程
•日志监控一万节点，百万容器； 2000 Pods/s
①编排：
•Etcd 分库分表 ，e.g. Event 放到单独库，
wal/snapshot 单独挂盘
•通过一致性 哈希分散处理，实现 controller -
manager 多活
•Kube -apiserver 基于工作负载的弹性扩容
②调度：
•通过 EquivalenceCache ，算法剪枝 等技术
提升单调度器的吞吐性能
•通过共享资源视图实现 调度器多活 ，提升调度
速率
③网络：
•通过trunkport 提升 单节点容器密度及单集群
ENI容量
•通过 Warm Pool 预申请网口，提升网口发放
速度
•基于eBPF /XDP 支持 大规模、高度变化的云
原生应用 网络， e.g. Service, network policy 
④引擎：
•containerd 并发 启动优化
•支持shimv2 ，提升单节点容器密度
•镜像下载加速 Lazy loading
基础服务
ECS/VPC/OBS/…
SWR 镜像仓库
(cache mirror)
集群管控面
Multi -Schedulers
Kube APIServers
VolcanoControllers
 1
etcd1 集群
 …
Pods
etcd2 集群
Nodes Other OBJ
Nodes Controllers
Pods Controllers
默认Scheduler
Kind Controllers
…
3
2
1W节点集群
已有节点 扩容节点P2P
Agent….
云网络Pod
扩容节点P2P
AgentPodP2P
AgentPod
4Cromwell with Volcano
https://cromwell.readthedocs.io/en/stable/backends/Volcano /WDL
KubernetesJob
Job
Job……..1.Cromwell 社区原生支持 Volcano
2. 企业版已经上线 华为云 GCS
3. 通过 cromwell 支持作业依赖
4.Volcano 提供面向作业、数据依赖的调度Volcano CLI
•vsub
提交作业
•vcancel
取消作业
•vsuspend
挂起作业
•vresume
重启作业
•vjobs
查询作业状态及列表
•vqueues
查询队列状态及列表
•vadmin
管理员命令行， e.g. 创建队列常用命令行：
官方支持 :
•Go
•Python
•Java
•CSharp
•Javascript
•Haskell
社区支持：
•Node.js
•Rust
•Scala
•……开发库 (SDK) ：KubeSim
https:// github.com/volcano -sh/kubesim
简介：
•集群进行性能测试及调度的描述工具
•不受资源限制，模拟大规模 K8S集群
•完整的 K8S API 调用，不会真正创建 pod
•已经支持产品侧大规模专项及调度专项的模拟工作
总体结构 ：
•Worker cluster ：承载 kubemark 虚拟节点，
hollow pod
•Master cluster ：管理 kubemark 虚拟节点，
hollow node
•Hollow pod = hollow kubelet + hollow proxyAdopters & Contributors
https:// github.com/volcano -sh/volcano/blob/master/docs/community/adopters.md
Community
•CNCF Sandbox: https:// landscape.cncf.io/selected=volcano
•1360+ GitHub Stars
•~100 Contributors from Huawei, AWS , JD.com, OpenAI , Baidu , Tencent , etc.
•12 formal releases
•5 maintainers across 3 independent companies (Huawei: 3, IBM: 1, Tencent 1)
•14 public adopters (private not included)
•CII best practice: passing
•License: Apache 2 License
Releases
Volcano: A Kubernetes Native Batch System
v1.0:
•GPU Sharing
•Preempt and reclaim 
upgrade to Beta
•Job dynamic scale up 
and down
•Integrate with flink
operator
•DAG job based on Argov0.1:
•IndexedJob
•Multiple Pod template
•Error handling of 
Pod/Job
•Queue/Job command 
line
•Delay Pod Creation
•Job pluginsv0.2:
•Job Priority
•Queue Capacity
•Fair-share of NS cross 
Queue
•Binpack algorithm
•Multiple event in job 
lifecycle policyv0.3:
•Add maxRetry in job 
controller
•Bug fix of scheduler, e.g. 
Resource, callback
•Dynamic load scheduler 
configuration
•Support network policy
•Command line 
enhancementsv0.4:
•Upgrade to go 
mode
•sign certificate by 
openssl
•Remove 
deprecated API 
versions
•Bug fix
2019.5 2019.9 2020.1 2020.4 2020.7Thanks!
Further reading:
●https://groups.google.com/forum/#!forum/volcano -sh
●https://slack.cncf.io /#volcano
●https//github.com/volcano -sh/volcano
Join our community and give us feedback!Performance Index
名字 英文缩写 描述 计算公式 衡量标准 备注
往返速率 Roundtrip测试为完成作业，在平台上消
耗的时间作业完成时间 –作业提交时
间越少越好作业为空，例如 busybox ；并以客
户端 收到反馈的时间为准
吞吐率 Throughput测试系统单位时间内可以接收
的任务单位时间内接收的任务 越多越好需要保证系统长期稳定的情况下进
行测试
作业平均执行
时间AET测试作业在系统中的平均执行
时间AVG( 作业完成时间 –作业开
始执行时间 )越少越好测试时需要指定测试场景，例如
Terasort , HPL 等
作业平均等待
时间AWT测试作业在系统中的平均等待
时间AVG( 作业提交时间 –作业开
始执行时间 )越短越好 根据队列权重进行调整
资源使用率 Utilization测试集群中资源的实际使用情
况实际使用资源 /集群总资源 越接近 1越好
资源分配率 Allocation 测试集群中资源的分配情况 分配资源 /集群总资源 越接近 1越好
用户资源分配
率U-Allocation 测试各个用户的资源分配情况 DIV( 用户分配到的资源 )用户之间越接近越
好包括单个调度周期和某一时间段的
资源分配情况，根据权重调整
资源成本 Cost完成指定作业集所需要的总成
本SUM( 作业执行时间 * 资源成
本)越少越好 资源成本会有不同，比如 竞价实例
用户资源成本 U-Cost每个用户完成指定作业所需要
的成本DIV( 每个用户的作业执行时
间* 资源成本 )•越少越好
•用户之间越接近
越好根据用户权重调整Da (Klaus) Ma
●Tech Lead of Huawei Container Infra
●Founder of Volcano/ kube -batch
●Tech Lead of CNCF SIG-Runtime
●Tech Lead of CNCF Research User Group
●Emeritus Leads of Kubernetes Machine 
Learning Working Group
●Emeritus Leads of Kubernetes SIG Scheduling
●Kubernetes Maintainer
●Technical Program Committee of 
ISC/VHPC'20/21
@k82cn