Mit der dynamischen Ressourcenzuweisung (DRA) können Sie flexibel Geräte für Ihre GKE-Arbeitslasten (Google Kubernetes Engine) anfordern. In diesem Dokument wird beschrieben, wie Sie ein ResourceClaimTemplate erstellen, um vorhandene Geräte in Knotenpools in Ihrem Cluster anzufordern, und dann eine Arbeitslast erstellen, um zu sehen, wie Kubernetes die Geräte flexibel Ihren Pods zuweist.
Dieses Dokument richtet sich an Anwendungsoperatoren und Data Engineers, die Arbeitslasten wie KI/ML oder Hochleistungs-Computing (HPC) ausführen.
Geräte mit DRA anfordern
Wenn Sie Ihre GKE-Infrastruktur für DRA einrichten, erstellen die DRA-Treiber auf Ihren Knoten DeviceClass-Objekte im Cluster. Eine DeviceClass definiert eine Kategorie von Geräten, z. B. GPUs, die für Arbeitslasten angefordert werden können. Ein Plattformadministrator kann optional zusätzliche DeviceClasses bereitstellen, die einschränken, welche Geräte Sie in bestimmten Arbeitslasten anfordern können.
Wenn Sie Geräte innerhalb einer DeviceClass anfordern möchten, erstellen Sie eines der folgenden Objekte:
- ResourceClaim: Mit einem ResourceClaim können ein Pod oder ein Nutzer Hardwareressourcen anfordern, indem sie nach bestimmten Parametern innerhalb einer DeviceClass filtern.
- ResourceClaimTemplate: Ein ResourceClaimTemplate definiert eine Vorlage, die Pods verwenden können, um automatisch neue ResourceClaims pro Pod zu erstellen.
Weitere Informationen zu ResourceClaims und ResourceClaimTemplates finden Sie unter Wann sollten ResourceClaims und ResourceClaimTemplates verwendet werden?.
In den Beispielen in diesem Dokument wird eine einfache ResourceClaimTemplate verwendet, um die angegebene Gerätekonfiguration anzufordern. Weitere Informationen zu allen Feldern, die Sie angeben können, finden Sie in der API-Referenz für ResourceClaimTemplate.
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 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 diese Aufgabe 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. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
- Prüfen Sie, ob Ihre GKE-Cluster für DRA-Arbeitslasten konfiguriert sind.
Geräte beanspruchen und Arbeitslasten bereitstellen
Wenn Sie die Zuweisung von Geräten pro Pod anfordern möchten, erstellen Sie ein ResourceClaimTemplate mit der angeforderten Gerätekonfiguration, z. B. GPUs eines bestimmten Typs. Wenn Sie eine Arbeitslast bereitstellen, die auf die ResourceClaimTemplate verweist, erstellt Kubernetes für jeden Pod in der Arbeitslast ResourceClaims basierend auf der ResourceClaimTemplate. Kubernetes weist die angeforderten Ressourcen zu und plant die Pods auf den entsprechenden Knoten.
So fordern Sie GPUs in einer Arbeitslast mit DRA an:
Speichern Sie das folgende Manifest als
gpu-claim-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: gpu-claim-template spec: spec: devices: requests: - name: single-gpu exactly: deviceClassName: gpu.nvidia.com allocationMode: ExactCount count: 1ResourceClaimTemplate erstellen:
kubectl create -f gpu-claim-template.yamlSpeichern Sie das folgende Manifest als
dra-gpu-example.yaml, um eine Arbeitslast zu erstellen, die auf die ResourceClaimTemplate verweist:apiVersion: apps/v1 kind: Deployment metadata: name: dra-gpu-example spec: replicas: 1 selector: matchLabels: app: dra-gpu-example template: metadata: labels: app: dra-gpu-example spec: containers: - name: ctr image: ubuntu:22.04 command: ["bash", "-c"] args: ["echo $(nvidia-smi -L || echo Waiting...); sleep infinity"] resources: claims: - name: single-gpu resourceClaims: - name: single-gpu resourceClaimTemplateName: gpu-claim-template tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"Arbeitslast bereitstellen:
kubectl create -f dra-gpu-example.yaml
Hardwarezuordnung überprüfen
Sie können prüfen, ob Ihren Arbeitslasten Hardware zugewiesen wurde, indem Sie den ResourceClaim oder die Logs für Ihren Pod prüfen. So prüfen Sie die Zuweisung:
Rufen Sie den ResourceClaim ab, der mit der bereitgestellten Arbeitslast verknüpft ist:
kubectl get resourceclaimsDie Ausgabe sieht etwa so aus:
NAME STATE AGE dra-gpu-example-64b75dc6b-x8bd6-single-gpu-jwwdh allocated,reserved 9sWeitere Informationen zur dem Pod zugewiesenen Hardware abrufen:
kubectl describe resourceclaims RESOURCECLAIMErsetzen Sie
RESOURCECLAIMdurch den vollständigen Namen des ResourceClaim, den Sie aus der Ausgabe des vorherigen Schritts erhalten haben.Die Ausgabe sieht etwa so aus:
Name: dra-gpu-example-68f595d7dc-prv27-single-gpu-qgjq5 Namespace: default Labels: <none> Annotations: resource.kubernetes.io/pod-claim-name: single-gpu API Version: resource.k8s.io/v1 Kind: ResourceClaim Metadata: # Multiple lines are omitted here. Spec: Devices: Requests: Exactly: Allocation Mode: ExactCount Count: 1 Device Class Name: gpu.nvidia.com Name: single-gpu Status: Allocation: Devices: Results: Device: gpu-0 Driver: gpu.nvidia.com Pool: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm Request: single-gpu Node Selector: Node Selector Terms: Match Fields: Key: metadata.name Operator: In Values: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm Reserved For: Name: dra-gpu-example-68f595d7dc-prv27 Resource: pods UID: e16c2813-08ef-411b-8d92-a72f27ebf5ef Events: <none>Rufen Sie die Logs für die bereitgestellte Arbeitslast ab:
kubectl logs deployment/dra-gpu-example --all-pods=trueDie Ausgabe sieht etwa so aus:
[pod/dra-gpu-example-64b75dc6b-x8bd6/ctr] GPU 0: Tesla T4 (UUID: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef)Diese Ausgabe gibt an, dass GKE dem Container eine GPU zugewiesen hat.