配置配额

作为管理员,您可以使用 Alauda Build of Kueue 配置配额,以优化用户工作负载的资源分配和系统吞吐量。您可以为计算资源(如 CPU、内存、pods 和 GPU)配置配额。

您可以通过完成以下步骤在 Alauda Build of Kueue 中配置配额:

  1. 配置集群队列。
  2. 配置资源风味。
  3. 配置本地队列。
  4. 用户随后可以将其工作负载提交到本地队列。

1. 配置集群队列

集群队列是一个集群范围的资源,由 ClusterQueue 对象表示,用于管理 GPU、CPU、内存和 pods 等资源池。集群队列可用于定义使用限制、资源风味配额、消费顺序和公平共享规则。

INFO

注意:在配置了 ResourceFlavor 对象之前,集群队列不可用。

1.1. 前提条件

  • Alauda Container Platform Web CLI 能够与您的集群通信。
  • 您拥有集群管理员权限或 kueue-batch-admin-role 角色。

1.2. 操作步骤

  1. 创建一个 ClusterQueue 对象的 YAML 文件:

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ClusterQueue
    metadata:
      name: cluster-queue
    spec:
      namespaceSelector: {} 
      #matchLabels:
      #  kubernetes.io/metadata.name: team-a
      resourceGroups:
      - coveredResources: ["cpu", "memory", "pods"] 
        flavors:
        - name: "default-flavor"
          resources:
          - name: "cpu"
            nominalQuota: 9
          - name: "memory"
            nominalQuota: 36Gi
          - name: "pods"
            nominalQuota: 5
      - coveredResources: ["nvidia.com/gpualloc", "nvidia.com/total-gpucores", "nvidia.com/total-gpumem"] 
        flavors:
        - name: "t4-flavor"
          resources:
          - name: "nvidia.com/gpualloc"
            nominalQuota: "20"
          - name: "nvidia.com/total-gpucores"
            nominalQuota: "300"
          - name: "nvidia.com/total-gpumem"
            nominalQuota: "20480"
      - coveredResources: ["nvidia.com/gpu"] 
        flavors:
        - name: "a30-flavor"
          resources:
          - name: "nvidia.com/gpu"
            nominalQuota: 100
    1. namespaceSelector:定义哪些命名空间可以使用此集群队列管理的资源。示例中空的 namespaceSelector 表示所有命名空间均可使用这些资源。
    2. coveredResourcesdefault-flavor):定义集群队列管理的资源类型。此示例中的 ClusterQueue 对象管理 CPU、内存、pod 和 GPU 资源。
    3. flavors.namedefault-flavor):定义应用于所列资源类型的资源风味。此示例中,default-flavor 资源风味应用于 CPU、内存、pod 和 GPU 资源。
    4. resourcesdefault-flavor):定义准入作业的资源要求。此示例集群队列仅在满足以下条件时准入作业:
      • CPU 请求总和小于或等于 9。
      • 内存请求总和小于或等于 36Gi。
      • pod 总数小于或等于 5。
      • GPU 任务总和小于或等于 20(如果使用 Alauda Build of Hami,参见注释 5)。
      • 总 GPU 核心请求数小于或等于 300(如果使用 Alauda Build of Hami)。
      • 总 GPU 内存请求数小于或等于 20480。
      • GPU 请求总和小于或等于 100(如果使用 Alauda Build of NVIDIA GPU Device Plugin,参见注释 7)。
    5. coveredResourcest4-flavor):定义 Alauda Build of Hami 的资源要求。如果不使用 Alauda Build of Hami,请删除该部分。
    6. flavors.namet4-flavor):定义应用于所列资源类型的资源风味。此示例中,t4-flavor 资源风味应用于 Nvidia T4 GPU 卡。如果不想为特定卡类型配置配额,可以填写 default-flavor
    7. coveredResourcesa30-flavor):定义 Alauda Build of NVIDIA GPU Device Plugin 的资源要求。如果不使用该插件,请删除该部分。
    8. flavors.namea30-flavor):定义应用于所列资源类型的资源风味。此示例中,a30-flavor 资源风味应用于 Nvidia A30 GPU 卡。如果不想为特定卡类型配置配额,可以填写 default-flavor
  2. 运行以下命令应用 ClusterQueue 对象:

    kubectl  apply -f <filename>.yaml

2. 配置资源风味

配置完 ClusterQueue 对象后,您可以配置 ResourceFlavor 对象。

集群中的资源通常不是同质的。如果您的集群资源是同质的,可以使用空的 ResourceFlavor,而无需为自定义资源风味添加标签。

您可以使用自定义的 ResourceFlavor 对象来表示通过标签、污点和容忍度与集群节点关联的不同资源变体。然后,您可以将工作负载与特定节点类型关联,以实现细粒度的资源管理。

2.1. 前提条件

  • Alauda Container Platform Web CLI 能够与您的集群通信。
  • 您拥有集群管理员权限或 kueue-batch-admin-role 角色。

2.2. 操作步骤

  1. 创建一个 ResourceFlavor 对象的 YAML 文件:

    空的 ResourceFlavor 对象示例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ResourceFlavor
    metadata:
      name: default-flavor

    Nvidia Tesla T4 GPU 的自定义 ResourceFlavor 对象示例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ResourceFlavor
    metadata:
      name: "t4-flavor"
    spec:
      nodeLabels:
        nvidia.com/gpu.product: Tesla-T4

    Nvidia A30 GPU 的自定义 ResourceFlavor 对象示例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: ResourceFlavor
    metadata:
      name: "a30-flavor"
    spec:
      nodeLabels:
        nvidia.com/gpu.product: NVIDIA-A30
  2. 运行以下命令应用 ResourceFlavor 对象:

    kubectl apply -f <filename>.yaml

3. 配置本地队列

本地队列是一个命名空间范围的对象,由 LocalQueue 对象表示,用于分组属于单个命名空间的紧密相关的工作负载。

作为管理员,您可以配置 LocalQueue 对象指向一个集群队列。这会将集群队列中的资源分配给 LocalQueue 对象中指定命名空间的工作负载。

3.1. 前提条件

  • Alauda Container Platform Web CLI 能够与您的集群通信。
  • 您拥有集群管理员权限或 kueue-batch-admin-role 角色。
  • 您已创建 ClusterQueue 对象。

3.2. 操作步骤

  1. 创建一个 LocalQueue 对象的 YAML 文件:

    基础 LocalQueue 对象示例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: LocalQueue
    metadata:
      namespace: team-namespace
      name: user-queue
    spec:
      clusterQueue: cluster-queue
  2. 运行以下命令应用 LocalQueue 对象:

    kubectl apply -f <filename>.yaml

4. 配置默认本地队列

作为集群管理员,您可以通过管理选定命名空间中的所有作业来提升集群中的配额执行效率,而无需显式为每个作业打标签。您可以通过创建默认本地队列实现此目的。

默认本地队列作为新创建且未带有 kueue.x-k8s.io/queue-name 标签的作业的本地队列。创建默认本地队列后,命名空间中新建且未带有 kueue.x-k8s.io/queue-name 标签的作业会自动更新为带有 kueue.x-k8s.io/queue-name: default 标签。

4.1. 前提条件

  • Alauda Container Platform Web CLI 能够与您的集群通信。
  • 您拥有集群管理员权限或 kueue-batch-admin-role 角色。
  • 您已创建 ClusterQueue 对象。

4.2. 操作步骤

  1. 创建名为 default 的 LocalQueue 对象的 YAML 文件:

    默认 LocalQueue 对象示例

    apiVersion: kueue.x-k8s.io/v1beta2
    kind: LocalQueue
    metadata:
      namespace: team-namespace
      name: default
    spec:
      clusterQueue: cluster-queue
  2. 运行以下命令应用 LocalQueue 对象:

    kubectl apply -f <filename>.yaml

4.3. 验证

  1. 在与默认本地队列相同的命名空间中创建一个作业。
  2. 观察该作业是否更新为带有 kueue.x-k8s.io/queue-name: default 标签。