volcano简介
背景
volcano的前身是kube-batch,Kube-batch的知识参考之前的博客。
volcano的结构
volcano主要分为两个部分:
(1) Volcano-Scheduler:
(2) Volcano-Controller
使用volcano的流程一般如下:
- 用户通过kubectl创建Volcano Job资源。
- Volcano Controller监测到Job资源创建,校验资源有效性,依据JobSpec创建依赖的Pod, Service, ConfigMap等资源,执行配置的插件。
- Volcano Scheduler监听Pod资源的创建,依据策略,完成Pod资源的调度和绑定。
- Kubelet负责Pod资源的创建,业务开始执行。
- Volcano Controller负责Job后续的生命周期管理(状态监控,事件响应,资源清理等)
volcano-Scheduler
这个组件其实就是Kube-Batch,但是它相比kube-batch增加了一些东西。具体是:
(1)增加了一个action,enqueue
Kube-batch中待调度作业的状态只有两种,pending 和 runing。每次调度时都要从pending作业中选取作业调度,但实际上有些作业一直是资源不够,处于pending状态。这样每次调度都重复浪费资源。
为了解决这个情况,Volcano增加了一个新的状态,InQueue。代表某个作业有足够的资源能被调度。然后真正调度时候,调度器从InQueue=true的作业中调度。
(2)增加了一个Plugin, binpack
Binpack就是给各个可以绑定的节点打分:“假如放在当前节点后,谁更满,谁的分数就高”。
可能还有其他增加的内容,待补充。。
volcano-control
control主要起到作业控制的功能。主要作用如下:
(1)自定义的Job资源: 跟K8s内置的Job(作业)资源相比,Volcano Job有了更多增强配置,比如:任务配置,提交重试,最小调度资源数,作业优先级, 资源队列等。
(2)Job 生命周期管理 : Volcano Controller会监控Job的创建,创建和管理对应的子资源(Pod, ConfigMap, Service),刷新作业的进度概要,提供CLI方便用户查看和管理作业资源等。
(3)任务执行策略: 单个Job下面往往会关联多个任务(Task),而且任务之间可能存在相互依赖关系,Volcano Controller支持配置任务策略,方便异常情况下的任务间关联性重试或终止。
(4)扩展插件: 在提交作业、创建Pod等多个阶段,Controller支持配置插件用来执行自定义的环境准备和清理的工作,比如常见的MPI作业,在提交前就需要配置SSH插件,用来完成Pod资源的SSH信息配置。
vkctl
vkctl是volcano提供的命令工具,可以创建,查看任务等等。例如查看任务:
可见,还是很方便的。
参考: