更新时间:2024-12-04 GMT+08:00

使用Volcano调度工作负载

Volcano是一个基于Kubernetes的批处理平台,提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户,并针对计算型应用提供了作业调度、作业管理、队列管理等多项功能。

一般情况下,Kubernetes在调度工作负载时会使用自带的默认调度器,若需要使用Volcano调度器的能力,您可以为工作负载指定调度器。关于Kubernetes调度器的详情请参见为Pod指定调度器

约束与限制

调度大量工作负载的场景下,Volcano会打印较多的日志,建议搭配日志服务使用,否则可能导致日志过多占满所在节点磁盘,详情请参见收集容器日志

使用Volcano调度工作负载

使用Volcano调度工作负载时,只需要在Pod的spec字段中设置schedulerName参数并指定参数值为volcano,示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      annotations:
        # 指定作业到q1队列
        scheduling.volcano.sh/queue-name: "q1"
        volcano.sh/preemptable: "true"
      labels:
        app: nginx
    spec:
      # 指定调度器为Volcano
      schedulerName: volcano
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 1
            memory: 100Mi
          requests:
            cpu: 1
            memory: 100Mi
        ports:
        - containerPort: 80

同时,Volcano还支持设置负载所属队列和抢占属性等,可通过Pod的注解实现。目前Volcano支持的Pod注解配置如下:

表1 Volcano支持的Pod注解

Pod注解

说明

scheduling.volcano.sh/queue-name: "<queue-name>"

指定负载所在队列,其中<queue-name>为队列名称。

volcano.sh/preemptable: "true"

表示作业是否可抢占。开启后,认为该作业可以被抢占。

取值范围:

  • true:开启抢占。(默认为开启状态)
  • false:关闭抢占。

可通过查询Pod详情查看Pod是否由Volcano调度,以及被分配的队列:

kubectl describe pod <pod_name>

回显如下:

Spec:
  Min Member:  1
  Min Resources:
    Cpu:     100m
    Memory:  100Mi
  Queue:     q1
Status:
  Conditions:
    Last Transition Time:  2023-05-30T01:54:43Z
    Reason:                tasks in gang are ready to be scheduled
    Status:                True
    Transition ID:         70be1d7d-3532-41e0-8324-c7644026b38f
    Type:                  Scheduled
  Phase:                   Running
Events:
  Type    Reason     Age              From     Message
  ----    ------     ----             ----     -------
  Normal  Scheduled  0s (x3 over 2s)  volcano  pod group is ready