Kubernetes

Volcano Kubernetes 调度系统详解

·13 分钟阅读·4899 字

整理 Volcano Kubernetes 调度系统详解 的核心概念、关键流程与实践要点

📋 目录

Volcano Kubernetes 调度系统详解

1. Volcano 简介

Volcano 是一个基于 Kubernetes 的批处理工作负载调度系统(Batch Scheduling System),旨在增强 Kubernetes 原生调度能力,使其能够支持高性能计算(HPC)、人工智能训练、大数据计算、科学计算等场景。

Kubernetes 原生调度器 kube-scheduler 的设计目标主要是:

为单个 Pod 找到一个满足资源和约束条件的运行节点。

这种模型非常适合:

  • Web 服务

  • 微服务

  • 长运行服务

  • 无状态应用

但是对于以下场景存在不足:

  • AI 分布式训练

  • MPI 任务

  • Spark/Flink 批计算

  • 大规模 GPU 作业

  • 多租户资源共享

这些任务具有明显特点:

  1. 任务由多个 Pod 组成

  2. Pod 之间存在强依赖关系

  3. 需要多个资源同时满足才能运行

  4. 资源需求动态变化

  5. 需要公平共享集群资源

Volcano 的核心目标:

在 Kubernetes 的声明式模型基础上,为批处理任务提供队列管理、组调度、资源公平分配以及高级调度策略。


2. Kubernetes 默认调度器的问题

理解 Volcano,需要先理解 kube-scheduler 的限制。


3. kube-scheduler 调度模型

Kubernetes 调度对象:

Pod

Scheduler 每次处理:

一个 Pod

流程:

Pod 创建

    |
    v

kube-scheduler

    |
    |
 Filter

    |
    |
 Score

    |
    |
 Bind

    |
    v

Node

例如:

一个 AI 训练任务:

TensorFlow Job

需要:

1个 Master Pod

8个 Worker Pod

总共:
9个 Pod

8张 GPU

Kubernetes scheduler 看到的是:

Pod1
Pod2
Pod3
...
Pod9

它不知道:

这些 Pod 属于同一个训练任务

因此可能出现:

Pod1 -> Node1
Pod2 -> Node2
Pod3 -> Node3

...

Pod8 等待 GPU

结果:

已经分配资源:

7张GPU被占用

但是训练任务无法启动

这种问题称为:

4. Resource Fragmentation(资源碎片)


5. Gang Scheduling 问题

很多分布式任务要求:

所有 Worker 必须同时启动,否则任务没有意义。

例如:

MPI:

MPI Job

worker-0
worker-1
worker-2
worker-3

要求:

4个worker同时运行

否则:

worker-0启动
worker-1启动
worker-2等待
worker-3等待

前面的资源:

无法产生价值。

这种调度模式:

称为:

6. Gang Scheduling

中文:

组调度 / 集合调度。


7. Volcano总体架构

Volcano 架构如下:

                     User

                      |
                      |

              Kubernetes API Server

                      |

        ------------------------------

        |                            |

 Volcano Controller          Volcano Scheduler


                                      |

                              Scheduler Framework

                                      |

              ------------------------------------

              |          |          |            |

            Queue       Gang     Binpack     DRF


                                      |

                                    Bind

                                      |

                                    Node

Volcano主要包含:

  1. Volcano Scheduler

  2. Volcano Controller

  3. CRD扩展对象

  4. Scheduler Plugin体系


8. Volcano核心对象模型

Volcano扩展 Kubernetes API,引入新的资源对象。

主要包括:

  • Job

  • Queue

  • PodGroup


9. Volcano Job

Volcano Job 是批任务抽象。

类似:

Kubernetes Job:

kind: Job

但是增强:

kind: VolcanoJob

用于描述:

  • AI训练任务

  • MPI任务

  • Spark任务

例如:

apiVersion: batch.volcano.sh/v1alpha1
kind: Job

metadata:
  name: tensorflow-training


spec:

  minAvailable: 9

  tasks:

  - name: worker
    replicas: 8

  - name: ps
    replicas: 1

含义:

这个任务:

总共9个Pod

至少9个Pod同时满足

才开始运行

这里:

minAvailable

就是 Gang Scheduling 的核心参数。


10. PodGroup

PodGroup 是 Volcano 中非常重要的概念。

它表示:

一组需要被整体调度的 Pod。

例如:

Training Job

        |
        |
     PodGroup

 -----------------

 worker1
 worker2
 worker3
 worker4

Scheduler 调度时:

不是:

Pod

而是:

PodGroup

11. Queue

Queue 是资源管理核心。

用于:

多租户环境。

例如:

公司 GPU 集群:

GPU Cluster


------------------

AI部门

100 GPU


算法部门

50 GPU


测试部门

20 GPU

对应:

Queue-AI

Queue-Algorithm

Queue-Test

每个 Queue:

可以定义:

  • Resource Capability

  • Weight

  • Priority

例如:

apiVersion: scheduling.volcano.sh/v1beta1

kind: Queue

spec:

  weight: 2

  capability:

    cpu: 100

    memory: 500Gi

    nvidia.com/gpu: 20

表示:

该队列最大:

20 GPU

12. Volcano Scheduler核心流程

Volcano Scheduler 不采用简单的:

Pod -> Node

而采用:

Session Scheduling Model

一次调度过程称为:

Session。


13. 创建 Session

Scheduler启动:

Create Session

加载:

  • Node信息

  • Queue信息

  • Job信息

  • Plugin

形成:

Scheduling Session

14. Enqueue阶段

作用:

决定:

哪些任务进入调度队列。

例如:

Queue:

AI-training


任务:

Job-A

Job-B

Job-C

根据:

  • Priority

  • Queue状态

  • Fairness

决定顺序。


15. Allocate阶段

核心调度阶段。

Scheduler:

寻找:

PodGroup

↓

Node

例如:

任务:

需要:

8 GPU

扫描:

Node:

Node1:
4 GPU


Node2:
4 GPU


Node3:
8 GPU

选择:

Node3。


16. Backfill阶段

Backfill:

后台填充。

例如:

大任务:

需要100 GPU

等待中

空闲:

10 GPU

但是:

未来可能释放。

可以允许:

小任务临时运行。

提高:

资源利用率。


17. Preempt阶段

抢占。

例如:

低优任务:

训练测试

Priority=10

高优任务:

线上模型训练

Priority=100

资源不足:

驱逐:

低优任务。


18. Volcano Scheduler Plugin机制

Volcano 最大特点:

插件化调度。

Scheduler Framework:

Scheduler

   |

Plugin Framework

   |

---------------------

enqueue

allocate

predicates

prioritize

preempt

19. Gang Plugin

功能:

组调度。

核心:

minAvailable

例如:

任务:

10 Pods

设置:

minAvailable=10

只有:

10 Pod全部找到资源

↓

启动

20. Binpack Plugin

资源紧凑策略。

目标:

减少资源碎片。

例如:

两个节点:

Node1:

CPU:
90%


Node2:

CPU:
10%

优先:

Node2还是Node1?

Binpack:

选择:

Node1

原因:

让Node2保持空闲。

优势:

  • 节省机器

  • 提高利用率


21. DRF Plugin

Dominant Resource Fairness。

用于:

多资源公平。

例如:

用户A:

需要:

CPU 80%
GPU 10%

用户B:

需要:

CPU 20%
GPU 80%

不能只看CPU。

DRF计算:

主要资源占用。

保证:

公平。


22. Priority Plugin

根据:

PriorityClass

排序。

例如:

production:

priority=1000


test:

priority=100

生产任务优先。


23. Volcano GPU调度

AI场景是 Volcano 最大应用。

Kubernetes GPU调度:

默认:

nvidia.com/gpu

例如:

Pod:

resources:

 limits:

   nvidia.com/gpu: 4

但是:

复杂场景:

例如:

A100:

8 GPU

要求:

同一机器

NVLink通信

Volcano 可以结合:

  • GPU拓扑

  • NUMA

  • RDMA

  • 网络带宽

实现:

拓扑感知调度。


24. Volcano与Kubernetes Scheduler对比

能力kube-schedulerVolcano
Pod调度支持支持
单Pod优化强强
Job调度弱强
Gang Scheduling无支持
Queue管理无支持
GPU调度基础高级
公平调度弱支持
批计算一般优秀
AI训练一般优秀

25. Volcano典型生产架构

例如:

企业AI云平台:

             用户

              |

        AI Training Platform

              |

          Volcano


 --------------------------------

 Queue-AI

 Queue-BigData

 Queue-Test


              |

       Kubernetes Cluster


 --------------------------------

 GPU Node Pool

 CPU Node Pool

 Storage Node Pool

实现:

  • GPU共享

  • 多租户隔离

  • 优先级控制

  • 资源利用率优化


26. 运维工程师需要掌握的重点

如果你面向:

云平台 / AIOps / Kubernetes高级运维岗位。

Volcano重点掌握:

26.1. 基础:

  • Volcano架构

  • Job

  • Queue

  • PodGroup

26.2. 调度:

  • Gang Scheduling

  • Binpack

  • DRF

  • Preemption

26.3. GPU:

  • GPU资源管理

  • NVIDIA device plugin

  • GPU拓扑

26.4. 平台化:

结合:

Prometheus

+

Volcano Metrics

+

AI预测模型

+

自动调度

最终形成:

资源监控

↓

负载预测

↓

调度策略优化

↓

自动扩缩容

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro