全部產品
Search
文件中心

Container Service for Kubernetes:使用DRA調度GPU

更新時間:Mar 07, 2026

在AI訓練和推理情境中,當多個應用需要共用GPU資源時,為突破傳統裝置外掛程式的調度限制,可在ACK叢集中部署NVIDIA DRA驅動,通過Kubernetes DRA API實現Pod間GPU動態分配與細粒度資源控制,提升GPU利用率並降低成本。

工作原理

適用範圍

建立ACK託管叢集,且叢集版本為1.34及以上。

配置DRA GPU調度環境

步驟一:建立GPU節點池

建立使用DRA GPU調度的節點池,並通過節點標籤關閉預設的GPU Device Plugin資源上報,避免GPU裝置被重複分配。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表 。單擊目的地組群名稱 ,然後選擇節點管理 > 節點池 。

  2. 單擊建立節點池 ,選擇執行個體規格為ACK支援的GPU執行個體規格,其餘保持預設即可。

    1. 單擊指定執行個體規格,輸入規格名稱,如ecs.gn7i-c8g1.2xlarge。設定期望節點數1 。

    2. 單擊進階選項 ,展開節點池編輯詳情,在節點標籤(Labels)處輸入索引值對:ack.node.gpu.schedule: disabled,關閉預設的獨佔GPU調度功能,停止GPU Device Plugin資源上報。

      同時啟用Device Plugin和DRA會導致GPU資源被重複分配,因此需要在DRA節點上禁用GPU Device Plugin資源上報。

步驟二:安裝NVIDIA DRA驅動

安裝NVIDIA DRA GPU驅動程式,為叢集提供DRA API的具體實現。

  1. 擷取叢集KubeConfig並通過kubectl工具串連叢集

  2. 安裝Helm CLI。

    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  3. 添加NVIDIA Helm倉庫並更新。

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
    && helm repo update
  4. 安裝版本為25.3.2NVIDIA DRA GPU驅動程式。

    helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu --version="25.3.2" --create-namespace --namespace nvidia-dra-driver-gpu \
        --set gpuResourcesEnabledOverride=true \
        --set controller.affinity=null \
        --set "kubeletPlugin.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key=ack.node.gpu.schedule" \
        --set "kubeletPlugin.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator=In" \
        --set "kubeletPlugin.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0]=disabled"
    重要

    --set controller.affinity=null會去除controller工作負載的節點親和性聲明,會將controller負載調度到任意節點上,可能導致穩定性問題,生產環境中請評估後操作。

    預期輸出如下,說明驅動已正確安裝。

    NAME: nvidia-dra-driver-gpu
    LAST DEPLOYED: Tue Oct 14 20:42:13 2025
    NAMESPACE: nvidia-dra-driver-gpu
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None

步驟三:驗證環境配置

驗證NVIDIA DRA驅動是否正常運行,並確認GPU資源已成功上報到Kubernetes叢集。

  1. 確認DRA GPU驅動組件的Pod是否為Running狀態。

    kubectl get pod -n nvidia-dra-driver-gpu
  2. 確認DRA相關資源已成功建立。

    kubectl get deviceclass,resourceslice

    預期輸出為:

    NAME                                                                    AGE
    deviceclass.resource.k8s.io/compute-domain-daemon.nvidia.com            60s
    deviceclass.resource.k8s.io/compute-domain-default-channel.nvidia.com   60s
    deviceclass.resource.k8s.io/gpu.nvidia.com                              60s
    deviceclass.resource.k8s.io/mig.nvidia.com                              60s
    
    NAME                                                                                   NODE                      DRIVER                      POOL                      AGE
    resourceslice.resource.k8s.io/cn-beijing.1x.1x.3x.1x-compute-domain.nvidia.com-htjqn   cn-beijing.10.11.34.156   compute-domain.nvidia.com   cn-beijing.10.11.34.156   57s
    resourceslice.resource.k8s.io/cn-beijing.1x.1x.3x.1x-gpu.nvidia.com-bnwhj              cn-beijing.10.11.34.156   gpu.nvidia.com              cn-beijing.10.11.34.156   57s
  3. 查看當前環境GPU資源上報詳情。

    cn-beijing.1x.1x.3x.1x-gpu.nvidia.com-bnwhj替換為實際的resourceslice資來源物件名稱。
    kubectl get resourceslice.resource.k8s.io/cn-beijing.1x.1x.3x.1x-gpu.nvidia.com-bnwhj -o yaml

部署使用DRA GPU的工作負載

環境配置完成後,將示範如何通過 ResourceClaimTemplate 自動建立資源聲明(ResourceClaim),從而為工作負載申請並使用DRA GPU資源。
  1. 建立resource-claim-template.yaml檔案。

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: single-gpu
    spec:
      spec:
        devices:
          requests:
          - exactly:
              allocationMode: ExactCount
              deviceClassName: gpu.nvidia.com
              count: 1
            name: gpu

    在叢集中建立ResourceClaimTemplate

    kubectl apply -f resource-claim-template.yaml
  2. 建立resource-claim-template-pod.yaml檔案。

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod1
      labels:
        app: pod
    spec:
      containers:
      - name: ctr
        image: registry-cn-hangzhou.ack.aliyuncs.com/dev/ubuntu:22.04
        command: ["bash", "-c"]
        args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"]
        resources:
          claims:
          - name: gpu
      resourceClaims:
      - name: gpu
        resourceClaimTemplateName: single-gpu

    建立引用ResourceClaimTemplate的工作負載。

    kubectl apply -f resource-claim-template-pod.yaml
  3. 查看自動建立的ResourceClaim

    1. 尋找當前命名空間中 ResourceClaim,如pod1-gpu-wstqm

      kubectl get resourceclaim
    2. 查看ResourceClaim的詳細資料。

      替換pod1-gpu-wstqm為實際的ResourceClaim資來源物件名稱。
      kubectl describe resourceclaim pod1-gpu-wstqm
  4. 查看工作負載是否正常使用GPU,預期輸出GPU 0: NVIDIA A10

    kubectl logs pod1

(可選)清理環境

測試完成後,如果不再使用已建立的資源,請及時清理以避免產生不必要的費用。

  • 刪除清理已部署的工作負載和資源聲明。

    kubectl delete pod pod1
    kubectl delete resourceclaimtemplate single-gpu
  • 刪除已建立的Nvidia GPU DRA程式。

    helm uninstall nvidia-dra-driver-gpu -n nvidia-dra-driver-gpu
  • 移除或釋放節點資源