次の方法で共有

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

本文介绍如何安装和配置 Kueue,以在 Azure Kubernetes 服务 (AKS) 群集上计划批处理工作负荷。 还可以了解不同的 Kueue 概念、启用高级 Kueue 功能的安装方法,以及如何验证部署。

重要

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

例如,Ray GitHub 存储库描述了多个在响应时间、用途和支持级别方面各不相同的平台。

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

什么是批处理工作负荷?

批量部署通常是可重试的非交互式工作负载,持续时间有限,资源使用可能会突然增多。 这些工作负载包括但不限于:

  • 数据处理作业。
  • 安全漏洞扫描。
  • 媒体编码或视频转码。
  • 报表生成或财务分析。
  • 需要所有资源可用的 GPU 工作负载可以容忍延迟启动,但无法容忍部分 GPU 分配。

这些工作负荷通常使用 Kubernetes 作业、CronJob 或自定义资源定义(CRD)(例如 RayJobKubeflow 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

先决条件

使用 Helm 安装 Kueue

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

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

在本指南中,Kueue 被配置为包含LocalQueueMetricsTopology Aware Scheduling以及来自 Kubeflow、Ray 和的 JobSet 框架。

  • LocalQueueMetrics 提供特定于 LocalQueues 状态和活动的详细 Prometheus 指标,支持对工作负荷允许、配额预留和资源利用率进行精细监视。
  • TopologyAwareScheduling允许根据池或集群中节点的拓扑结构来调度Pod,以改善Pod之间的可用带宽。

注释

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

  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
    
  2. 使用 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
    
  3. 使用 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
    

确认部署状态

  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
    

卸载 Kueue

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

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

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

    kubectl delete namespace kueue-system  
    

后续步骤