Volcano是一个Kubernetes云原生的批量计算平台,也是CNCF的首个批量计算项目。
Volcano 方便AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。本篇文章将从Volcano的设计原则来带大家更进一步了解Volcano。
点击查看Volcano的架构解读:
Volcano架构解读:基于Kubernetes的云原生批量计算平台
先来了解一些基本概念:
Queue:
- 队列,Cluster级别的资源对象,可声明资源配额,由多namespace共享,提供soft isolation
Job
- 批量计算作业定义,支持定义作业所属队列,生命周期策略、所包含的任务模板以及持久卷等信息
PodGroup
- 任务组,与queue绑定,占用队列的资源;与Volcano Job是1:1的关系,主要是供 schedule调度时使用的
Command
- 支持外部干预运行中的作业,作用对象是Volcano Job
Volcano 设计原则与考虑
Volcano Job API 设计
设计目标:
1)提供统一接口,支持多种类型批 量计算任务,可以描述复杂类型 的作业
Job API的定位是一个bach-system,支持多种类型的作业,好比说大数据、AI、HPC,包含了多种作业类型。所以我们希望提供一个统一的接口去简化用户的使用,无论哪种类型、哪个场景的作业,都可以通过统一的接口运行起来,这是我们设计的时候一个很重要的考虑点。
2)灵活扩展性,满足定制化需求
其次就是灵活性,虽然说不同类型的作业,通过一个作业能够跑起来,但其实不同的场景,有不同定制化化需求,所以我们在设计这个Job API的时候,能提供定制化的需求,可以支持大部分的场景。
Volcano多任务模板
TaskSpec结构体里除包含最基本的信息外,还有一个policies, policy就定义了Task的生命周期。因为一个Job里会有多个 Task,就像下图描述的如何用Vocano运行一个Tensorflow的Job,Task里面就有多个角色,不同的角色可以定义它自己的 port template,这样的话我们就可以通过一个统一的Volcano Job支持不同的作业类型。
Volcano作业插件机制
1) 作业内任务互相访问的需求
2) 作业内任务索引
3) ssh免密登录
它其实有一些定制化的需求。好比说分布式训练这种作业,它在多个pod跑起来之后,它的pod和pod之间需要有网络互访,做数据同步。 对于像这种类型的需求,我们通过插件化的机制做成job plugin,让用户去通过这种方式去支撑它的场景。
在这里面我们看到我们定义的接口叫PluginInterface。PluginInterface的定义当一个作业在增删改查,或者Job在创建的时候,用户可以去实现这个函数,去做定制化的需求。以下三个作业的插件是我们默认已经支持的,简单配置就可以使用:
svc:
不同类型的任务之间互访
env:
任务索引,例如Tensorflow Worker index
ssh:
ssh秘钥对创建及挂载,主要供MPI作业使用
接下来我们看一下作业插件是怎么使用的。它使用起来其实非常简单,刚才说的那三个插件,只要在job spec里面的plugins字段,再加上插件的名字(如有需要还可以添加参数,本课示例未添加)就可以运行起来了。
下图是一个Volcano跑Tensorflow的Job。
除了刚才提到的统一job、定制化的需求,还有一个很重要的方面就是作业生命周期的管理。作业的状态以及pod状态是非常多的,上节课我们也提到大概有七八种pod的状态,这些pod在发生不同事件时,对于作业的状态都会有影响。由于不同的场景需求是不一样的,这就要求我们在支持生命周期管理时,提供丰富的用户可配置机制的生命周期管理。
除了作业生命周期管理之外,还有一个就是作业状态的设计。上一节课里面我们提到我们在Volcano里增加了很多Pod的状态。现在这里面提到的是作业的状态,作业的状态有8种,Controller 维护 State 子类的实例,State定义接口,封装与Controller 特定状态相关的行为,每个子类实现一个与Controller 特定状态相关的行为。
Scheduler架构
Scheduler的配置是可以动态去配置,动态加载的。
我们来看接口,下图这块定义的是action和plugin的接口,非常简单,你看在action里面它主要的一个函数就是把资源分配到队列,这一个函数,在这个action里面就可以定义资源分配的整个的逻辑。而plugin里面主要两个主要的函数就是on session open和on session close。
那我们要用起来的时候,我们应该怎么去配置?这里面讲的统一的配置策略,有几个重要的元素:Actions、Plugins、Option、Tiers。
End