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:
- Beschränkungen von DRA in GKE
- Gerätespezifische Beschränkungen, die unabhängig davon gelten, ob Sie DRA: GPU-Arbeitslasten in Standard-Clustern
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 updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
Sie benötigen einen GKE Standard-Cluster mit Version 1.35 oder höher. 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 GPU-Treiberinstallation deaktivieren: Geben Sie die
gpu-driver-version=disabledOption im--acceleratorFlag an. - 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
nvidia.com/gpu.present=trueKnotenlabel 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=trueKnotenlabel 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:
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=trueErsetzen 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-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 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
DRA-Treiber installieren
Helm-Diagramm mit dem NVIDIA-DRA-Treiber abrufen und aktualisieren:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateNVIDIA-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 nvidiaDriverRootFlag an.
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 ResourceSlice die von Ihnen hinzugefügten Hardwaregeräte auflistet:
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: ""