Volcano火山:容器与批量计算的碰撞( 二 )
值得一提的是"二次调度" 。 由于简单并行的作业一般会有大量的子任务,而且每个子任务所需要的资源相对一致,子任务之间也没有通信和同步;使得资源的复用率相对比较高,因此二次调度在这种场景下能发挥比较大的作用;Hadoop的YARN,Symphony的EGO都属于这种类型 。 但是在面对复杂并行的作业时,二次调度就显得有也吃力;复杂并行作业一般并没有太多的子任务,子任务之间还经常需要同时启动,子任务之间的通信拓扑也可能不同(e.g.ps/worker,mpi),而且作业与作业之间对资源的需求差异较大,因此导致了资源的复用率较低 。
虽然针对两种不同并行作业类型有不同的作业、资源管理平台,但是根本的目标都是为作业寻找最优的资源;因此,Volcano一直以支持以多种类型的作业为目标进行设计 。 目前,Volcano可以同时支持Spark、TensorFlow和MPI等多种类型的作业 。
常见调度场景
组调度(Gang-scheduling)
运行批处理作业(如Tensorflow/MPI)时,必须协调作业的所有任务才能一起启动;否则,将不会启动任何任务 。 如果有足够的资源并行运行作业的所有任务,则该作业将正确执行;但是,在大多数情况下,尤其是在prem环境中,情况并非如此 。 在最坏的情况下,由于死锁,所有作业都挂起 。 其中每个作业只成功启动了部分任务,并等待其余任务启动 。
作业级的公平调度(Job-basedFair-share)
当运行多个弹性作业(如流媒体)时,需要公平地为每个作业分配资源,以满足多个作业竞争附加资源时的SLA/QoS要求 。 在最坏的情况下,单个作业可能会启动大量的pod资源利用率低,从而阻止其他作业由于资源不足而运行 。 为了避免分配过小(例如,为每个作业启动一个Pod),弹性作业可以利用协同调度来定义应该启动的Pod的最小可用数量 。 超过指定的最小可用量的任何pod都将公平地与其他作业共享集群资源 。
队列(Queue)
队列还广泛用于共享弹性工作负载和批处理工作负载的资源 。 队列的主要目的是:
?在不同的“租户”或资源池之间共享资源
?为不同的“租户”或资源池支持不同的调度策略或算法
这些功能可以通过层次队列进一步扩展,在层次队列中,项目被赋予额外的优先级,这将允许它们比队列中的其他项目“跳转” 。 在kube批处理中,队列被实现为集群范围的CRD 。 这允许将在不同命名空间中创建的作业放置在共享队列中 。 队列资源根据其队列配置(kubebatch#590)按比例划分 。 当前不支持分层队列,但正在进行开发 。
集群应该能够在不减慢任何操作的情况下处理队列中的大量作业 。 其他的HPC系统可以处理成百上千个作业的队列,并随着时间的推移缓慢地处理它们 。 如何与库伯内特斯达成这样的行为是一个悬而未决的问题 。 支持跨越多个集群的队列可能也很有用,在这种情况下,这是一个关于数据应该放在哪里以及etcd是否适合存储队列中的所有作业或pod的问题 。
面向用户的,跨队列的公平调度(Namespace-basedfair-shareCrossQueue)
在队列中,每个作业在调度循环期间有几乎相等的调度机会,这意味着拥有更多作业的用户有更大的机会安排他们的作业,这对其他用户不公平 。 例如,有一个队列包含少量资源,有10个pod属于UserA,1000个pod属于UserB 。 在这种情况下,UserA的pod被绑定到节点的概率较小 。
推荐阅读
- 龙之队|解读华为云容器的战略布局,裸金属容器服务会是互联网新趋势吗?
- 环球科学猫7月第2次,日本火山又喷发了,产生8300米灰烬,今年咋了?
- 环球网|火山之巅的“碧玉”——南格拉球山天池
- 央视新闻|日本西之岛火山再次喷发 烟雾升腾至8300米高空
- 经济日报|日本西之岛火山再次喷发
- DNF心情咖啡屋|DNF:增幅14红眼翻车!携带红13斗萝,火山复活币用完都未通关
- DNF心情咖啡屋|火山复活币用完都未通关,DNF:增幅14红眼翻车!携带红13斗萝
- 新华社|日本西之岛火山再次喷发 烟雾升腾至8300米高空
- 日本|日本西之岛火山再次喷发
- 新华网|日本西之岛火山再次喷发
