GKE-Infrastruktur für DRA-Arbeitslasten vorbereiten

In diesem Dokument wird erläutert, wie Sie Ihre Google Kubernetes Engine-Infrastruktur (GKE) manuell einrichten, um die dynamische Ressourcenzuweisung (Dynamic Resource Allocation, DRA)zu unterstützen. Zu den Einrichtungsschritten gehören das Erstellen von Knotenpools, die GPUs verwenden, und das Installieren von DRA-Treibern.

Dieses Dokument richtet sich an Plattformadministratoren , die eine Infrastruktur mit speziellen Hardwaregeräten erstellen möchten, die von Anwendungsoperatoren in Arbeitslasten angefordert werden 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, installieren und dann initialisieren Sie die gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem gcloud components update Befehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.

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 GPU-Treiberinstallation deaktivieren: Geben Sie die gpu-driver-version=disabled Option im --accelerator Flag 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 nvidia.com/gpu.present=true Knotenlabel hinzu.
  • Autoscaling konfigurieren: Wenn Sie den Cluster-Autoscaler in Ihrem Knotenpool verwenden möchten, fügen Sie dem Knotenpool das cloud.google.com/gke-nvidia-gpu-dra-driver=true Knotenlabel 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:

    • Knotenpool mit einer g2-standard-24-Instanz mit zwei L4-GPUs erstellen:

      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 von der Cluster-Steuerungsebene, 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 aus, in denen GPUs verfügbar sind.
    • Autoskalierten Knotenpool mit a2-ultragpu-1g-Instanzen erstellen, 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. Helm-Diagramm mit dem NVIDIA-DRA-Treiber abrufen und aktualisieren:

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

    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 "/opt/nvidia" Verzeichnispfad im --set nvidiaDriverRoot Flag 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 ResourceSlice die von Ihnen hinzugefügten Hardwaregeräte auflistet:

    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