volcano 原理分析
为什么需要volcano随着云计算场景的复杂各种业务需要更细粒度的调度支持。降低通信成本如 分布式训练或推理中服务下的pod需要尽量调度到同一物理节点降低pod将数据同步的成本。优先处理核心业务不同服务间也会有优先级需求 在资源不足时始终保证核心业务优先调度处理非核心业务排队等待。在线业务对离线业务的临时抢占在线业务对离线业务的抢占需求如训练等业务实时性要求很低如推理业务资源不足时可暂时抢占训练任务资源待有资源再重启训练业务。因此针对以上需求需要有volcano这样的调度框架提供更强的调度能力。volcano的调度设计资源组织业务执行的最终实体都是pod。volcano为了更好的管理资源调度提供了queuejobpodgroupd两层包装抽象。jobpodgroup 可将多个pod 抽象为一个 pod 组调度中可通过该抽象将一组关联的pod始终作为一个对象调度保证该组下的pod调度保持同步如调度在同一节点上降低通信开销。queue 提供了将jobpodgroupd打包按照job 组的维度分配资源比例。综上抽象queue 与 jobpodgroup是为了增加调度的抽象层使后续扩展的调度策略更加多元整体流程是怎样的cache中的资源组织可见带调度的资源组织job(podgroupd) 是pod这里未画出更上层的queue每轮调度流程由OpenSession 到 closeSession调度的阶段抽象为 enqueueallocatepreempt,reclaim, backfill 等过程。注调度的过程是可以根据情况配置仅选用选用组合。插件扩展调度策略调度的各个阶段中有筛选可用节点筛选高优先任务等逻辑这些逻辑包装为hook点由插件扩展具体的逻辑。如查询可用节点时有各个插件注册的函数筛选返回最终可用的节点列表一个pod调度经历了什么代码分析调度阶段action的组织插件的注册批量调度的支持抢占队列资源回收