Auf dieser Seite erfahren Sie, wie Sie die GPU-Erreichbarkeit über den Dynamic Workload Scheduler optimieren. Wir empfehlen den Dynamic Workload Scheduler für umfangreiche Batcharbeitslasten, die außerhalb der Spitzenzeiten mit definierten GPU-Kapazitätsverwaltungsbedingungen ausgeführt werden können. Diese Arbeitslasten können ein Deep-Learning-Modelltraining oder eine Simulation sein, die große GPUs mit einem atomaren Bereitstellungsmodell erfordert. Dies bedeutet, dass alle Ressourcen gleichzeitig erstellt werden.
Informationen zum Ausführen von GPU-Arbeitslasten in Google Kubernetes Engine (GKE) ohne den Dynamic Workload Scheduler finden Sie unter GPUs in GKE-Standardknotenpools ausführen.
Wann sollte der Dynamic Workload Scheduler verwendet werden?
Wir empfehlen die Verwendung des Dynamic Workload Schedulers, wenn Ihre Arbeitslasten die folgenden Bedingungen erfüllen:
- Sie fordern GPUs zum Ausführen Ihrer Arbeitslasten an.
- Sie haben eine begrenzte oder keine reservierte GPU-Kapazität und möchten die Erreichbarkeit von GPU-Ressourcen verbessern.
- Ihre Arbeitslast ist zeitflexibel und Ihr Anwendungsfall kann es sich leisten, die gesamte angeforderte Kapazität zu erhalten, z. B. wenn GKE die GPU-Ressourcen außerhalb der stärksten Stunden zuweist.
- Ihre Arbeitslast erfordert mehrere Knoten und kann erst ausgeführt werden, wenn alle GPU-Knoten bereitgestellt und bereit sind (z. B. verteiltes Training für maschinelles Lernen).
Hinweise
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
gcloud components update
ab.
- Sie benötigen einen Standardcluster in Version 1.28.3-gke.1098000 oder höher.
- Achten Sie darauf, dass Sie Unterbrechungseinstellungen für Knotenpools mit Arbeitslasten mithilfe von Dynamic Workload Scheduler konfigurieren, um eine Unterbrechung der Arbeitslast zu vermeiden. Bei Verwendung des Dynamic Workload Schedulers sollten Sie automatische Knotenupgrades dauerhaft deaktivieren.
- Machen Sie sich mit den Einschränkungen des Dynamic Workload Schedulers vertraut.
- Achten Sie darauf, dass Sie mindestens einen Knotenpool verwalten, ohne dass der Dynamic Workload Scheduler aktiviert ist, damit der Cluster ordnungsgemäß funktioniert.
Knotenpools mit Dynamic Workload Scheduler verwenden
Mit einer der folgenden drei Methoden können Sie festlegen, dass der Dynamic Workload Scheduler mit bestimmten Knotenpools in Ihrem Cluster arbeiten kann:
- Erstellen Sie einen Knotenpool.
- Vorhandenen Knotenpool aktualisieren.
- Automatische Knotenbereitstellung konfigurieren, um Knotenpools mit aktiviertem Dynamic Workload Scheduler zu erstellen
Knotenpool erstellen
Erstellen Sie mit der gcloud CLI einen Knotenpool, für den der Dynamic Workload Scheduler aktiviert ist:
gcloud beta container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--enable-queued-provisioning \
--accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \
--machine-type=MACHINE_TYPE \
--enable-autoscaling \
--num-nodes=0 \
--total-max-nodes TOTAL_MAX_NODES \
--location-policy=ANY \
--reservation-affinity=none \
--no-enable-autorepair
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name, den Sie für den Knotenpool auswählen.CLUSTER_NAME
: Der Name des Clusters.LOCATION
: Die Compute Engine-Region des Clusters, z. B.us-central1
.GPU_TYPE
: Der GPU-Typ.AMOUNT
: Die Anzahl der GPUs, die an Knoten im Knotenpool angehängt werden sollen.DRIVER_VERSION
: Die zu installierende NVIDIA-Treiberversion. Kann eines der Folgenden sein:default
: Installieren Sie die Standardtreiberversion für Ihre GKE-Version.latest
: Installieren Sie die neueste verfügbare Treiberversion für Ihre GKE-Version. Nur für Knoten verfügbar, die Container-Optimized OS verwenden.
TOTAL_MAX_NODES
: Die maximale Anzahl von Knoten, die automatisch für den gesamten Knotenpool skaliert werden sollen.MACHINE_TYPE
: der Compute Engine-Maschinentyp für Ihre Knoten. Wir empfehlen die Auswahl eines beschleunigungsoptimierten Maschinentyps.
Optional können Sie die folgenden Flags verwenden:
--no-enable-autoupgrade
: empfohlen. Deaktiviert automatische Knotenupgrades. Wird nur in GKE-Clustern unterstützt, die nicht für eine Release-Version registriert sind. Weitere Informationen finden Sie unter Automatische Knotenupgrades für einen vorhandenen Knotenpool deaktivieren.--node-locations=COMPUTE_ZONES
: Die durch Kommas getrennte Liste mit einer oder mehreren Zonen, in denen GKE die GPU-Knoten erstellt. Die Zonen müssen sich in derselben Region wie der Cluster befinden. Wählen Sie Zonen mit verfügbaren GPUs aus.--enable-gvnic
: Dieses Flag aktiviert gVNIC auf den GPU-Knotenpools, um die Netzwerktraffic-Geschwindigkeit zu erhöhen.
Dieser Befehl erstellt einen Knotenpool mit der folgenden Konfiguration:
- GKE aktiviert die Warteschlangenbereitstellung und das Cluster-Autoscaling.
- Der Knotenpool hat anfangs null Knoten.
- Das Flag
--enable-queued-provisioning
aktiviert den Dynamic Workload Scheduler und fügt dem Knotenpool die Markierungcloud.google.com/gke-queued
hinzu. - Die Flags
--no-enable-autorepair
und--no-enable-autoupgrade
deaktivieren die automatische Reparatur und das Upgrade von Knoten, was Arbeitslasten unterbrechen kann, die auf reparierten oder aktualisierten Knoten ausgeführt werden. Sie können automatische Knotenupgrades nur auf Clustern deaktivieren, die nicht für eine Release-Version registriert sind.
Vorhandenen Knotenpool aktualisieren und Dynamic Workload Scheduler aktivieren
Aktivieren Sie den Dynamic Workload Scheduler für einen vorhandenen Knotenpool. Prüfen Sie die Voraussetzungen, um den Knotenpool korrekt zu konfigurieren.
Vorbereitung
Erstellen Sie einen Knotenpool mit dem Flag
--reservation-affinity=none
. Dieses Flag ist erforderlich, um später den Dynamic Workload Scheduler zu aktivieren, da Sie die Reservierungsaffinität nach der Erstellung des Knotenpools nicht mehr ändern können.Achten Sie darauf, dass mindestens ein Knotenpool ohne aktivierte Dynamic Workload Scheduler-Verarbeitung vorhanden ist, damit der Cluster ordnungsgemäß funktioniert.
Prüfen Sie, ob der Knotenpool leer ist. Sie können die Größe des Knotenpools so ändern, dass er null Knoten enthält.
Prüfen Sie, ob Autoscaling aktiviert und korrekt konfiguriert ist.
Achten Sie darauf, dass automatische Reparaturen deaktiviert sind.
Dynamic Workload Scheduler für vorhandenen Knotenpool aktivieren
Sie können Dynamic Workload Scheduler für einen vorhandenen Knotenpool mit der gcloud CLI aktivieren:
gcloud beta container node-pools update NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--enable-queued-provisioning
Ersetzen Sie Folgendes:
NODEPOOL_NAME
ist der Name des ausgewählten Knotenpools.CLUSTER_NAME
: Name des ClustersLOCATION
: Die Compute Engine-Region des Clusters, z. B.us-central1
.
Dieser Befehl zum Aktualisieren des Knotenpools führt zu folgenden Konfigurationsänderungen:
- Das Flag
--enable-queued-provisioning
aktiviert den Dynamic Workload Scheduler und fügt dem Knotenpool die Markierungcloud.google.com/gke-queued
hinzu.
Optional können Sie auch die folgenden Knotenpooleinstellungen aktualisieren:
- Automatische Knotenupgrades deaktivieren: Wir empfehlen, dass Sie automatische Knotenupgrades deaktivieren, da Upgrades von Knotenpools bei Verwendung des Dynamic Workload Schedulers nicht unterstützt werden. Achten Sie darauf, dass Ihr GKE-Cluster nicht für eine Release-Version registriert ist, damit Sie automatische Knotenupgrades deaktivieren können.
- gVNIC in den GPU-Knotenpools aktivieren: Google Virtual NIC (gVNIC) erhöht die Netzwerktraffic-Geschwindigkeit für GPU-Knoten.
Automatische Knotenbereitstellung aktivieren, um Knotenpools für Dynamic Workload Scheduler zu erstellen
Sie können die automatische Knotenbereitstellung verwenden, um Knotenpools für den Dynamic Workload Scheduler für Cluster zu verwalten, auf denen Version 1.29.2-gke.1553000 oder höher ausgeführt wird. Wenn Sie die automatische Knotenbereitstellung aktivieren und den Dynamic Workload Scheduler aktivieren, erstellt GKE Knotenpools mit den erforderlichen Ressourcen für die zugehörige Arbeitslast.
Beachten Sie zum Aktivieren der automatischen Knotenbereitstellung die folgenden Einstellungen und führen Sie die Schritte unter GPU-Limits konfigurieren aus:
- Geben Sie die erforderlichen Ressourcen für den Dynamic Workload Scheduler an, wenn Sie das Feature aktivieren. Führen Sie den Befehl
gcloud compute accelerator-types list
aus, um die verfügbarenresourceTypes
aufzulisten. - Wir empfehlen, die Flags
--no-enable-autoprovisioning-autoupgrade
und--no-enable-autoprovisioning-autorepair
zu verwenden, um automatische Knotenupgrades und automatische Knotenreparaturen zu deaktivieren. Weitere Informationen finden Sie unter Unterbrechungseinstellungen für Knotenpools mit Arbeitslasten mithilfe des Dynamic Workload Schedulers konfigurieren.
Batch-Arbeitslasten mit Dynamic Workload Scheduler ausführen
Zur Verwendung des Dynamic Workload Schedulers empfehlen wir die Verwendung von Kueue. Kueue implementiert die Jobwarteschlangen und entscheidet anhand der Kontingente und einer Hierarchie für die faire Freigabe von Ressourcen, wann Jobs warten und wann sie gestartet werden sollen. Dies vereinfacht die Einrichtung für VMs in der Warteschlange.
Sie können den Dynamic Workload Scheduler ohne Kueue verwenden, wenn Sie Ihre eigenen internen Batch-Planungstools oder -Plattform verwenden. Informationen zum Konfigurieren des Dynamic Workload Schedulers für Jobs ohne Kueue finden Sie unter Dynamic Workload Scheduler für Jobs ohne Kueue.
Dynamic Workload Scheduler für Jobs mit Kueue
Im folgenden Abschnitt erfahren Sie, wie Sie den Dynamic Workload Scheduler für Jobs mit Kueue konfigurieren. In diesem Abschnitt werden die Beispiele im Repository dws-examples
verwendet. Wir haben die Beispiele im Repository dws-examples
unter der Apache2-Lizenz veröffentlicht.
Umgebung vorbereiten
Führen Sie in Cloud Shell den folgenden Befehl aus:
git clone https://github.com/GoogleCloudPlatform/ai-on-gke cd ai-on-gke/tutorials-and-examples/workflow-orchestration/dws-examples
Installieren Sie Kueue in Ihrem Cluster mit der erforderlichen Konfiguration, um die Einbindung der Bereitstellungsanfrage zu aktivieren:
kubectl apply --server-side -f ./kueue-manifests.yaml
Weitere Informationen zur Kueue-Installation finden Sie unter Installation.
Kueue-Ressourcen erstellen
Mit dem folgenden Manifest erstellen Sie eine Warteschlange auf Clusterebene mit dem Namen dws-cluster-queue
und den Namespace LocalQueue dws-local-queue
. Jobs, die auf die Warteschlange dws-cluster-queue
in diesem Namespace verweisen, verwenden Dynamic Workload Scheduler, um die GPU-Ressourcen abzurufen.
LocalQueue bereitstellen:
kubectl create -f ./dws-queues.yaml
Die Ausgabe sieht in etwa so aus:
resourceflavor.kueue.x-k8s.io/default-flavor created
admissioncheck.kueue.x-k8s.io/dws-prov created
provisioningrequestconfig.kueue.x-k8s.io/dws-config created
clusterqueue.kueue.x-k8s.io/dws-cluster-queue created
localqueue.kueue.x-k8s.io/dws-local-queue created
Wenn Sie Jobs ausführen möchten, die Dynamic Workload Scheduler in anderen Namespaces verwenden, können Sie mithilfe der vorherigen Vorlage zusätzliche LocalQueues
erstellen.
Job ausführen
Im folgenden Manifest verwendet der Beispieljob den Dynamic Workload Scheduler:
Dieses Manifest enthält folgende Felder, die für die Konfiguration des Dynamischen Arbeitslastplans relevant sind:
- Das Label
kueue.x-k8s.io/queue-name: dws-local-queue
teilt GKE mit, dass Kueue für die Orchestrierung dieses Jobs verantwortlich ist. Mit diesem Label wird auch die Warteschlange definiert, in der der Job in die Warteschlange gestellt wird. - Das Flag
suspend: true
weist GKE an, die Jobressource zu erstellen, die Pods jedoch noch nicht zu planen. Kueue ändert das Flag infalse
, wenn die Knoten für die Jobausführung bereit sind. nodeSelector
weist GKE an, den Job nur im angegebenen Knotenpool zu planen. Der Wert sollte mitNODEPOOL_NAME
übereinstimmen, dem Namen des Knotenpools mit aktivierter Warteschlangenbereitstellung.
Job ausführen:
kubectl create -f ./job.yaml
Die Ausgabe sieht in etwa so aus:
job.batch/sample-job created
Überprüfen Sie den Status Ihres Jobs:
kubectl describe job sample-job
Die Ausgabe sieht in etwa so aus:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Suspended 5m17s job-controller Job suspended Normal CreatedWorkload 5m17s batch/job-kueue-controller Created Workload: default/job-sample-job-7f173 Normal Started 3m27s batch/job-kueue-controller Admitted by clusterQueue dws-cluster-queue Normal SuccessfulCreate 3m27s job-controller Created pod: sample-job-9qsfd Normal Resumed 3m27s job-controller Job resumed Normal Completed 12s job-controller Job completed
Der Dynamic Workload Scheduler mit Kueue-Integration unterstützt auch andere Arbeitslasttypen, die in der Open-Source-Umgebung verfügbar sind, z. B.:
- RayJob
- Job-Set
- Kubeflow MPIJob, TFJob, PyTorchJob.
- Kubernetes-Pods, die häufig von Workflow-Orchestratoren verwendet werden
- Flux-Minicluster
Weitere Informationen zu dieser Unterstützung finden Sie unter Batchnutzer von Kueue.
Dynamic Workload Scheduler für Jobs ohne Kueue
Erstellen Sie für jeden Job eine Anfrage über die ProvisioningRequest API. Der Dynamic Workload Scheduler startet die Pods nicht, sondern stellt nur die Knoten bereit.
Erstellen Sie das folgende
provisioning-request.yaml
-Manifest:apiVersion: v10 kind: PodTemplate metadata: name: POD_TEMPLATE_NAME namespace: NAMESPACE_NAME template: spec: nodeSelector: cloud.google.com/gke-nodepool: NODEPOOL_NAME tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule" containers: - name: pi image: perl command: ["/bin/sh"] resources: limits: cpu: "700m" nvidia.com/gpu: 1 requests: cpu: "700m" nvidia.com/gpu: 1 restartPolicy: Never --- apiVersion: autoscaling.x-k8s.io/v1beta1 kind: ProvisioningRequest metadata: name: PROVISIONING_REQUEST_NAME namespace: NAMESPACE_NAME spec: provisioningClassName: queued-provisioning.gke.io parameters: maxRunDurationSeconds: "MAX_RUN_DURATION_SECONDS" podSets: - count: COUNT podTemplateRef: name: POD_TEMPLATE_NAME
Ersetzen Sie Folgendes:
NAMESPACE_NAME
: Der Name Ihres Kubernetes-Namespace. Der Namespace muss mit dem Namespace der Pods übereinstimmen.PROVISIONING_REQUEST_NAME
Der Name desProvisioningRequest
. Sie finden diesen Namen in der Pod-Annotation.MAX_RUN_DURATION_SECONDS
: Optional die maximale Laufzeit eines Knotens in Sekunden bis zur Standardeinstellung von sieben Tagen. Weitere Informationen finden Sie unter Funktionsweise des Dynamic Workload Scheduler. Sie können diesen Wert nach dem Erstellen der Anfrage nicht mehr ändern. Dieses Feld ist in der Vorschau in der GKE-Version 1.28.5-gke.1355000 oder höher verfügbar.COUNT
: Anzahl der angeforderten Pods. Die Knoten werden in einer einzigen Zone atomar geplant.POD_TEMPLATE_NAME
: Der Standardname von Kubernetes. GKE verweist auf diesen Wert im PodSet der Bereitstellungsanfrage.NODEPOOL_NAME
: Der Name, den Sie für den Knotenpool auswählen.
Wenden Sie das Manifest an:
kubectl apply -f provisioning-request.yaml
Pods konfigurieren
Verknüpfen Sie in der Jobspezifikation die Pods mithilfe der folgenden Annotationen mit dem ProvisioningRequest
:
apiVersion: batch/v1
kind: Job
spec:
template:
metadata:
annotations:
cluster-autoscaler.kubernetes.io/consume-provisioning-request: PROVISIONING_REQUEST_NAME
cluster-autoscaler.kubernetes.io/provisioning-class-name: "queued-provisioning.gke.io"
spec:
...
Der Pod-Annotationsschlüssel cluster-autoscaler.kubernetes.io/consume-provisioning-request
definiert, welche ProvisioningRequest
genutzt werden soll. GKE verwendet die Annotationen consume-provisioning-request
und provisioning-class-name
, um Folgendes zu tun:
- Um die Pods nur in den vom Dynamic Workload Scheduler bereitgestellten Knoten zu planen.
- Vermeiden Sie eine doppelte Zählung von Ressourcenanfragen zwischen Pods und Dynamic Workload Scheduler im Cluster-Autoscaling.
- Fügen Sie die Annotation
safe-to-evict: false
ein, um zu verhindern, dass Cluster Autoscaler Pods zwischen Knoten verschiebt und Batchberechnungen unterbricht. Sie können dieses Verhalten ändern. Geben Sie dazusafe-to-evict: true
in den Pod-Annotationen an.
Status des Dynamic Workload Schedulers beobachten
Der Status eines Dynamic Workload Schedulers definiert, ob ein Pod geplant werden kann oder nicht. Mit Überwachungen von Kubernetes können Sie effizient Änderungen oder andere Tools beobachten, die Sie bereits zum Verfolgen des Status von Kubernetes-Objekten verwenden. In der folgenden Tabelle werden der mögliche Status eines Dynamic Workload Schedulers und die möglichen Ergebnisse beschrieben:
Status des Dynamic Workload Schedulers | Beschreibung | Mögliches Ergebnis |
---|---|---|
Ausstehend | Die Anfrage wurde noch nicht gesehen und verarbeitet. | Nach der Verarbeitung wechselt die Anfrage in den Status Accepted oder Failed . |
Accepted=true |
Die Anfrage wird akzeptiert und wartet darauf, dass Ressourcen verfügbar sind. | Die Anfrage sollte in den Status Provisioned wechseln, wenn Ressourcen gefunden und Knoten bereitgestellt wurden, oder in den Status Failed , wenn dies nicht möglich war. |
Provisioned=true |
Die Knoten sind bereit. | Sie haben 10 Minuten Zeit, um die Pods zu starten, um bereitgestellte Ressourcen zu verbrauchen. Nach diesem Zeitpunkt betrachtet der Cluster Autoscaler die Knoten als nicht erforderlich und entfernt sie. |
Failed=true |
Die Knoten können aufgrund von Fehlern nicht bereitgestellt werden. Failed=true ist ein Terminalstatus. |
Beheben Sie Probleme mit der Bedingung anhand der Informationen in den Feldern Reason und Message der Bedingung.
Erstellen Sie eine neue Anfrage für den Dynamic Workload Scheduler und wiederholen Sie sie. |
Provisioned=false |
Die Knoten wurden noch nicht bereitgestellt. | Bei Bei |
Pods starten
Wenn die Anfrage des Dynamic Workload Schedulers den Status Provisioned=true
erreicht, können Sie Ihren Job ausführen, um die Pods zu starten. Dadurch wird eine Verbreitung nicht planbarer Pods durch ausstehende oder fehlgeschlagene Anfragen vermieden, was sich auf die Leistung von kube-scheduler und Cluster Autoscaler auswirken kann.
Wenn Sie keine nicht planbaren Pods haben möchten, können Sie alternativ Pods parallel zum Dynamic Workload Scheduler erstellen.
Anfrage für den Dynamic Workload Scheduler abbrechen
Wenn Sie die Anfrage abbrechen möchten, bevor sie bereitgestellt wird, können Sie die ProvisioningRequest
löschen:
kubectl delete provreq PROVISIONING_REQUEST_NAME -n NAMESPACE
In den meisten Fällen verhindert das Löschen von ProvisioningRequest
, dass Knoten erstellt werden.
Je nach Zeitplan, z. B. wenn Knoten bereits bereitgestellt werden, werden die Knoten jedoch möglicherweise noch erstellt. In diesen Fällen entfernt Cluster Autoscaler die Knoten nach 10 Minuten, wenn keine Pods erstellt werden.
Funktionsweise des Dynamic Workload Schedulers
Mit dem ProvisioningRequest API
führt der Dynamic Workload Scheduler folgende Schritte aus:
- Sie teilen GKE mit, dass Ihre Arbeitslast für einen begrenzten Zeitraum warten kann, bis alle erforderlichen Knoten gleichzeitig einsatzbereit sind.
- Das Cluster-Autoscaling akzeptiert Ihre Anfrage und berechnet die Anzahl der erforderlichen Knoten als solche, die als eine Einheit behandelt werden.
- Die Anfrage wartet, bis alle benötigten Ressourcen in einer einzigen Zone verfügbar sind.
- Cluster Autoscaler stellt die erforderlichen Knoten auf einmal bereit, sofern verfügbar.
- Alle Pods der Arbeitslast können gemeinsam auf neu bereitgestellten Knoten ausgeführt werden.
- Die bereitgestellten Knoten sind auf eine Laufzeit von sieben Tagen oder weniger beschränkt, wenn Sie den Parameter
maxRunDurationSeconds
so festlegen, dass die Arbeitslasten weniger Zeit für die Ausführung benötigen. Weitere Informationen finden Sie unter Laufzeit einer VM begrenzen (Vorschau). Diese Funktion ist in der GKE-Version 1.28.5-gke.1355000 oder höher verfügbar. Danach werden die Knoten und die darauf ausgeführten Pods vorzeitig beendet. Wenn die Pods früher beendet sind und die Knoten nicht verwendet werden, entfernt Cluster Autoscaler sie gemäß dem Autoscaling-Profil. - Die Knoten werden zwischen dem Dynamic Workload Scheduler nicht wiederverwendet. Mit jeder
ProvisioningRequest
wird die Erstellung neuer Knoten mit der neuen siebentägigen Laufzeit bestellt.
Kontingent
Die Anzahl der ProvisioningRequests
mit dem Status Accepted
ist durch ein dediziertes Kontingent begrenzt, das pro Projekt und unabhängig für jede Region konfiguriert wird.
Kontingent in der Google Cloud Console prüfen
So prüfen Sie den Namen des Kontingentlimits und die aktuelle Nutzung in der Google Cloud Console:
Rufen Sie in der Google Cloud Console die Seite Kontingente auf.
Wählen Sie im Feld
Filter das Attribut Messwert aus, geben Sieactive_resize_requests
ein und drücken Sie die Eingabetaste.
Der Standardwert ist 100. Folgen Sie der Anleitung in der Anleitung zum Anfordern eines höheren Kontingentlimits, um das Kontingent zu erhöhen.
Prüfen, ob der Dynamic Workload Scheduler durch das Kontingent begrenzt ist
Wenn die Ausführung Ihrer Dynamic Workload Scheduler-Anfrage länger als erwartet dauert, prüfen Sie, ob die Anfrage nicht durch ein Kontingent begrenzt ist. Möglicherweise müssen Sie ein höheres Kontingent anfordern.
Prüfen Sie bei Clustern mit Version 1.29.2-gke.1181000 oder höher, ob bestimmte Kontingentbeschränkungen verhindern, dass Ihre Anfrage ausgeführt wird:
kubectl describe provreq PROVISIONING_REQUEST_NAME \
--namespace NAMESPACE
Die Ausgabe sieht in etwa so aus:
…
Last Transition Time: 2024-01-03T13:56:08Z
Message: Quota 'NVIDIA_P4_GPUS' exceeded. Limit: 1.0 in region europe-west4.
Observed Generation: 1
Reason: QuotaExceeded
Status: False
Type: Provisioned
…
In diesem Beispiel kann GKE keine Knoten bereitstellen, da in der Region europe-west4
nicht genügend Kontingent vorhanden ist.
Unterbrechungseinstellungen für Knotenpools mit Arbeitslasten mithilfe des Dynamic Workload Schedulers konfigurieren
Arbeitslasten, die die Verfügbarkeit aller Knoten oder der meisten Knoten in einem Knotenpool erfordern, sind empfindlich auf Bereinigungen. Die automatische Reparatur oder ein Upgrade eines Knotens, der mit ProvisioningRequest API
bereitgestellt wird, wird nicht unterstützt, da bei diesen Vorgängen alle auf diesem Knoten ausgeführten Arbeitslasten entfernt werden und die Arbeitslasten nicht planbar werden.
Um Unterbrechungen bei der Ausführung von Arbeitslasten mit dem Dynamic Workload Scheduler zu minimieren, empfehlen wir die folgenden Maßnahmen:
- Verwenden Sie je nach Release-Kanalregistrierung Ihres Clusters die folgenden Best Practices, um zu verhindern, dass automatische Knotenupgrades Ihre Arbeitslasten beeinträchtigen:
- Wenn Ihr Cluster nicht in einer Release-Version registriert ist, deaktivieren Sie die automatischen Knotenupgrades.
- Wenn Ihr Cluster in einer Release-Version registriert ist, verwenden Sie Wartungsfenster und -ausschlüsse, um zu verhindern, dass GKE Ihre Knoten automatisch aktualisiert, während Ihre Arbeitslast ausgeführt wird.
- Automatische Knotenreparatur deaktivieren
- Verwenden Sie Wartungsfenster und -ausschlüsse, um Unterbrechungen bei laufenden Arbeitslasten zu minimieren und zu gewährleisten, dass ein Zeitfenster vorhanden ist, in dem GKE den Knotenpool für eine automatische Wartung unterbrechen kann. Wenn Sie diese Wartungstools verwenden, müssen Sie ein bestimmtes Zeitfenster festlegen, in dem GKE den Knotenpool stören kann. Daher empfehlen wir, dieses Zeitfenster festzulegen, wenn keine Arbeitslasten ausgeführt werden.
- Damit Ihr Knotenpool auf dem neuesten Stand bleibt, empfehlen wir ein manuelles Upgrade Ihres Knotenpools, wenn keine aktiven Dynamic Workload Scheduler-Anfragen vorhanden sind und der Knotenpool leer ist.
Beschränkungen
- Anti-Affinität zwischen Pods wird nicht unterstützt. Cluster Autoscaler berücksichtigt während der Knotenbereitstellung keine Anti-Affinitätsregeln zwischen Pods, was zu nicht planbaren Arbeitslasten führen kann. Dies kann passieren, wenn Knoten für zwei oder mehr Dynamic Workload Scheduler-Objekte im selben Knotenpool bereitgestellt wurden.
- Nur GPU-Knoten werden unterstützt.
- Reservierungen werden mit dem Dynamic Workload Scheduler nicht unterstützt. Beim Erstellen des Knotenpools müssen Sie
--reservation-affinity=none
angeben. Der Dynamic Workload Scheduler erfordert und unterstützt nur die StandortrichtlinieANY
für Cluster-Autoscaling. - Eine einzelne Dynamic Workload Scheduler-Anfrage kann bis zu 1.0000VMs erstellen. Dies ist die maximale Anzahl von Knoten pro Zone für einen einzelnen Knotenpool.
- GKE verwendet das
ACTIVE_RESIZE_REQUESTS
-Kontingent von Compute Engine, um die Anzahl der Anfragen für Dynamic Workload Scheduler zu steuern, die in einer Warteschlange ausstehen. Dieses Kontingent ist auf Google Cloud-Projektebene standardmäßig auf 100 beschränkt. Wenn Sie versuchen, eine Dynamic Workload Scheduler-Anfrage zu erstellen, die dieses Kontingent überschreitet, schlägt die neue Anfrage fehl. - Knotenpools, die Dynamic Workload Scheduler verwenden, sind störungsanfällig, da die Knoten gemeinsam bereitgestellt werden. Weitere Informationen finden Sie unter Unterbrechungseinstellungen für Knotenpools mit Arbeitslasten mithilfe des Dynamic Workload Schedulers konfigurieren.
- In der Google Cloud Console werden möglicherweise zusätzliche kurzlebige VMs angezeigt. Dieses Verhalten ist beabsichtigt, da Compute Engine VMs erstellen und sofort entfernen kann, bis die Kapazität zum Bereitstellen aller erforderlichen Maschinen verfügbar ist.
- Die Integration des Dynamic Workload Schedulers unterstützt nur ein PodSet. Wenn Sie verschiedene Pod-Vorlagen kombinieren möchten, verwenden Sie die Vorlage mit den meisten angeforderten Ressourcen. Die Kombination verschiedener Maschinentypen, z. B. VMs mit verschiedenen GPU-Typen, wird nicht unterstützt.