配置配额

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

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

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

1. 配置集群队列

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

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. default-flavorcoveredResources:定义由集群队列管理的资源类型。此示例中的 ClusterQueue 对象管理 CPU、内存、pod 和 GPU 资源。
    3. default-flavorflavors.name:定义应用于所列资源类型的资源风味。在此示例中,default-flavor 资源风味应用于 CPU、内存、pod 和 GPU 资源。
    4. default-flavorresources:定义接纳作业所需的资源要求。此示例中的集群队列仅在满足以下条件时接纳作业:
      • CPU 请求总和小于或等于 9。
      • 内存请求总和小于或等于 36Gi。
      • pod 总数小于或等于 5。
      • GPU task 总和小于或等于 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. t4-flavorcoveredResources:定义 Alauda Build of Hami 的资源要求。如果你不使用 Alauda Build of Hami,请将其删除。
    6. t4-flavorflavors.name:定义应用于所列资源类型的资源风味。在此示例中,t4-flavor 资源风味应用于 Nvidia T4 GPU 卡。如果你不想为特定卡类型配置配额,可以填入 default-flavor
    7. a30-flavorcoveredResources:定义 Alauda Build of NVIDIA GPU Device Plugin 的资源要求。如果你不使用 Alauda Build of NVIDIA GPU Device Plugin,请将其删除。
    8. a30-flavorflavors.name:定义应用于所列资源类型的资源风味。在此示例中,a30-flavor 资源风味应用于 Nvidia A30 GPU 卡。如果你不想为特定卡类型配置配额,可以填入 default-flavor
  2. 运行以下命令来应用 ClusterQueue 对象:

    kubectl  apply -f <filename>.yaml

2. 配置资源风味

配置好 ClusterQueue 对象后,你可以配置 ResourceFlavor 对象。

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

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

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 标签。