In diesem Dokument wird beschrieben, wie Sie die Hostwartung der zugrunde liegenden Compute Engine-Instanzen für Knoten in Google Kubernetes Engine-Clustern (GKE) durchführen. Sie müssen diese Wartung nur für bestimmte Arten von Compute Engine-Instanzen aktiv verwalten, die nicht live migriert werden, einschließlich Instanzen mit GPUs und TPUs. Die in diesem Dokument beschriebenen Strategien eignen sich gut für Trainings- und Inferenz-Workloads. Wenn Sie die Hostwartung nur für einen einzelnen Knoten manuell durchführen müssen oder Ihre Arbeitslasten die automatische Hostwartung tolerieren, lesen Sie den Abschnitt Hostwartung in GKE durchführen.
Mit diesen Strategien wird die Hostwartung für Knotengruppen durchgeführt und optional werden GKE-Cluster-Upgrades initiiert.
Verwenden Sie die parallele Strategie für die Knoten von Arbeitslasten, bei denen es nur eine Ausfallzeit geben kann, z. B. für die Knoten von Trainingsarbeitslasten. Verwenden Sie die Rolling-Strategie für die Knoten von Arbeitslasten, bei denen Sie Batch-Ausfallzeiten in Kauf nehmen können, während die Verfügbarkeit der meisten Ressourcen aufrechterhalten wird, z. B. für die Knoten von Inferenzarbeitslasten.
Parallele Strategie zum Aktualisieren der Knoten von Trainingsarbeitslasten verwenden
Bei dieser Strategie werden Änderungen gleichzeitig für eine Gruppe von Knoten vorgenommen, die Beschleuniger verwenden. Sie können diese Strategie für Trainingsarbeitslasten verwenden. Alternativ können Sie sie für andere Arten von Arbeitslasten verwenden, bei denen die am wenigsten störende Methode zum Ausführen von Änderungen darin besteht, ein einzelnes Zeitfenster mit vollständiger Ausfallzeit für alle Knoten in der Gruppe und die darauf ausgeführten Arbeitslasten zu haben.
Die Strategie umfasst die folgenden allgemeinen Schritte:
- Arbeitslasten beenden: Wählen Sie die Knotenpools aus und beenden Sie entweder die darauf ausgeführten Arbeitslasten oder verschieben Sie die Arbeitslasten auf andere Knoten, die weiterhin verfügbar sind.
- Hostwartung auslösen: Wenden Sie das Wartungslabel gleichzeitig auf alle ausgewählten Knoten an und warten Sie, bis der Vorgang auf allen Knoten abgeschlossen ist.
- GKE-Version aktualisieren: Ändern Sie die GKE-Version der Knoten.
- Arbeitslasten neu starten: Starten Sie Ihre Arbeitslasten neu, nachdem alle Hostwartungen und ‑upgrades abgeschlossen sind.
Die bereitgestellten Anleitungen beziehen sich auf Änderungen für einen einzelnen Knotenpool. Sie können die Schritte jedoch anpassen, um Änderungen für mehrere Knotenpools gleichzeitig vorzunehmen. Achten Sie darauf, dass Sie vor Beginn dieser Schritte mindestens einige Stunden Zeit haben, in denen diese Arbeitslast nicht auf diesen Knoten ausgeführt werden muss.
Um Unterbrechungen zu minimieren, wenn wichtige Änderungen sowohl für die zugrunde liegenden Compute Engine-Instanzen als auch für die GKE-Knoten vorgenommen werden, nutzen Sie diese Ausfallzeit, um sowohl die Hostwartung als auch die GKE-Versionsupgrades durchzuführen. Sie können jedoch nur die Hostwartung durchführen, wenn Sie die Version Ihrer GKE-Knoten nicht aktualisieren möchten.
Hinweise
Lesen Sie sich die folgenden Hinweise durch, bevor Sie beginnen:
- Neu bereitgestellte Arbeitslasten vermeiden: Um unnötige Verzögerungen aufgrund von PodDisruptionBudgets zu vermeiden, sollten Sie keine Arbeitslasten neu bereitstellen, bis Sie alle Schritte ausgeführt haben.
- Unterbrechungen einplanen: Sorgen Sie dafür, dass Ihre Arbeitslasten für einen bestimmten Zeitraum unterbrochen werden können. Diese Schritte dauern mehrere Stunden, hauptsächlich aufgrund der Zeit, die für die Hostwartung erforderlich ist.
Updates für alle Knoten gleichzeitig durchführen
Führen Sie die folgenden Schritte aus, um die Hostwartung und optional GKE-Versionsupgrades durchzuführen:
- Arbeitslasten vorbereiten: Beenden Sie Ihre Arbeitslasten oder sorgen Sie dafür, dass sie einen aktuellen Snapshot oder Prüfpunkt erstellt haben.
Hostwartung starten und überwachen:
Unterblöcke aus Reservierungen, für die die gruppierte Wartungsplanung verwendet wird: Sie können die Wartung für Reservierungen, Reservierungsblöcke oder Reservierungsunterblöcke mit dem entsprechenden Unterbefehl
gcloud compute reservationsauslösen. Mit dem folgenden Befehl wird beispielsweise die Wartung für einen Unterblock gestartet:gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \ --block-name=BLOCK_NAME \ --sub-block-name=SUB_BLOCK_NAME \ --zone=ZONEErsetzen Sie Folgendes:
RESERVATION_NAME: der Name der Reservierung.BLOCK_NAME: der Name des Reservierungsblocks.SUB_BLOCK_NAME: der Name des Reservierungsunterblocks.ZONE: die Zone, in der die Reservierung vorhanden ist.
Compute Engine beginnt gleichzeitig mit dem Leeren und Aktualisieren aller Instanzen im Unterblock. Dieser Vorgang kann einige Stunden dauern.
Sie können den Status der Wartung überwachen, indem Sie das Metadatenfeld
upcomingGroupMaintenancein den Reservierungsressourcen prüfen. Weitere Informationen finden Sie unter Wartungsstatus ansehen.Instanzen, die eine unabhängige Wartungsplanung verwenden: Lösen Sie die Wartung für On-Demand-Instanzen oder für Reservierungen aus, die keine Unterblöcke verwenden, indem Sie das Label
cloud.google.com/perform-maintenance=trueauf die Knoten in Ihrem Knotenpool anwenden:kubectl label nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME cloud.google.com/perform-maintenance=true --overwriteCompute Engine beginnt gleichzeitig mit dem Leeren und Aktualisieren der zugrunde liegenden Instanzen. Dieser Vorgang kann einige Stunden dauern. Weitere Informationen finden Sie unter Ablauf der ordnungsgemäßen Beendigung.
Prüfen Sie die Knoten, um den Status der Wartung zu überwachen. GKE entfernt das Wartungslabel nach Abschluss der Wartung, sofern es angewendet wurde. Nach Abschluss der Wartung finden Sie in Cloud Logging einen Logeintrag mit der folgenden Meldung:
Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed.
Optional: Version der GKE-Knoten aktualisieren: Folgen Sie der Anleitung zum Aktualisieren der GKE-Version der Knoten.
Rolling-Strategie zum Aktualisieren der Knoten von Inferenzarbeitslasten verwenden
In dieser Strategie wird ein manueller Ansatz für die Wartung von GKE-Knoten beschrieben, auf denen Inferenzarbeitslasten ausgeführt werden. Dabei werden Knoten in Batches aktualisiert, um die Dienstverfügbarkeit aufrechtzuerhalten. Diese Methode eignet sich am besten für Arbeitslasten, bei denen ein bestimmter Prozentsatz von Replikaten vorübergehend offline sein kann.
Die Strategie umfasst die folgenden allgemeinen Schritte:
- Knoten identifizieren und in Batches zusammenfassen: Wählen Sie die Knotenpools aus, die aktualisiert werden sollen. Gruppieren Sie die Knoten in Batches, deren Größe der Fehlertoleranz Ihrer Arbeitslast entspricht.
- Batches durchlaufen: Wenden Sie für jeden Batch das Wartungslabel an und beobachten Sie den Batch von Knoten, bis das Label entfernt wird.
- GKE-Version aktualisieren: Nachdem alle Batches die Hostwartung abgeschlossen haben, ändern Sie die Version der GKE-Knoten.
Hinweise
Lesen Sie sich die folgenden Hinweise durch, bevor Sie beginnen:
- Bereitstellung verstehen: Für den Erfolg sind detaillierte Kenntnisse der Verteilung der Arbeitslast, der Platzierung von Replikaten und der Fehlerdomains erforderlich. Achten Sie darauf, dass Sie während des gesamten Prozesses über ausreichend Kapazität für die Bereitstellung verfügen.
- Batchgrößen planen: Knoten in Batches aktualisieren. Die Größe der einzelnen Batches wird durch die Fehlertoleranz Ihrer Arbeitslast bestimmt. Dazu gehören unter anderem folgende Faktoren:
- Die Anzahl der Replikate pro Serving-Modell.
- Die Verteilung von Replikaten auf Knoten und Ausfalldomains.
- Mit PodDisruptionBudgets können Sie die maximale Anzahl von Pods erzwingen, die gleichzeitig nicht verfügbar sind.
- Empfehlung: Um die Verwaltung zu vereinfachen, sollten Sie verschiedene Knotenpools für verschiedene Replikatsätze verwenden. So können Sie Fehlerdomains auf Knotenpoolebene isolieren.
- Zeitliche Einschränkungen berechnen: Berücksichtigen Sie die folgenden Zeitfaktoren:
- Die Durchführung des Hostwartungsschritts kann für jeden Batch mehrere Stunden dauern.
- Berechnen Sie die Mindestbatchgröße, damit alle Wartungsarbeiten innerhalb der erforderlichen Fristen abgeschlossen werden können:
MAINTENANCE_BLOCKS = floor(HOURS_TO_MAINTENANCE / 4), wobeiHOURS_TO_MAINTENANCEdie insgesamt verfügbare Zeit ist.MIN_PER_BATCH = TOTAL_NODE_COUNT / MAINTENANCE_BLOCKS
- Die ausgewählte Batchgröße muss mindestens
MIN_PER_BATCHbetragen.
- Bestimmte Arbeitslasttypen prüfen: Berücksichtigen Sie für die jeweiligen Konfigurationstypen Folgendes:
- Mixture of Experts (MOE): Achten Sie darauf, dass mit Ihrer Batching-Strategie die erforderliche Mindestanzahl an Replikaten für jedes Modell beibehalten wird.
- Disaggregated Serving: Achten Sie darauf, dass Sie beim Planen von Batches alle Replikate berücksichtigen, die an der disaggregierten Einrichtung beteiligt sind.
- Knotenpools mit mehreren Hosts (TPU, MNNVL): Bei diesen Konfigurationen wird wahrscheinlich jeweils ein ganzer Knotenpool heruntergefahren. Planen Sie Ihre Ausfalldomänen entsprechend über mehrere Knotenpools hinweg.
Rolling Updates in Batches durchführen
Wenn Sie rollierende Wartungsupdates für Hosts durchführen möchten, können Sie die Kapazität aus Reservierungen, für die die gruppierte Wartungsplanung verwendet wird, in Batches von einem oder mehreren Unterblöcken aktualisieren. Alternativ können Sie bestimmte Knotengruppen im Cluster anhand des Namens mit unabhängiger Wartungsplanung aktualisieren.
Wählen Sie die passende Strategie für Ihre Ressourcen aus:
Reservierungen in Batches von Unterblöcken aktualisieren
So führen Sie die fortlaufende Hostwartung für Kapazitätsreservierungen in Batches von Unterblöcken durch:
Reservierungen für die Wartung identifizieren: Ermitteln Sie den Namen der Kapazitätsreservierung und die Reservierungsblöcke oder ‑unterblöcke, die vom GKE-Cluster verwendet werden. Führen Sie dazu eine Suche mit GKE-Knotenlabels und dem Befehl
gcloud compute reservationsaus:Listen Sie den Reservierungsnamen und die IDs der physischen Block- und Unterblocktopologie der Knoten in Ihrem Knotenpool auf:
kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME \ -o custom-columns='NAME:.metadata.name,RESERVATION:.metadata.labels.cloud\.google\.com/reservation-name,BLOCK_ID:.metadata.labels.cloud\.google\.com/gce-topology-block,SUBBLOCK_ID:.metadata.labels.cloud\.google\.com/gce-topology-subblock'Ersetzen Sie
NODE_POOL_NAMEdurch den Namen des Knotenpools.Notieren Sie sich die Ausgabewerte: den Reservierungsnamen (z. B.
nvidia-gb300-m7kp2xq9vd4j1), die Block-ID (z. B.3f2a8c9b1d4e0756f8a2b3c1d9e4f0a5) und die Unterblock-ID (z. B.e7b91f4a3c2d58069e1a4b7f3d2c8056).Um den Ressourcennamen des Reservierungsblocks zu ermitteln, fragen Sie die Liste der Compute Engine-Reservierungsblöcke mit dem Reservierungsnamen ab und filtern Sie nach der Block-ID:
gcloud compute reservations blocks list RESERVATION_NAME \ --zone=ZONE \ --project=PROJECT_ID \ --filter="physicalTopology.block=BLOCK_ID"Ersetzen Sie Folgendes:
RESERVATION_NAME: der Name der Reservierung.ZONE: die Zone, in der die Reservierung vorhanden ist.PROJECT_ID: die Projekt-ID, in der die Reservierung vorhanden ist.BLOCK_ID: Die Block-ID, die aus den Knotenlabels abgerufen wurde.
Notieren Sie sich den Namen des Blocks aus der Ausgabe.
Wenn Sie den Ressourcennamen des Reservierungsunterblocks ermitteln möchten, fragen Sie die Liste der Reservierungsunterblöcke mit dem Reservierungsnamen und dem Blocknamen ab und filtern Sie nach der Unterblock-ID:
gcloud compute reservations sub-blocks list RESERVATION_NAME \ --block-name=BLOCK_NAME \ --zone=ZONE \ --project=PROJECT_ID \ --filter="physicalTopology.subBlock=SUBBLOCK_ID"Ersetzen Sie Folgendes:
RESERVATION_NAME: der Name der Reservierung.BLOCK_NAME: Der Ressourcenname des Reservierungsblocks.ZONE: die Zone, in der die Reservierung vorhanden ist.PROJECT_ID: die Projekt-ID, in der die Reservierung vorhanden ist.SUBBLOCK_ID: Die ID des Unterblocks, die aus den Knotenlabels abgerufen wurde.
Die Ausgabe enthält Details zum übereinstimmenden Reservierungsunterblock, einschließlich des zugehörigen Ressourcennamens.
Reservierungen in Batches aufteilen: Teilen Sie die ermittelten Unterblöcke für die Kapazitätsreservierung in gleich große Batches auf. Bestimmen Sie die Batchgröße anhand der Formel, die im Listenelement Zeitbeschränkungen berechnen im vorherigen Abschnitt Überlegungen vor dem Beginn beschrieben wird. Jeder Batch entspricht einem oder mehreren Reservierungsunterblöcken und muss mindestens die Größe eines Unterblocks haben.
Hostwartung durchführen: Führen Sie für jeden Batch die folgenden Schritte aus:
Wählen Sie eine Gruppe von Reservierungsunterblöcken aus und lösen Sie die Hostwartung aus. Sie können die Wartung für Ihre Reservierungen, Reservierungsblöcke oder Reservierungsunterblöcke auslösen. Bei Maschinentypen wie A4X, A4X Max, TPU v6e und TPU7x müssen Sie die Wartung auf diese Weise auslösen. Die Wartung erfolgt in Gruppen von Unterblöcken. Führen Sie den Befehl
gcloud compute reservations sub-blocks perform-maintenanceaus:gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \ --block-name=BLOCK_NAME \ --sub-block-name=SUB_BLOCK_NAME \ --zone=ZONEErsetzen Sie Folgendes:
RESERVATION_NAME: der Name der Reservierung.BLOCK_NAME: der Name des Reservierungsblocks.SUB_BLOCK_NAME: der Name des Reservierungsunterblocks.ZONE: die Zone, in der die Reservierung vorhanden ist.
Compute Engine beginnt gleichzeitig mit dem Leeren und Aktualisieren aller Instanzen im Unterblock. Dieser Vorgang kann einige Stunden dauern.
Sie können den Status der Wartung überwachen, indem Sie den Status des Metadatenfelds
upcomingGroupMaintenancein den Reservierungsressourcen prüfen. Weitere Informationen finden Sie unter Wartungsstatus von Reservierungen ansehen.Wiederholen Sie die vorherigen Schritte für jeden verbleibenden Batch, bis Sie die Hostwartung für alle Batches abgeschlossen haben.
Optional: Version der GKE-Knoten aktualisieren: Führen Sie diesen Schritt erst aus, nachdem die Hostwartung für alle Reservierungsunterblöcke abgeschlossen ist, um Szenarien zu vermeiden, in denen die GKE-Knoten auf Hosts bereitgestellt werden, bei denen die Wartung noch nicht abgeschlossen ist. Folgen Sie der Anleitung zum Aktualisieren der GKE-Version der Knoten.
Knoten in Batches aktualisieren
So führen Sie die fortlaufende Hostwartung für On-Demand-Instanzen oder Reservierungen durch, die keine Subblöcke in Batches unterstützen:
Knoten für die Wartung identifizieren: Identifizieren Sie alle Knoten, für die Sie eine Wartung durchführen möchten, und speichern Sie diese Liste. Verwenden Sie eine der folgenden Methoden, um Knoten zu identifizieren oder manuell auszuwählen:
Alle Knoten im Cluster abrufen, die Beschleuniger (TPUs oder GPUs) verwenden:
kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints[]? | select(.key=="nvidia.com/gpu" or .key=="google.com/tpu")) | .metadata.name'Alle Knoten in einem bestimmten Knotenpool abrufen:
kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME --no-headers -o custom-columns=":metadata.name"Ersetzen Sie
NODE_POOL_NAMEdurch den Namen des Knotenpools.Alle Knoten mit einem bestimmten Label abrufen:
kubectl get nodes -l LABEL -o jsonpath='{.items[*].metadata.name}'Ersetzen Sie
LABELdurch das Knotenlabel.
Knoten in Batches aufteilen: Teilen Sie die ermittelten Knoten in gleich große Batches auf. Bestimmen Sie die Batchgröße anhand der Formel, die im Listenelement Zeitbeschränkungen berechnen im vorherigen Abschnitt Überlegungen vor dem Beginn beschrieben wird.
Hostwartung durchführen: Führen Sie für jeden Batch die folgenden Schritte aus:
Wählen Sie eine Gruppe von Knoten aus und lösen Sie die Wartung auf Instanzebene mit der
instancesAPI aus, indem Sie das Wartungslabel anwenden:kubectl label nodes LIST_OF_NODES_IN_BATCH cloud.google.com/perform-maintenance=true --overwriteErsetzen Sie
LIST_OF_NODES_IN_BATCHdurch eine durch Leerzeichen getrennte Liste von Knoten aus dem Batch. Beispiel:node-1 node-2 node-3Compute Engine beginnt gleichzeitig mit dem Leeren und Aktualisieren der zugrunde liegenden Instanzen. Dieser Vorgang kann einige Stunden dauern. Weitere Informationen finden Sie unter Ablauf der ordnungsgemäßen Beendigung.
Status der Hostwartung überwachen GKE entfernt das Wartungslabel, wenn die Wartung abgeschlossen ist, sofern es angewendet wurde. Nach Abschluss der Wartungsarbeiten finden Sie in Logging ein Log mit der folgenden Meldung:
Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed.Wiederholen Sie die vorherigen Schritte für jeden verbleibenden Batch, bis Sie die Hostwartung für alle Batches abgeschlossen haben.
Optional: Version der GKE-Knoten aktualisieren: Führen Sie diesen Schritt erst aus, wenn die Hostwartung für alle Knoten abgeschlossen ist, um Szenarien zu vermeiden, in denen die GKE-Knoten auf Hosts bereitgestellt werden, bei denen die Wartung noch nicht abgeschlossen ist. Folgen Sie der Anleitung zum Aktualisieren der GKE-Version der Knoten.
GKE-Version der Knoten aktualisieren
Berücksichtigen Sie die Anzahl der Knoten, die Sie gleichzeitig aktualisieren möchten. Bei der parallelen Strategie wurde die Hostwartung für den gesamten Knotenpool oder mehrere Knotenpools gleichzeitig durchgeführt. Bei der rollierenden Strategie haben Sie die Hostwartung in Batches durchgeführt. Legen Sie anhand der Größe der Knotengruppen fest, welche Upgrademethode Sie verwenden möchten:
- Parallele Strategie: Wenn Ihre Knotenpools jeweils 100 oder weniger Knoten pro Zone haben, verwenden Sie Surge-Upgrades. Wenn Ihre Knotenpools jeweils mehr als 100 Knoten pro Zone haben, löschen Sie die Knotenpools und erstellen Sie sie neu.
- Rolling-Strategie: Wenn Ihre Batches 100 Knoten pro Zone, pro Knotenpool oder weniger haben, verwenden Sie Surge-Upgrades. Wenn Ihre Batches mehr als 100 Knoten pro Zone und Knotenpool enthalten, löschen Sie die Knoten und erstellen Sie sie neu.
Surge-Upgrades verwenden
Konfigurieren Sie Surge-Upgrades mit der Einstellung
maxUnavailable, um festzulegen, wie viele Knoten in einem Knotenpool gleichzeitig pro Zone nicht verfügbar sein können. Wenn Sie beispielsweise 18 Knoten in einer Zone in einem Knotenpool haben, legen Sie den Wert des FeldsmaxUnavailableauf18fest.Diese Einstellung funktioniert am besten, wenn Sie Kapazität aus einer Reservierung verwenden, in der Sie keine überschüssige Kapazität haben. Weitere Informationen dazu, warum Sie diese Einstellung verwenden sollten, finden Sie unter Upgrade in einer ressourcenknappen Umgebung.
Führen Sie mit dem folgenden Befehl ein Upgrade des Knotenpools aus. Wenn Sie mehrere Knotenpools aktualisieren möchten, führen Sie diesen Befehl für jeden Knotenpool aus:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool NODE_POOL_NAME \ --cluster-version VERSION \ --location CONTROL_PLANE_LOCATION \ --quietErsetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.NODE_POOL_NAMEist der Name des Knotenpools.VERSION: Ein empfohlenes Ziel für das automatische Upgrade für den Knotenpool. Weitere Informationen finden Sie unter Informationen zu Upgrades für Knotenpools von Standardclustern abrufen. Wenn für Ihren Cluster kein empfohlenes Ziel für automatische Upgrades vorhanden ist, sehen Sie in den GKE-Versionshinweisen unter Versionsupdates nach.CONTROL_PLANE_LOCATION: Der Standort der Steuerungsebene Ihres Clusters.
Knoten löschen und neu erstellen
Löschen Sie den Knotenpool und erstellen Sie ihn mit der neueren Version neu:
Löschen Sie den Knotenpool:
gcloud container node-pools delete NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATIONErstellen Sie den Knotenpool noch einmal und übergeben Sie die neue Version mit dem Flag
--cluster-version. Übergeben Sie das empfohlene Ziel für automatische Upgrades für den Knotenpool. Weitere Informationen finden Sie unter Informationen zu Upgrades für Knotenpools von Standardclustern abrufen. Wenn für Ihren Cluster kein empfohlenes Ziel für automatische Upgrades vorhanden ist, sehen Sie in den GKE-Versionshinweisen unter Versionsupdates nach.