Kueue 批处理作业排队
Kueue 是 Kubernetes 原生的作业排队系统,为 Job、JobSet、MPIJob、RayJob 等提供配额、排队、抢占和借用。它把“提交作业”和“何时可以运行”解耦,适合 GPU 集群和批处理平台。
核心概念:ResourceFlavor(节点 flavor)、ClusterQueue(集群级配额)、LocalQueue(命名空间队列)、Workload(排队单元)和 Cohort(配额借用组)。
安装:
kubectl apply -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.9.1/manifests.yaml
kubectl -n kueue-system get pods
创建 ResourceFlavor:
kubectl apply -f - <<'EOF'
apiVersion: kueue.x-k8s.io/v1beta1
kind: ResourceFlavor
metadata:
name: gpu-a100
spec:
nodeLabels:
nvidia.com/gpu.product: A100-SXM4-80GB
EOF
创建 ClusterQueue:
kubectl apply -f - <<'EOF'
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: team-a
spec:
namespaceSelector: {}
resourceGroups:
- coveredResources: ["cpu", "memory", "nvidia.com/gpu"]
flavors:
- name: gpu-a100
resources:
- name: cpu
nominalQuota: 100
- name: memory
nominalQuota: 400Gi
- name: nvidia.com/gpu
nominalQuota: 8
EOF
创建 LocalQueue:
kubectl apply -f - <<'EOF'
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
name: team-a-queue
namespace: demo
spec:
clusterQueue: team-a
EOF
提交 Job 并指定队列:
kubectl apply -f - <<'EOF'
apiVersion: batch/v1
kind: Job
metadata:
name: train
namespace: demo
labels:
kueue.x-k8s.io/queue-name: team-a-queue
spec:
template:
spec:
containers:
- name: train
image: example/train:latest
resources:
limits:
nvidia.com/gpu: 2
restartPolicy: Never
EOF
查看排队状态:
kubectl get workloads -n demo
kubectl describe workload -n demo
kubectl get clusterqueue team-a -o yaml
kueue.x-k8s.io/queue-name 标签,不会进入队列。namespaceSelector 配置错误,LocalQueue 无法绑定。preemption,否则高优先级作业只能等待。borrowingLimit,避免互相挤占。kubectl get clusterqueue — 查看集群队列kubectl get localqueue -A — 查看命名空间队列kubectl get workloads -A — 查看排队单元kubectl describe workload — 查看准入原因kubectl get events — 查看调度事件