在 Kubernetes 集群中安装 Volcano 调度器
使用 helm 安装
添加官网仓库并更新:
$ helm repo add volcano-sh https://volcano-sh.github.io/helm-charts
"volcano-sh" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories️...
...Successfully got an update from the "volcano-sh" chart repository
Update Complete. ⎈Happy Helming!⎈
拉取文件:
$ helm pull volcano-sh/volcano
安装:
$ helm install volcano volcano-1.12.2.tgz -n volcano-system --create-namespace
NAME: volcano
LAST DEPLOYED: Thu Aug 28 15:47:17 2025
NAMESPACE: volcano-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing volcano.
Your release is named volcano.
For more information on volcano, visit:
https://volcano.sh/
以上安装的是当前最新 Release 版本 1.12.2.
检查以下 Pod 是否正常运行:
$ kubectl get po -n volcano-system
NAME READY STATUS RESTARTS AGE
volcano-admission-5dd7897d96-x8897 1/1 Running 0 62s
volcano-controllers-7c58d44b88-p7n5v 1/1 Running 0 62s
volcano-scheduler-986f77795-csmdd 1/1 Running 0 62s
查看是否有以下默认队列:
$ kubectl get q
NAME PARENT
default root
root
以下是 1.11.2 版本的输出,对比可发现,不知为何加了 PARENT 但是把 AGE 去掉了。
$ kubectl get q
NAME AGE
default 16h
root 16h
说明
volcano 调度器安装成功后会建立两个默认的队列:
root和default.root代表调度器可以使用的全部资源,default是root的子队列。新建的队列如果不指定则父队列为rootroot队列的容量不可以修改,但default队列的容量可以通过kubectl edit修改root和default队列不能删除非 volcano 系的 Workload (例如 Pod) 可以指定调度器为 volcano, 但是因为其 Spec 不支持
queue字段,所以不能指定队列,这时消耗的是default队列的资源
队列的资源设置:
spec:
capability: 队列的资源上限
deserved: 队列保留的资源数量,空闲时可以借用给其他队列,但本队列的任务优先使用
guarantee:
resource: 队列独占的资源数量,即使空闲也不能被其他队列借用,注意其定义多一层 resource
reclaimable: 如果设置为 true, 当本队列有任务提交但是资源被其他队列借用导致资源不够时,可以强制退出其他队列的任务以释放资源;如果为 false, 只能等待其他队列任务主动退出
配置
安装成功后修改调度器配置:
$ kubectl edit cm volcano-scheduler-configmap -n volcano-system
configmap/volcano-scheduler-configmap edited
参考以下配置:
apiVersion: v1
kind: ConfigMap
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill, preempt, reclaim"
tiers:
- plugins:
- name: priority
- name: overcommit
- name: gang
enablePreemptable: false
- name: conformance
- plugins:
- name: drf
enablePreemptable: false
- name: deviceshare
arguments:
deviceshare.VGPUEnable: true
- name: predicates
- name: capacity
enableHierarchy: true
- name: nodeorder
- name: binpack
arguments:
binpack.weight: 10
binpack.cpu: 2
binpack.resources: nvidia.com/gpu
binpack.resources.nvidia.com/gpu: 8
问题解决
没有外网怎么办
需要在有外网的主机上下载以上 helm chart 以及以下几个映像:
docker.io/volcanosh/vc-controller-manager:v1.12.2
docker.io/volcanosh/vc-scheduler:v1.12.2
docker.io/volcanosh/vc-webhook-manager:v1.12.2
以下为 Volcano helm chart 的一些基本 Values 的配置:
basic:
controller_image_name: "volcanosh/vc-controller-manager"
scheduler_image_name: "volcanosh/vc-scheduler"
admission_image_name: "volcanosh/vc-webhook-manager"
image_pull_secret: ""
image_pull_policy: "Always"
image_tag_version: "v1.12.2"
image_registry: "docker.io"
安装时可以通过 --set 参数改变默认值,例如:
$ helm install volcano volcano-1.12.2.tgz -n volcano-system --create-namespace --set basic.image_pull_policy=IfNotPresent --set basic.image_registry=harbor.address