Z.S.K.'s Records

volcano如何应对大规模任务系列之volcano开篇介绍

volcano做为CNCF目前唯一一款应对大规模资源批调度工具被大家熟知.
作者负责的kubernetes集群每天都有大量的任务需要运行, GPU任务、短任务、长任务等等,同时还存在多租户场景、复杂的调度策略等, 依托volcano的高度可插拔能力, 同时结合业务场景进行相应的优化,极大提高了资源使用效率,结果导向明显
在此也分享一下整个落地过程,也做为现阶段的一个工作总结, 工作之余尽量更新.

注: 业务各有不同, 作者的选型及观点可能并不适用其它人
此篇为: volcano如何应对大规模任务系列之volcano开篇介绍

本系列总体分为以下几块内容:
volcano如何应对大规模任务系列之volcano开篇介绍
volcano如何应对大规模任务系列之volcano关键对象
volcano如何应对大规模任务系列之volcano插件系统
volcano如何应对大规模任务系列之volcano源码解析
volcano如何应对大规模任务系列之volcano优化之道
volcano如何应对大规模任务系列之volcano生产实践
volcano如何应对大规模任务系列之volcano总结建议

kube-batch

volcano是由另一款工具: kube-batch发展而来, kube-batch的创建者后来直接加入了华为创建了volcano项目 kube-batch的功能虽没有volcano那么复杂且已不再维护,但很多核心思想在volcano中沿用了下来,
建议大家可以看看它的源码,对volcano的入门还是很方便的。
感兴趣的可以看看作者之前对kube-batch的生产实践

Why

为什么会有volcano这款工具?
当然新版本的kube-scheduler是可以运行extend-resource机制来对kube-scheduler的在限能力进行自定义扩展,
但是在有这个能力之前, kube-scheduler的功能其实很单一,本质上它是个串行调度,不能很好地处理如HPC场景下的资源浪费问题, 因此kube-batch项目诞生,最有名的则是它实现了gang scheduler, 在迭代了多个版本且有很多生产实践后volcano诞生,同时加入了更加丰富的插件以应对更加复杂的业务场景

When

什么时候可能会需要volcano这个工具?
虽然最新版volcano(v1.8.0)可以兼容kubernetes原生的所有类型对象,可以完全取代kube-scheduler调度器,但volcano毕竟还是更专注于批调度这个领域,因此,如果只是运行一些deployment、sts这类long-run的资源对象,引入volcano可能还是带来比较高的学习成本及加大系统的复杂性,并不会带来多大的收益
但如果kubernetes集群每天都面临需要调度大量的JOB, 对计算资源有比较高的使用率时, 还是有很大帮助, 可能有如下几个场景:

  1. Quota的弹性
  2. 多租户隔离
  3. 更复杂的算力环境、在混部、优先级等

How

如何落地volcano?
首先当然是考虑业务场景,无论何时都不可能脱离业务谈技术, 作者做的最明智(后来被证实是很正确的)的一个选择就是: 在打造基础设施早期就说服老板需要引入批调度器来应对未来可能出现的资源紧张问题
作者推荐一种结果导向判断: 在分析业务模型及调研技术选型后, 如果可以得出算力不可能无限被满足这个结论,那么就可以考虑落地volcano,退一步讲, kubernetes集群本可以很好地支持多类型的调度器且volcano可以取代kube-scheduler.
但作者强烈建议: 在落地之前,一定一定要充分理解volcano的插件系统, 不同的插件组合将产生不一样的调度结果,有时候结果可能完全不一样, 如果不能很好地理解, 那么总会出现各类惊喜

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)

 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?