Volcano:Kubernetes 上的批处理和高性能计算调度器

Volcano 是 Kubernetes 生态中专为批处理和高性能计算(HPC)场景设计的调度器扩展,支持 Gang 调度、资源公平分配和多种插件机制,极大提升了集群在 AI、科研和大数据领域的调度能力。

项目背景与设计目标

Kubernetes 默认调度器主要面向服务型负载,存在以下局限:

  • 每个 Pod 独立调度,缺乏任务组(JobGroup)概念;
  • 不支持 Gang Scheduling(成组调度)和资源公平共享(Fair Share)。

Volcano 通过自定义资源(CRD)和可插拔调度插件,补齐了这些短板,目标是为 AI/ML 分布式训练、HPC 批处理、大数据计算和科研仿真等场景提供原生支持。

架构总览

Volcano 控制平面由多个组件构成,负责批量任务调度、资源分配与生命周期管理。下图展示了主要架构组件及其交互关系。

图 1: Volcano 架构总览
图 1: Volcano 架构总览
组件作用
vc-scheduler主调度器,负责 Pod 分配、抢占、回收等动作
vc-controller-manager管理 CRD 生命周期(Job、Queue、PodGroup)
vc-webhook-managerAdmission 校验与变更
vc-agent节点级管理(部分版本可选)
表 1: Volcano 核心组件职责

自定义资源(CRD)模型

Volcano 通过自定义资源扩展了 Kubernetes 的原生对象模型。下图展示了各 CRD 之间的关系。

图 2: Volcano CRD 模型
图 2: Volcano CRD 模型
资源类型功能说明
Job定义批量任务、任务组、资源需求
PodGroup实现 Gang Scheduling,保证任务组原子调度
Queue定义资源配额与优先级
JobFlow支持任务依赖与有向执行图(DAG)
JobTemplate模板化任务定义,方便重用
表 2: Volcano CRD 功能说明

调度流程与执行机制

Volcano 的调度流程分为多个阶段,确保批量任务高效分配和资源利用。下图展示了调度循环的主要流程。

图 3: Volcano 调度流程
图 3: Volcano 调度流程

调度循环(Scheduling Cycle)包括:

  • Enqueue:将待调度的 Job 加入队列
  • Allocate:根据 Queue 配额分配资源
  • Preempt:抢占低优先级任务
  • Reclaim:回收闲置资源
  • Bind:分配 Pod 至节点

插件体系(Plugin System)

Volcano 的插件系统高度可扩展,支持在调度周期多个阶段注入自定义逻辑。下图展示了插件分类及其与核心框架的关系。

图 4: Volcano 插件体系
图 4: Volcano 插件体系
插件功能说明
Gang实现任务组全量调度
DRF多资源公平共享
Proportion队列配额分配
Predicates节点资源匹配
NodeOrder节点优先级排序
BinPack紧密打包,提升利用率
Overcommit超卖调度
TopologyNUMA / 网络拓扑感知
表 3: 常见内置插件功能

安装与使用

Volcano 支持 Helm 和原生 YAML 安装方式。安装后会在 volcano-system 命名空间创建核心组件。

通过 Helm 安装

helm repo add volcano-sh https://volcano-sh.github.io/helm-charts
helm install volcano volcano-sh/volcano -n volcano-system --create-namespace

使用原生 YAML 安装

kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/master/installer/volcano-development.yaml

安装后主要组件包括:

  • volcano-scheduler
  • volcano-controllers
  • volcano-admission

典型使用场景

Volcano 适用于多种批处理和高性能计算场景。下表列举了典型应用框架及其调度特性。

场景框架调度特性
AI 训练TensorFlow、PyTorch、RayGang 调度 + GPU 绑定
大数据计算Spark、Flink队列隔离 + Fair Share
HPC 仿真MPI、HorovodNUMA 拓扑 + 低延迟通信
BioinformaticsCromwell、KubeGene工作流依赖调度
ML PipelineKubeflow、ArgoJobFlow + 模板复用
表 4: Volcano 典型使用场景

使用时,只需在 Pod 或 Job 中指定 schedulerName: volcano,即可启用 Volcano 调度。

与原生 Kubernetes 的区别

下表对比了 Volcano 与 kube-scheduler 的主要差异。

对比维度kube-schedulerVolcano
调度粒度PodJob / PodGroup
资源公平性基于优先级支持 DRF、比例调度
调度策略简单优先级Gang、Backfill、Preemption
CRD 支持Job / Queue / PodGroup
插件扩展有限完整可插拔插件系统
应用场景长期服务批处理 / HPC / AI 训练
表 5: Volcano 与 kube-scheduler 对比

总结

Volcano 让 Kubernetes 从“服务编排平台”进化为“通用计算平台”,特别适用于分布式训练、资源公平调度、异构硬件感知和大规模批量作业管理。结合 Argo、Kubeflow、Ray 等生态系统,Volcano 使 Kubernetes 成为统一的高性能计算基础设施。

参考文献

  1. Volcano 官方文档 - volcano.sh
  2. Kubernetes 官方文档 - kubernetes.io
  3. Volcano GitHub 仓库 - github.com

文章导航

章节完成

恭喜完成本章节!下一章节即将开始。下一章节:可观测性

章节概览

评论区