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:
- Einschränkungen von DRA in GKE
- Gerätespezifische Einschränkungen, die unabhängig davon gelten, ob Sie DRA verwenden: GPU-Arbeitslasten in Standardclustern
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 updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Sie benötigen einen GKE-Standardcluster, auf dem Version 1.35 oder höher ausgeführt wird. Sie können auch einen regionalen Cluster erstellen.
Installieren Sie Helm. Wenn Sie Cloud Shell verwenden, ist Helm bereits installiert.
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=disabledim Flag--acceleratoran. - GPU-Geräte-Plug-in deaktivieren: Fügen Sie dem Knotenpool das Knotenlabel
gke-no-default-nvidia-gpu-device-plugin=truehinzu. - DRA-Treiber-DaemonSet ausführen: Fügen Sie dem Knotenpool das Knotenlabel
nvidia.com/gpu.present=truehinzu. - 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=truehinzu. 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:
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=trueErsetzen 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-central1oderus-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
DRA-Treiber installieren
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 updateInstallieren 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 nvidiaDriverRootan.
Prüfen, ob Ihre Infrastruktur für DRA bereit ist
Prüfen Sie, ob Ihre DRA-Treiber-Pods ausgeführt werden:
kubectl get pods -n nvidia-dra-driver-gpuDie Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sPrüfen Sie, ob die Hardwaregeräte, die Sie hinzugefügt haben, in der ResourceSlice aufgeführt sind:
kubectl get resourceslices -o yamlDie 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: ""