更新时间:2024-09-02 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注解配置如下:
Pod注解 |
说明 |
---|---|
scheduling.volcano.sh/queue-name: "<queue-name>" |
指定负载所在队列,其中<queue-name>为队列名称。 |
volcano.sh/preemptable: "true" |
表示作业是否可抢占。开启后,认为该作业可以被抢占。 取值范围:
|
可通过查询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