- 文档首页
容器服务
容器服务 VKE
用户指南
调度管理
任务调度
基于 Kueue 的 Job 准入调度
基于 Kueue 的 Job 准入调度
本文主要介绍如何在 VKE 集群中使用 Kueue 实现 All-or-Nothing 调度能力。
Kueue 是一个 Kubernetes 原生系统,用于管理配额以及作业(Job)如何使用配额。 在多团队/多业务共享集群,需要配额、排队、优先级、抢占等情况的完整批量作业治理场景中,可通过 Kueue 的配额(ClusterQueue)+ 整组准入(Workload)实现 All-or-Nothing。当配额不足以容纳整个 Job 时,该 Job 保持 Suspended,不会下发任何 Pod。
- 已创建 v1.30 及以上 Kubernetes 版本的 VKE 托管集群,详情请参见 创建托管集群。
export KUBECONFIG=${your_kubeconfig_path}
helm install kueue oci://registry.k8s.io/kueue/charts/kueue \
--namespace kueue-system --create-namespace \
helm list -n kueue-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
kueue kueue-system 1 2026-06-15 18:55:25.549036 +0800 CST deployed kueue-0.18.1 v0.18.1
kubectl get pods -n kueue-system -o wide
- 预期输出如下,READY为 1/1且STATUS为Running:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kueue-controller-manager-9c54ccf47-k5vmf 1/1 Running 0 4m10s 192.168.123.8 192.168.123.4 <none> <none>
kubectl get crd | grep kueue.x-k8s.io
- 预期输出如下,可见clusterqueues、localqueues、workloads、resourceflavors等 CRD:
admissionchecks.kueue.x-k8s.io 2026-06-15T10:55:33Z
clusterqueues.kueue.x-k8s.io 2026-06-15T10:55:33Z
cohorts.kueue.x-k8s.io 2026-06-15T10:55:33Z
localqueues.kueue.x-k8s.io 2026-06-15T10:55:33Z
multikueueclusters.kueue.x-k8s.io 2026-06-15T10:55:33Z
multikueueconfigs.kueue.x-k8s.io 2026-06-15T10:55:33Z
provisioningrequestconfigs.kueue.x-k8s.io 2026-06-15T10:55:33Z
resourceflavors.kueue.x-k8s.io 2026-06-15T10:55:33Z
topologies.kueue.x-k8s.io 2026-06-15T10:55:33Z
workloadpriorityclasses.kueue.x-k8s.io 2026-06-15T10:55:33Z
workloads.kueue.x-k8s.io 2026-06-15T10:55:33Z
安装 Kueue 后,在 VKE 集群中使用 Kueue 验证 All-or-Nothing 调度能力。
- 本文仅配置 4 核 CPU 的 ClusterQueue 配额,用于后续验证配额不足时整组 Job 不被准入。执行以下命令,创建 ResourceFlavor、ClusterQueue 与 LocalQueue:
cat <<'EOF' | kubectl apply -f -
apiVersion: kueue.x-k8s.io/v1beta1
apiVersion: kueue.x-k8s.io/v1beta1
- coveredResources: ["cpu", "memory"]
apiVersion: kueue.x-k8s.io/v1beta1
clusterQueue: cluster-queue
- 每个 Job 需要 3 核 CPU,即设置parallelism=3,而队列配额仅为 4 核,仅能容纳一个 Job。两个 Job 均需带标签kueue.x-k8s.io/queue-name=user-queue,并设置suspend=true,交由 Kueue 接管 Job:
cat <<'EOF' | kubectl apply -f -
kueue.x-k8s.io/queue-name: user-queue
image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0
kueue.x-k8s.io/queue-name: user-queue
image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0
查看 Workload 与 Job 状态。
kubectl get workloads -n default
kubectl get jobs -n default
kubectl get pods -n default -o wide
预期输出结果如下:
- 一个 Job 被准入(对应 Workload 的ADMITTED为True),解除suspend后 3 个 Pod 同时处于Running状态;
- 另一个 Job 因配额不足,保持Suspended状态,对应 Workload 处于Pending状态,不下发任何 Pod。
上述结果证明,在队列配额不足以容纳全部作业时,Kueue 以整个 Job 为单位进行准入,不会出现半个 Job 抢占配额、另一半排队的资源浪费情况,从而实现作业级的 All-or-Nothing。
验证完成后,执行以下命令清理本文创建的 Job、队列与 Kueue 组件。
kubectl delete job job-a job-b -n default --ignore-not-found
kubectl delete localqueue user-queue -n default --ignore-not-found
kubectl delete clusterqueue cluster-queue --ignore-not-found
kubectl delete resourceflavor default-flavor --ignore-not-found
helm uninstall kueue -n kueue-system
kubectl delete ns kueue-system --ignore-not-found
最近更新时间:2026.06.29 11:13:29