為 DRA 工作負載準備 GKE 基礎架構

本文說明如何手動設定 Google Kubernetes Engine (GKE) 基礎架構,以支援動態資源分配 (DRA)。設定步驟包括建立使用 GPU 的節點集區,以及安裝 DRA 驅動程式。

本文適用於平台管理員,協助他們使用專用硬體裝置建立基礎架構,供應用程式運算子在工作負載中聲明。

限制

限制如下:

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
  • 擁有執行 1.35 以上版本的 GKE Standard 叢集。您也可以建立地區叢集

  • 安裝 Helm。如果您使用 Cloud Shell,則 Helm 已安裝。

建立具有 GPU 的 GKE 節點集區

本節說明如何建立 GPU 節點集區,並安裝對應的 DRA 驅動程式。本節中的步驟僅適用於手動建立的節點集區。如要建立支援 DRA 的 GPU 節點集區,請執行下列操作:

  • 停用自動安裝 GPU 驅動程式:在 --accelerator 標記中指定 gpu-driver-version=disabled 選項。
  • 停用 GPU 裝置外掛程式:將 gke-no-default-nvidia-gpu-device-plugin=true 節點標籤新增至節點集區。
  • 執行 DRA 驅動程式 DaemonSet:將 nvidia.com/gpu.present=true 節點標籤新增至節點集區。
  • 設定自動調度資源:如要在節點集區中使用叢集自動配置器,請將 cloud.google.com/gke-nvidia-gpu-dra-driver=true 節點標籤新增至節點集區。叢集自動配置器會使用這個節點標籤,識別執行 GPU 的 DRA 驅動程式的節點。

如要建立及設定 GPU 節點集區,請按照下列步驟操作:

  1. 建立 GPU 節點集區。下列指令範例會建立具有不同設定的節點集區:

    • 建立具有 g2-standard-24 執行個體的節點集區,該執行個體有兩個 L4 GPU:

      gcloud container node-pools create NODEPOOL_NAME \
          --cluster=CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --machine-type="g2-standard-24" \
          --accelerator="type=nvidia-l4,count=2,gpu-driver-version=disabled" \
          --num-nodes="1" \
          --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true
      

      更改下列內容:

      • NODEPOOL_NAME:節點集區名稱。
      • CLUSTER_NAME:叢集名稱。
      • CONTROL_PLANE_LOCATION:叢集控制層所在的區域或可用區,例如 us-central1us-central1-a
      • NODE_LOCATION1,NODE_LOCATION2,...:以逗號分隔的區域清單,這些區域與控制層位於相同區域,可用於建立節點。選擇提供 GPU 的區域。
    • 建立自動調度資源的節點集區,每個執行個體都有一個 NVIDIA A100 (80 GB) GPU:a2-ultragpu-1g

      gcloud container node-pools create NODEPOOL_NAME \
          --cluster=CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --enable-autoscaling \
          --max-nodes=5 \
          --machine-type="a2-ultragpu-1g" \
          --accelerator="type=nvidia-a100-80gb,count=1,gpu-driver-version=disabled" \
          --num-nodes="1" \
          --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true,cloud.google.com/gke-nvidia-gpu-dra-driver=true
      
  2. 手動安裝 NVIDIA GPU 驅動程式

  3. 安裝 DRA 驅動程式

安裝 DRA 驅動程式

  1. 提取並更新內含 NVIDIA DRA 驅動程式的 Helm 資訊套件:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. 安裝 NVIDIA DRA GPU 驅動程式,版本須為 25.8.0 以上:

    helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \
        --version="25.8.0" --create-namespace --namespace=nvidia-dra-driver-gpu \
        --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \
        --set gpuResourcesEnabledOverride=true \
        --set resources.computeDomains.enabled=false \
        --set kubeletPlugin.priorityClassName="" \
        --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \
        --set 'kubeletPlugin.tolerations[0].operator=Exists' \
        --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'
    

    如果是 Ubuntu 節點,請在 --set nvidiaDriverRoot 旗標中指定 "/opt/nvidia" 目錄路徑。

確認基礎架構已準備好支援 DRA

  1. 確認 DRA 驅動程式 Pod 正在執行:

    kubectl get pods -n nvidia-dra-driver-gpu
    

    輸出結果會與下列內容相似:

    NAME                                         READY   STATUS    RESTARTS   AGE
    nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s
    
  2. 確認 ResourceSlice 列出您新增的硬體裝置:

    kubectl get resourceslices -o yaml
    

    輸出結果會與下列內容相似:

    apiVersion: v1
    items:
    - apiVersion: resource.k8s.io/v1
      kind: ResourceSlice
      metadata:
      # Multiple lines are omitted here.
      spec:
        devices:
        - attributes:
            architecture:
              string: Ada Lovelace
            brand:
              string: Nvidia
            cudaComputeCapability:
              version: 8.9.0
            cudaDriverVersion:
              version: 13.0.0
            driverVersion:
              version: 580.65.6
            index:
              int: 0
            minor:
              int: 0
            pcieBusID:
              string: "0000:00:03.0"
            productName:
              string: NVIDIA L4
            resource.kubernetes.io/pcieRoot:
              string: pci0000:00
            type:
              string: gpu
            uuid:
              string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f
          capacity:
            memory:
              value: 23034Mi
          name: gpu-0
        - attributes:
            architecture:
              string: Ada Lovelace
            brand:
              string: Nvidia
            cudaComputeCapability:
              version: 8.9.0
            cudaDriverVersion:
              version: 13.0.0
            driverVersion:
              version: 580.65.6
            index:
              int: 1
            minor:
              int: 1
            pcieBusID:
              string: "0000:00:04.0"
            productName:
              string: NVIDIA L4
            resource.kubernetes.io/pcieRoot:
              string: pci0000:00
            type:
              string: gpu
            uuid:
              string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978
          capacity:
            memory:
              value: 23034Mi
          name: gpu-1
        driver: gpu.nvidia.com
        nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm
        pool:
          generation: 1
          name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm
          resourceSliceCount: 1
    kind: List
    metadata:
      resourceVersion: ""
    

後續步驟