在 Azure Kubernetes 服务上安装和配置 Kueue (AKS)

Kueue 为在 Azure Kubernetes 服务 (AKS) 上运行的批处理和 AI 工作负载提供 Kubernetes 原生作业队列和资源准入。 本文介绍了在 AKS 上安装 Kueue 的两种方法:

  • AKS 托管 Kueue 扩展(预览):使用 Azure 托管的扩展体验在 AKS 群集上部署 Kueue。
  • 使用 Helm 的开源 Kueue:直接从上游 Kueue Helm Chart 安装和配置 Kueue。

安装后,使用 Kueue API(例如 ClusterQueue、LocalQueue 和 ResourceFlavor)来控制工作负荷如何被接纳到群集资源。

什么是 Kueue?

Kueue 是一个开源 Kubernetes 原生作业排队项目,旨在管理批处理工作负荷,并确保 Kubernetes 群集中高效、公平和策略驱动的计划。 Kueue 与 Kubernetes 调度 生态系统集成,以协调工作负荷的资源分配、优先级和容量控制。 Kueue 控制是否根据配置的资源配额和策略准入工作负荷。 在工作负荷被准入后,Kubernetes 调度器会将工作负荷的 Pod 置于节点上。

Kueue 对于工作负荷非常有用,例如:

  • AI 和机器学习培训
  • GPU 密集型任务
  • 数据处理
  • 安全漏洞扫描
  • 媒体编码和视频转码
  • 报表生成和财务分析
  • 其他可等待足够资源变为可用的批处理工作负荷

使用 Kubernetes Job、CronJob 或自定义资源定义(CRD)(如 RayJob 或 Kubeflow MPIJob )为这些工作负载建模,并根据其 ClusterQueue 和 LocalQueue 进行准入。

了解 Kueue 队列

使用 Kueue 提交工作负荷之前,请配置控制工作负荷准入的队列。

Kueue 使用两个主要队列资源:

  • ClusterQueue 定义共享资源池(例如 CPU、内存、GPU 配额)的群集范围资源配额,以及确定可接纳哪些工作负荷的策略。
  • LocalQueue 提供命名空间范围的队列,用户在其中提交工作负载并引用 ClusterQueue。

以下流程显示了 Kueue 如何在 Kubernetes 调度其 Pod 之前评估工作负载:工作负载(Pod、作业等)→ LocalQueue → ClusterQueue → 工作负载准入 → Kubernetes 调度

一个 LocalQueue 标识应评估工作负荷的 ClusterQueue。 ClusterQueue 确定是否有足够的配额可供工作负荷准入。 平台管理员通常配置群集级资源和策略,而工作负荷所有者通过LocalQueue提交作业。

注释

用户始终需要一个 LocalQueue 才能提交批处理工作负载,并且 LocalQueue 指示 Kueue 将作业分配到相应的 ClusterQueue。 ClusterQueue 确定是否有足够的资源使作业被接受并运行。

重要

AKS 文档和示例中都提到了开源软件。 AKS 服务级别协议、有限保修和 Azure 支持不涵盖你部署的软件。 与 AKS 一起使用开源技术时,请查阅各社区和项目维护人员提供的支持选项,以制定计划。

Microsoft 将负责生成我们在 AKS 上部署的开源包。 该责任包括拥有构建、扫描、签名、验证和快速修复流程的完整所有权,并掌控容器镜像中的二进制文件。 如需了解详细信息,请参阅 AKS 漏洞管理和 AKS 支持范围。

何时使用 Kueue

Batch 和 AI 工作负载可以具有与长时间运行的 Kubernetes 服务不同的计划和资源管理要求。 批处理工作负荷管理员(包括平台或群集管理员和 DevOps 工程师)和批处理用户(数据科学家、开发人员和 ML 工程师)可以从在 AKS 上使用 Kueue 部署工作负载中获益。

批处理管理员侧重于配置、管理和保护平台级基础结构以支持批处理工作负荷,并承担以下责任:

  • 预配和管理 AKS 节点池。
  • 定义用于工作负荷隔离的资源配额、ClusterQueues 和策略。
  • 优化自动缩放和成本效益(例如群集自动缩放程序或 Kueue 配额)。
  • 监控集群和队列健康状况。
  • 创建和维护模板和可重用工作流。

批处理用户使用批处理管理员配置的平台级基础结构运行计算密集型或并行作业,通常:

  • 提交批处理任务(例如任务、负载或自定义控制器 CRD),并监控任务状态和输出。
  • 为作业选择适当的队列或资源类型(基于批处理管理员的指导)
  • 针对资源和性能需求优化作业规格

先决条件

其他先决条件取决于所选的安装方法。

选择如何安装 Kueue

AKS 支持 Kueue 的两种安装方法。 选择与在群集上安装和配置 Kueue 的方式最匹配的选项。 无论安装方法如何,Kueue Kubernetes API 和排队概念都保持不变。 主要区别在于如何安装和配置 Kueue 组件。

安装路径 Description
AKS 托管 Kueue 扩展(预览版) 想要通过 AKS 群集扩展体验部署 Kueue,并使用扩展支持的 Kueue 版本和配置。
借助 Helm 开源 Kueue 你希望直接从上游项目安装 Kueue,并控制 Kueue 版本、特性门控、集成和 Helm 配置。

在 Azure Kubernetes 服务 上安装和配置托管 Kueue 扩展(预览版)

AKS 托管 Kueue 扩展提供用于在 AKS 群集上部署 Kueue 的 Azure 本机安装路径。 如果要通过 AKS 群集扩展体验部署 Kueue,而不是直接安装上游 Helm 图表,请使用此安装方法。

托管扩展先决条件

在开始之前,请确保具有以下工具:

  • AKS 版本 v1.34 或更高版本
  • Azure CLI 2.56 或更高版本
  • kubectl 版本 1.21.0 或更高版本
  • Azure CLI k8s-extension 版本 1.9.3
  • 创建和删除的权限:资源组、AKS 群集、AKS 节点池和群集扩展

局限性

  • AKS 托管 Kueue 扩展目前在以下Azure区域中可用:centralus、westus、westus2 和 eastus
  • AKS 托管 Kueue 扩展目前仅支持群集自动缩放程序,并计划支持节点自动预配

安装托管 Kueue 扩展

为Azure订阅、资源组和 AKS 群集设置环境变量:

SUBSCRIPTION_ID="<subscription-id>"
RESOURCE_GROUP="<resource-group-name>"
CLUSTER_NAME="<aks-cluster-name>"

安装 Kueue 群集扩展:

az k8s-extension create \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name kueue \
--extension-type microsoft.kueue \
--scope cluster \
--release-namespace kueue-system \
--version 0.19.6-aks.0.4.4 \
--auto-upgrade-mode none

验证扩展安装

获取预配状态和 Kueue 扩展的已安装版本。 扩展完成预配后,继续 #verify-your-kueue-installation。

az k8s-extension show \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name kueue \
--output json

卸载托管 Kueue 扩展

如果要删除托管 Kueue 而不删除 AKS 群集,请删除扩展:

az k8s-extension delete \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name kueue \
--yes

使用 Helm 安装 Kueue

Helm 前提条件

在开始之前,请确保具有以下工具:

  • Helm v3.0.0 或更高版本
  • 创建和删除的权限:资源组、AKS 群集、AKS 节点池和群集扩展

配置可选的 Kueue 功能

虽然默认情况下会启用可能需要的大多数功能和计划策略,但像 TopologyAwareScheduling 这样的有些功能和计划策略并不会被默认启用。 如果需要,请通过更改默认功能门或配置 Helm 图表文件中的 Kueue 参数值values.yaml来重新配置 Kueue 安装。

Kueue 支持多个工作负载框架,您需要在运行 MPI 运算符 MPIJobs、KubeRay的RayJob 等时,显式启用 Kueue 的调度和资源管理功能。

以下示例支持:

  • LocalQueueMetrics 提供特定于 LocalQueues 状态和活动的详细 Prometheus 指标,支持对工作负荷允许、配额预留和资源利用率进行精细监视。
  • TopologyAwareScheduling允许根据池或集群中节点的拓扑结构来调度Pod,以改善Pod之间的可用带宽。
  • 批处理和 AI 工作负载框架的集成,包括 Kubeflow、Ray 和 JobSet。
  1. 创建并保存 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
    

注释

根据需要更新版本: kueue/releases

  1. 使用 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://k8sgcr.azk8s.cn/kueue/charts/kueue \
     --version=${LATEST_VERSION} \
    --create-namespace --namespace=kueue-system \
    --values values.yaml
    
  2. 使用 helm list 命令确认部署状态。

    helm list --namespace kueue-system
    

    输出应该包括Statusdeployed,如下所示:

    Pulled: k8sgcr.azk8s.cn/kueue/charts/kueue:0.13.4
    Digest: -
    NAME: kueue
    LAST DEPLOYED: -
    NAMESPACE: kueue-system
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    

卸载 Kueue

如果不再需要 AKS 群集中的 Kueue 控制器管理器或 Kueue 自定义资源,请卸载 Helm 存储库并删除专用命名空间和资源。

  1. 使用 helm uninstall 命令卸载 Kueue Helm 存储库。

    helm uninstall kueue --namespace kueue-system  
    
  2. 使用 kubectl delete 命令删除专用命名空间和资源。

    kubectl delete namespace kueue-system  
    

确认部署状态

无论使用哪种安装方法,在配置队列或提交工作负载之前,请验证 Kueue 组件是否正在运行。

  1. 验证控制器 Pod 是否正常运行。

    kubectl get deploy -n kueue-system
    

    输出应类似于以下示例输出:

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    kueue-controller-manager       1/1     1            1           7s
    
  2. 确认在 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
    

确切的 CRD 集可能因已安装的 Kueue 版本而异。

Kueue 运行后,请在提交工作负载之前配置队列、资源配额和工作负载准入策略。

后续步骤