本文介绍如何安装和配置 Kueue,以在 Azure Kubernetes 服务 (AKS) 群集上计划批处理工作负荷。 还可以了解不同的 Kueue 概念、启用高级 Kueue 功能的安装方法,以及如何验证部署。
重要
AKS 文档和示例中都提到了开源软件。 AKS 服务级别协议、有限保修和 Azure 支持不涵盖你部署的软件。 与 AKS 一起使用开源技术时,请查阅各社区和项目维护人员提供的支持选项,以制定计划。
例如,Ray GitHub 存储库描述了多个在响应时间、用途和支持级别方面各不相同的平台。
Microsoft 将负责生成我们在 AKS 上部署的开源包。 该责任包括拥有构建、扫描、签名、验证和快速修复流程的完整所有权,并掌控容器镜像中的二进制文件。 如需了解详细信息,请参阅 AKS 漏洞管理和 AKS 支持范围。
什么是批处理工作负荷?
批量部署通常是可重试的非交互式工作负载,持续时间有限,资源使用可能会突然增多。 这些工作负载包括但不限于:
- 数据处理作业。
- 安全漏洞扫描。
- 媒体编码或视频转码。
- 报表生成或财务分析。
- 需要所有资源可用的 GPU 工作负载可以容忍延迟启动,但无法容忍部分 GPU 分配。
这些工作负荷通常使用 Kubernetes 作业、CronJob 或自定义资源定义(CRD)(例如 RayJob 或 Kubeflow MPIJob)建模。 批处理部署提供以下一组不同于常规用途部署的不同要求:
- 规划逻辑不仅限于选择第一个可用节点。
- 公平、排队和资源意识。
- 对作业和 Pod 的生命周期感知。
默认 AKS 计划程序满足 Kubernetes 服务的要求,但为需要作业排队系统的批处理工作负荷提供有限的配置。
什么是 Kueue?
Kueue 是一个开源 Kubernetes 原生作业排队项目,旨在管理批处理工作负荷,并确保 Kubernetes 群集中高效、公平和策略驱动的计划。 Kueue 与 Kubernetes 计划 生态系统集成,以协调批处理作业的资源分配、优先级和容量控制。
重要
AKS 文档和示例中都提到了开源软件。 AKS 服务级别协议、有限保修和 Azure 支持不涵盖你部署的软件。 与 AKS 一起使用开源技术时,请查阅各社区和项目维护人员提供的支持选项,以制定计划。
例如,Ray GitHub 存储库描述了多个在响应时间、用途和支持级别方面各不相同的平台。
Microsoft 将负责生成我们在 AKS 上部署的开源包。 该责任包括拥有构建、扫描、签名、验证和快速修复流程的完整所有权,并掌控容器镜像中的二进制文件。 如需了解详细信息,请参阅 AKS 漏洞管理和 AKS 支持范围。
Kueue 引入了两级队列模型:
-
ClusterQueue表示共享资源池(包括 CPU、内存和 GPU 配额)。 -
LocalQueue表示命名空间中面向租户的队列(用户在该队列中提交批处理作业)。
提交到LocalQueue的工作负荷会与ClusterQueue匹配,以确定它们是否可以被接受。
注释
用户始终需要一个 LocalQueue 才能提交批处理工作负载,并且 LocalQueue 指示 Kueue 将作业分配到相应的 ClusterQueue。
ClusterQueue 确定是否有足够的资源使作业被接受并运行。
谁可以使用 Kueue?
批处理工作负荷管理员(包括平台或群集管理员和 DevOps 工程师)和批处理用户(数据科学家、开发人员和 ML 工程师)可以从在 AKS 上使用 Kueue 部署工作负载中获益。
批处理管理员侧重于配置、管理和保护平台级基础结构以支持批处理工作负荷,并承担以下责任:
- 预配和管理 AKS 节点池。
- 定义用于工作负荷隔离的资源配额、ClusterQueues 和策略。
- 优化自动缩放和成本效益(例如群集自动缩放程序或 Kueue 配额)。
- 监控集群和队列健康状况。
- 创建和维护模板和可重用工作流。
批处理用户使用批处理管理员配置的平台级基础结构运行计算密集型或并行作业,通常:
- 提交批处理任务(例如任务、负载或自定义控制器 CRD),并监控任务状态和输出。
- 为作业选择适当的队列或资源类型(基于批处理管理员的指导)
- 针对资源和性能需求优化作业规格
| 队列类型 | Scope | 创建者 | 用途 |
|---|---|---|---|
| ClusterQueue | 群集范围 | 平台管理员 | 定义共享计算容量和配额管理 |
| LocalQueue | Namespace | 命名空间所有者 | 启用工作负荷提交,映射到 ClusterQueue |
先决条件
- 现有的 AKS 群集。 如果没有群集,请使用 Azure CLI、 Azure PowerShell 或 Azure 门户创建群集。
- 在本地计算机上安装的 Azure CLI。 若要安装或升级,请参阅安装 Azure CLI。
- 已安装 Helm 版本 3 或更高版本。
使用 Helm 安装 Kueue
虽然默认情况下会启用可能需要的大多数功能和计划策略,但像 TopologyAwareScheduling 这样的有些功能和计划策略并不会被默认启用。 如果需要,请通过更改默认功能门或配置 Helm 图表文件中的 Kueue 参数值values.yaml来重新配置 Kueue 安装。
Kueue 支持多个工作负载框架,您需要在运行 MPI 运算符 MPIJobs、KubeRay的RayJob 等时,显式启用 Kueue 的调度和资源管理功能。
在本指南中,Kueue 被配置为包含LocalQueueMetrics、Topology Aware Scheduling以及来自 Kubeflow、Ray 和的 JobSet 框架。
-
LocalQueueMetrics提供特定于 LocalQueues 状态和活动的详细 Prometheus 指标,支持对工作负荷允许、配额预留和资源利用率进行精细监视。 -
TopologyAwareScheduling允许根据池或集群中节点的拓扑结构来调度Pod,以改善Pod之间的可用带宽。
注释
根据需要更新版本: kueue/releases
创建并保存
values.yaml文件以选择性地自定义 Kueue 配置。cat <<EOF > values.yaml controllerManager: featureGates: - name: TopologyAwareScheduling enabled: true - name: LocalQueueMetrics enabled: true managerConfig: controllerManagerConfigYaml: | apiVersion: config.kueue.x-k8s.io/v1beta1 kind: Configuration integrations: frameworks: - batch/job - kubeflow.org/mpijob - ray.io/rayjob - ray.io/raycluster - jobset.x-k8s.io/jobset - kubeflow.org/paddlejob - kubeflow.org/pytorchjob - kubeflow.org/tfjob - kubeflow.org/xgboostjob - kubeflow.org/jaxjob EOF使用
helm install命令在专用命名空间中安装最新版本的 Kueue 控制器和 CRD。LATEST_VERSION=$(curl -s https://api.github.com/repos/kubernetes-sigs/kueue/releases/latest | grep tag_name | cut -d '"' -f 4 | sed 's/^v//') helm install kueue oci://registry.k8s.io/kueue/charts/kueue \ --version=${LATEST_VERSION} \ --create-namespace --namespace=kueue-system \ --values values.yaml使用
helm list命令确认部署状态。helm list --namespace kueue-system输出应该包括
Statusdeployed,如下所示:Pulled: registry.k8s.io/kueue/charts/kueue:0.13.4 Digest: - NAME: kueue LAST DEPLOYED: - NAMESPACE: kueue-system STATUS: deployed REVISION: 1 TEST SUITE: None
确认部署状态
验证控制器 Pod 是否正常运行。
kubectl get deploy -n kueue-system输出应类似于以下示例输出:
NAME READY UP-TO-DATE AVAILABLE AGE kueue-controller-manager 1/1 1 1 7s确认在 AKS 集群上安装 Kueue 资源:
kubectl get crds | grep kueue输出应包括以下 Kueue CRD:
admissionchecks.kueue.x-k8s.io 2025-09-11T18:20:48Z clusterqueues.kueue.x-k8s.io 2025-09-11T18:20:48Z cohorts.kueue.x-k8s.io 2025-09-11T18:20:48Z localqueues.kueue.x-k8s.io 2025-09-11T18:20:48Z multikueueclusters.kueue.x-k8s.io 2025-09-11T18:20:48Z multikueueconfigs.kueue.x-k8s.io 2025-09-11T18:20:48Z provisioningrequestconfigs.kueue.x-k8s.io 2025-09-11T18:20:48Z resourceflavors.kueue.x-k8s.io 2025-09-11T18:20:48Z topologies.kueue.x-k8s.io 2025-09-11T18:20:48Z workloadpriorityclasses.kueue.x-k8s.io 2025-09-11T18:20:48Z workloads.kueue.x-k8s.io 2025-09-11T18:20:48Z
卸载 Kueue
如果不再需要在 AKS 群集中使用 Kueue 控制器管理器或 Kueue 自定义资源,可以卸载 Helm 存储库并删除专用命名空间和资源。
使用
helm uninstall命令卸载 Kueue Helm 存储库。helm uninstall kueue --namespace kueue-system使用
kubectl delete命令删除专用命名空间和资源。kubectl delete namespace kueue-system