Volcano调度概述
Volcano是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性,提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力。
Volcano Scheduler
Volcano Scheduler是负责Pod调度的组件,它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作;plugin根据不同场景提供了action中算法的具体实现细节。Volcano Scheduler具有高度的可扩展性,您可以根据需要实现自己的action和plugin。
Volcano Scheduler的工作流程如下:
- 客户端提交的作业(Volcano Job,简称vcjob)被调度器识别到并缓存起来,同一作业下的所有Pod聚合为一个Pod组(PodGroup)。
- 满足调度条件的PodGroup会被加入Volcano的调度队列,周期性开启会话(Session),依次开始调度。
- 按照定义的次序依次执行动作(如enqueue、allocate、preempt、reclaim、backfill等),为Job内的每个Pod找到一个最合适的节点,并将该Pod绑定到这个节点。action中执行的具体算法逻辑取决于注册的plugin中各函数的实现(如DRF、Priority、Gang等)。
- 遍历所有的待调度的作业,完成调度。
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资源,两者结合共同申明哪些工作负载使用了哪些优先级策略。详情请参见应用扩缩容优先级策略。