基于 Kubernetes + Volcano 的智驾模型训练推理发布版本流水线系统(MVP 最简实现)。
- ✅ 最简实现 - 只包含核心功能,易于理解
- ✅ 概念讲解 - 详细的概念、原理、最佳实践讲解
- ✅ 快速上手 - 5 步快速开始
- ✅ 完整文档 - 从概念到实践的完整指南
阅读概念讲解文档,理解 K8s 和 Volcano 的核心概念:
- 核心概念 - K8s 基础、Volcano 核心概念、调度原理
- 原理详解 - Volcano 调度原理、资源 Locality Affinity、工作流执行
- 最佳实践 - 队列设计、节点标签、任务配置、故障排查
推荐路径: 先手动跑通最简流程,建立信心!
手动跑通流程指南 - 最简化的学习路径
- 步骤1: 部署 Volcano
- 步骤2: 测试最简 Job
- 步骤3: 测试最简 JobFlow
或者按照快速开始指南:
快速开始指南 - 5 步快速上手
cd manifests/volcano
chmod +x install.sh
./install.sh验证安装:
kubectl get pods -n volcano-systemkubectl apply -f manifests/queues/training-queue.yaml
kubectl get queue# 查看节点列表
kubectl get nodes
# 标注一个 GPU 节点(替换 <node-name> 为实际节点名)
chmod +x scripts/label-nodes.sh
./scripts/label-nodes.sh <node-name> a100
# 验证标签
kubectl get node <node-name> --show-labels | grep gpu.type如果你还没有训练镜像,可以:
- 使用测试镜像:
nvidia/cuda:11.8.0-base-ubuntu22.04 - 修改
examples/training-job.yaml中的镜像名称
# 修改 examples/training-job.yaml
# 1. 修改镜像名称(如果需要)
# 2. 修改训练命令(如果需要)
# 提交任务
kubectl apply -f examples/training-job.yaml
# 查看任务状态
kubectl get job training-job-mvp
kubectl get pods -l app=trainingvolcano_workflow/
├── docs/ # 📚 文档目录
│ ├── 01-concepts.md # 核心概念讲解
│ ├── 02-principles.md # 原理详解
│ ├── 03-best-practices.md # 最佳实践
│ └── 04-components.md # 组件详解
├── manifests/ # K8s 资源定义
│ ├── volcano/ # Volcano 安装配置
│ │ ├── namespace.yaml
│ │ ├── scheduler-config.yaml
│ │ └── install.sh
│ └── queues/ # 队列定义
│ └── training-queue.yaml
├── examples/ # 示例文件
│ ├── manual/ # ⭐ 手动跑通流程指南
│ │ ├── README.md
│ │ ├── 01-deploy-volcano.md
│ │ ├── 02-test-simple-job.md
│ │ ├── 03-test-simple-jobflow.md
│ │ ├── simple-job.yaml
│ │ └── simple-jobflow.yaml
│ ├── training-job.yaml # 基础训练任务
│ └── training-job-with-affinity.yaml # 带调度策略的训练任务
├── scripts/ # 工具脚本
│ └── label-nodes.sh # 节点标签标注脚本
├── README.md # 本文档
└── QUICKSTART.md # 快速开始指南
# 查看 Job 状态
kubectl get job training-job-mvp
# 查看 Pod 状态
kubectl get pods -l app=training
# 查看 Pod 详情
kubectl describe pod <pod-name># 查看训练日志
kubectl logs -l app=training
# 查看调度器日志(如果任务无法调度)
kubectl logs -n volcano-system -l app=volcano-scheduler --tail=100# 查看 Pod 调度到哪个节点
kubectl get pod -l app=training -o wide
# 应该看到 Pod 调度到了标注了 gpu.type=a100 的节点排查步骤:
-
检查队列是否存在
kubectl get queue training-queue
-
检查节点标签是否正确
kubectl get nodes --show-labels | grep gpu.type -
检查 GPU 资源是否足够
kubectl describe node <node-name> | grep -A 5 "Allocated resources"
-
查看事件了解原因
kubectl describe job training-job-mvp kubectl describe pod <pod-name>
# 检查调度器状态
kubectl get pods -n volcano-system
# 查看调度器日志
kubectl logs -n volcano-system -l app=volcano-scheduler
# 重新安装
cd manifests/volcano
./install.sh# 查看 Pod 日志
kubectl logs <pod-name>
# 查看 Pod 事件
kubectl describe pod <pod-name>-
01-concepts.md - 核心概念讲解
- K8s 基础概念
- Volcano 核心概念
- 调度原理
- MVP 范围说明
-
02-principles.md - 原理详解
- Volcano 调度器架构
- Gang Scheduling 原理
- 资源 Locality Affinity 调度原理
- 工作流执行原理
-
03-best-practices.md - 最佳实践
- 队列设计最佳实践
- 节点标签最佳实践
- 任务配置最佳实践
- 故障排查最佳实践
- 先理解概念 - 阅读
docs/01-concepts.md - 理解原理 - 阅读
docs/02-principles.md - 实践 MVP - 按照
QUICKSTART.md操作 - 学习最佳实践 - 阅读
docs/03-best-practices.md - 扩展功能 - 根据需要添加更多功能
MIT License