# Volcano调度概述
[Volcano](https://volcano.sh/)是一个基于Kubernetes的批处理平台，提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性，提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力。
#### Volcano Scheduler
Volcano Scheduler是负责Pod调度的组件，它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作；plugin根据不同场景提供了action中算法的具体实现细节。Volcano Scheduler具有高度的可扩展性，您可以根据需要实现自己的action和plugin。
图1Volcano Scheduler工作流   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002504031430.png "点击放大")
Volcano Scheduler的工作流程如下：
1. 客户端提交的作业（Volcano Job，简称vcjob）被调度器识别到并缓存起来，同一作业下的所有Pod聚合为一个Pod组（PodGroup）。
2. 满足调度条件的PodGroup会被加入Volcano的调度队列，周期性开启会话（Session），依次开始调度。
3. 按照定义的次序依次执行动作（如enqueue、allocate、preempt、reclaim、backfill等），为Job内的每个Pod找到一个最合适的节点，并将该Pod绑定到这个节点。action中执行的具体算法逻辑取决于注册的plugin中各函数的实现（如DRF、Priority、Gang等）。
4. 循环遍历所有的待调度的作业，完成调度。
 
#### Volcano自定义资源
- Pod组（PodGroup）：Pod组是Volcano自定义资源类型，代表一组强关联Pod的集合，主要用于批处理工作负载场景，比如Tensorflow中的一组ps和worker。
- 队列（Queue）：容纳一组PodGroup的队列，也是该组PodGroup获取集群资源的划分依据。
- 作业（Volcano Job，简称vcjob）：Volcano自定义的Job资源类型。区别于Kubernetes Job，vcjob提供了更多高级功能，如可指定调度器、支持最小运行Pod数、 支持task、支持生命周期管理、支持指定队列、支持优先级调度等。Volcano Job更加适用于机器学习、大数据、科学计算等高性能计算场景。
- 应用扩缩容优先级策略（Balancer与BalancerPolicyTemplate）：开启Volcano应用扩缩容优先级策略后，将会在集群中新增两类CRD资源，其中BalancerPolicyTemplate用来进行优先级策略定义，Balancer用来申明扩缩容优先级的作用范围。一个Balancer CR资源对应一个BalancerPolicyTemplate CR资源，两者结合共同申明哪些工作负载使用了哪些优先级策略。详情请参见[应用扩缩容优先级策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0746.html)。
 
