
【集群】云原生批调度实战:Volcano 安装与初试

本系列《云原生批调度实战:Volcano 深度解析》计划分为以下几篇,点击查看其它内容。
💡简介
在 Kubernetes 集群中,原生调度器主要针对在线服务设计,采用”先到先得”的调度策略。然而,在实际生产环境中,我们经常需要处理大规模批处理作业,这些作业具有资源需求大、运行时间长、依赖关系复杂等特点。原生调度器在处理这类作业时往往力不从心,无法满足复杂的调度需求。
Volcano 作为 Kubernetes 的批处理调度系统,正是为了解决这些问题而生。它提供了作业管理、队列管理、资源预留等高级特性,特别适合 AI 训练、大数据处理等场景。本文将首先对 Volcano 进行深入调研,了解其设计理念和业界应用情况;然后详细介绍安装部署过程,为后续的调度功能测试和源码研究打下基础。
🖼️背景
1. Volcano 的提出背景
根据 CNCF 官方博客[1]的介绍,Volcano 项目最初由华为云发起,旨在解决 Kubernetes 在批处理作业调度方面的不足。原生 Kubernetes 调度器存在以下局限性:
资源调度策略:
- 原生调度器采用”先到先得”的调度策略,无法满足批处理作业的复杂需求
- 不支持作业优先级和公平性调度,可能导致资源分配不均衡
- 缺乏对批处理作业特性的考虑,如作业依赖关系、资源预留等
作业管理能力:
- 不支持作业级别的资源管理,难以实现作业间的资源隔离
- 缺乏作业依赖关系处理,无法保证作业按正确顺序执行
- 不支持作业队列管理,难以实现多租户场景下的资源分配
资源利用效率:
- 无法进行资源预留和抢占,可能导致关键作业无法及时执行
- 缺乏对集群整体资源利用率的优化,资源利用率可能较低
- 不支持跨作业的资源平衡,可能导致资源碎片化
2. Volcano 的业界地位
根据 GitHub 仓库[2]和 CNCF 项目状态[3]:
项目背景:
- 由华为云开源并贡献给 CNCF
- 2020 年 4 月成为 CNCF 沙箱项目
- 2021 年 7 月升级为 CNCF 孵化项目
- 被阿里云、腾讯云等多家云服务提供商采用
应用范围:
- 广泛应用于 AI 训练场景,如 TensorFlow、PyTorch 等框架
- 被用于大规模数据处理,如 Spark、Flink 等应用
- 在科学计算领域有重要应用,如基因测序、气象模拟等
社区活跃度:
- GitHub 星数超过 3.5k
- 有超过 100 位贡献者
- 每月有稳定的版本更新
- 有活跃的 Slack 社区和邮件列表
3. 离线作业的特殊性
根据 Kubernetes 官方文档[4]和 Volcano 技术博客[5]:
资源需求特征:
- 资源需求量大:单个作业可能需要多个节点的资源
- 运行时间长:从几分钟到数天不等
- 对资源利用率要求高:需要最大化资源利用效率
调度需求:
- 需要支持作业优先级:确保重要作业优先执行
- 需要处理作业依赖关系:保证作业按正确顺序执行
- 需要支持资源预留和抢占:确保关键作业能够及时执行
原生调度器的不足:
- 无法处理作业间的依赖关系:可能导致作业执行顺序错误
- 缺乏对作业优先级的支持:无法保证重要作业优先执行
- 资源调度策略过于简单:无法满足复杂的调度需求
- 无法进行跨作业的资源优化:可能导致资源利用率低下
🧠思路
- 调研 Volcano 的基本情况
- 安装部署 Volcano
- 配置测试环境
- 进行功能测试
🔨解决
0. 安装 Helm
0.1 Helm 简介
Helm 是 Kubernetes 的包管理工具,类似于 Linux 的 apt、yum 等包管理器。它可以帮助我们:
- 简化 Kubernetes 应用的部署和管理
- 实现应用配置的版本控制
- 方便地分享和复用应用配置
- 管理应用依赖关系
0.2 安装 Helm
1 | # 下载 Helm 安装脚本 |
1.3 配置 Helm 仓库
1 | # 添加各个仓库 |
1. 安装 Volcano
注意:如果要使用 kwok 进行模拟,则需要先安装 Volcano 后再启动 kwok。否则会被 kwok 变为假请求而无法安装。
1.1 使用 Helm 安装
1 | # 添加 Helm 仓库 |
1.2 通过 YAML 文件安装
1 | curl -fsSL -o volcano-development.yaml https://raw.githubusercontent.com/volcano-sh/volcano/master/installer/volcano-development.yaml |
1.3 验证安装
1 | # 检查 Pod 状态 |
2. 配置 Volcano
2.1 创建队列
1 | apiVersion: scheduling.volcano.sh/v1beta1 |
1 | kubectl apply -f queue.yaml |
2.2 创建 PodGroup
1 | apiVersion: scheduling.volcano.sh/v1beta1 |
1 | kubectl apply -f podgroup.yaml |
3. 测试调度功能
3.1 创建测试作业
1 | apiVersion: batch.volcano.sh/v1alpha1 |
3.2 验证调度结果
1 | # 查看作业状态 |
1 | # 查看 Pod 状态 |
1 | # 一旦 Pod 完成,VolcanoJob 中的 TaskCompleted 策略将触发 CompleteJob 操作,这会将 VolcanoJob 的阶段转换为 Completed |
- 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
- 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。
🗺参考文献
- 标题: 【集群】云原生批调度实战:Volcano 安装与初试
- 作者: Fre5h1nd
- 创建于 : 2025-06-22 16:30:35
- 更新于 : 2025-06-27 11:09:38
- 链接: https://freshwlnd.github.io/2025/06/22/k8s/k8s-volcano-install/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
评论