GKE-Infrastruktur für DRA-Arbeitslasten vorbereiten

In diesem Dokument wird beschrieben, wie Sie Ihre Google Kubernetes Engine-Infrastruktur (GKE) manuell für die dynamische Ressourcenzuweisung (Dynamic Resource Allocation, DRA) einrichten. Die Einrichtungsschritte umfassen das Erstellen von Knotenpools, die GPUs verwenden, und das Installieren von DRA-Treibern.

Dieses Dokument richtet sich an Plattformadministratoren, die Infrastruktur mit speziellen Hardwaregeräten erstellen möchten, die Anwendungsoperatoren in Arbeitslasten anfordern können.

Beschränkungen

Es gelten folgende Einschränkungen:

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.

GKE-Knotenpool mit GPUs erstellen

In diesem Abschnitt erfahren Sie, wie Sie einen GPU-Knotenpool erstellen und die entsprechenden DRA-Treiber installieren. Die Schritte in diesem Abschnitt gelten nur für Knotenpools, die Sie manuell erstellen. So erstellen Sie einen GPU-Knotenpool, der DRA unterstützt:

  • Automatische Installation des GPU-Treibers deaktivieren: Geben Sie die Option gpu-driver-version=disabled im Flag --accelerator an.
  • GPU-Geräte-Plug-in deaktivieren: Fügen Sie dem Knotenpool das Knotenlabel gke-no-default-nvidia-gpu-device-plugin=true hinzu.
  • DRA-Treiber-DaemonSet ausführen: Fügen Sie dem Knotenpool das Knotenlabel nvidia.com/gpu.present=true hinzu.
  • Autoscaling konfigurieren: Wenn Sie den Cluster Autoscaler in Ihrem Knotenpool verwenden möchten, fügen Sie dem Knotenpool das Knotenlabel cloud.google.com/gke-nvidia-gpu-dra-driver=true hinzu. Der Cluster-Autoscaler verwendet dieses Knotenlabel, um Knoten zu identifizieren, auf denen der DRA-Treiber für GPUs ausgeführt wird.

So erstellen und konfigurieren Sie GPU-Knotenpools:

  1. Erstellen Sie einen GPU-Knotenpool. Mit den folgenden Beispielbefehlen werden Knotenpools mit unterschiedlichen Konfigurationen erstellt:

    • Erstellen Sie einen Knotenpool mit einer g2-standard-24-Instanz mit zwei L4-GPUs:

      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
      

      Ersetzen Sie Folgendes:

      • NODEPOOL_NAME: Ein Name für Ihren Knotenpool.
      • CLUSTER_NAME: Der Name Ihres Clusters.
      • CONTROL_PLANE_LOCATION: Die Region oder Zone der Clustersteuerungsebene, z. B. us-central1 oder us-central1-a.
      • NODE_LOCATION1,NODE_LOCATION2,...: Eine durch Kommas getrennte Liste von Zonen in derselben Region wie die Steuerungsebene, in denen Knoten erstellt werden sollen. Wählen Sie Zonen mit GPU-Verfügbarkeit aus.
    • Erstellen Sie einen Knotenpool mit automatischer Skalierung mit a2-ultragpu-1g-Instanzen, die jeweils eine NVIDIA A100-GPU (80 GB) haben:

      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-Treiber manuell installieren

  3. DRA-Treiber installieren

DRA-Treiber installieren

  1. Rufen Sie das Helm-Diagramm mit dem NVIDIA DRA-Treiber ab und aktualisieren Sie es:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. Installieren Sie den NVIDIA DRA-GPU-Treiber mit Version 25.8.0 oder höher:

    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'
    

    Geben Sie für Ubuntu-Knoten den Verzeichnispfad "/opt/nvidia" im Flag --set nvidiaDriverRoot an.

Prüfen, ob Ihre Infrastruktur für DRA bereit ist

  1. Prüfen Sie, ob Ihre DRA-Treiber-Pods ausgeführt werden:

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

    Die Ausgabe sieht etwa so aus:

    NAME                                         READY   STATUS    RESTARTS   AGE
    nvidia-dra-driver-gpu-kubelet-plugin-52cdm   1/1     Running   0          46s
    
  2. Prüfen Sie, ob die Hardwaregeräte, die Sie hinzugefügt haben, in der ResourceSlice aufgeführt sind:

    kubectl get resourceslices -o yaml
    

    Die Ausgabe sieht etwa so aus:

    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: ""
    

Nächste Schritte