组调度(Gang)
更新时间:2026-01-14 06:02:58
Gang 调度策略是 volcano-scheduler 的核心调度算法之一,它满足了调度过程中的“All or nothing”的调度需求,避免 Pod 的任意调度导致集群资源的浪费。具体算法是,观察 Job 下的 Pod 已调度数量是否满足了最小运行数量,当 Job 的最小运行数量得到满足时,为 Job 下的所有 Pod 执行调度动作,否则,不执行。
配置组调度策略
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
- name: conformance
创建原生工作负载
# deployment-with-minmember.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
annotations:
# 对成组调度至关重要:此注解告知 Volcano 将此 Deployment 视为一个组,
# 要求至少 2 个 Pod 能够一起调度,然后才会启动任何 Pod。
scheduling.volcano.sh/group-min-member: "2"
labels:
app: my-app
spec:
replicas: 3 # 我们期望应用有 3 个副本
selector:
matchLabels:
app: my-app
template:
metadata:
# annotations:
# 可选:您也可以为此 Deployment 创建的 PodGroup 指定一个特定的 Volcano 队列。
# scheduling.volcano.sh/queue-name: "my-deployment-queue"
labels:
app: my-app
spec:
schedulerName: volcano # 关键:确保此 Deployment 的 Pod 使用 Volcano 调度器
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo 'Hello Volcano from Deployment'; sleep 3600"] # 一个长时间运行的命令,用于演示
resources:
requests:
cpu: 1
limits:
cpu: 1