Auf dieser Seite wird erläutert, wie Sie Spot-VMs erstellen und verwalten. Dazu gehört Folgendes:
- Spot-VMs erstellen, starten und ermitteln
- Vorzeitiges Beenden von Spot-VMs erkennen, verwalten und testen
- Best Practices für Spot-VMs
Spot-VMs sind VM-Instanzen, die das Spot-Bereitstellungsmodell verwenden. Spot-VMs sind mit einem Rabatt von bis zu 60% auf den On-Demand-Preis von Standard-VMs verfügbar. Weitere Informationen finden Sie auf der Preisseite. Compute Engine kann die Ressourcen jedoch jederzeit zurückfordern, indem sie Spot-VMs vorzeitig beendet. Spot-VMs werden nur für fehlertolerante Arbeitslasten empfohlen, die einem vorzeitigen Beenden von VMs standhalten.
Hinweis
- Lesen Sie mehr über Spot-VMs, insbesondere über die Einschränkungen.
- Prüfen Sie, ob Sie ein ausreichendes Kontingent für die Ressourcen haben, die Sie anfordern möchten. Weitere Informationen finden Sie unter Zuweisungskontingente.
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren:
Wählen Sie den Tab für die geplante Verwendung der Beispiele auf dieser Seite aus:
Console
Wenn Sie über die Google Cloud Console auf Google Cloud -Dienste und -APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.
gcloud
-
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud initWenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
- Legen Sie eine Standardregion und -zone fest.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
Terraform
Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
REST
Wenn Sie die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, verwenden Sie die Anmeldedaten, die Sie der gcloud CLI bereitstellen.
Installieren Sie die Google Cloud CLI.
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.
Erforderliche Rollen
Um die Berechtigungen zu erhalten, die Sie zum Erstellen einer Spot-VM benötigen, bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) für das Projekt zuzuweisen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen einer Spot-VM erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind zum Erstellen einer Spot-VM erforderlich:
compute.instances.createfür das Projekt-
Zum Erstellen der VM mit einem benutzerdefinierten Image:
compute.images.useReadOnlyfür das Image -
Zum Erstellen der VM mit einem Snapshot:
compute.snapshots.useReadOnlyfür den Snapshot -
Zum Erstellen der VM mit einer Instanzvorlage:
compute.instanceTemplates.useReadOnlyfür die Instanzvorlage -
Zum Angeben eines Subnetzes für Ihre VM:
compute.subnetworks.usefür das Projekt oder für das ausgewählte Subnetz -
Zum Festlegen einer statischen IP-Adresse für die VM:
compute.addresses.usefür das Projekt -
Zum Zuweisen einer externen IP-Adresse zur VM, wenn Sie ein VPC-Netzwerk verwenden:
compute.subnetworks.useExternalIpfür das Projekt oder für das ausgewählte Subnetz -
Zum Zuweisen eines Legacy-Netzwerks zur VM:
compute.networks.usefür das Projekt -
Zum Zuweisen einer externen IP-Adresse zur VM, wenn Sie ein Legacy-Netzwerk verwenden:
compute.networks.useExternalIpfür das Projekt -
Zum Festlegen von Metadaten der VM-Instanz für die VM:
compute.instances.setMetadatafür das Projekt -
Zum Festlegen von Tags für die VM:
compute.instances.setTagsfür die VM -
Zum Festlegen von Labels für die VM:
compute.instances.setLabelsfür die VM -
Zum Festlegen eines Dienstkontos für die VM:
compute.instances.setServiceAccountfür die VM -
Zum Erstellen eines neuen Laufwerks für die VM:
compute.disks.createfür das Projekt -
Zum Anhängen eines vorhandenen Laufwerks im Lese- oder Lese-/Schreibmodus:
compute.disks.usefür das Laufwerk -
Zum Anhängen eines vorhandenen Laufwerks im Lesemodus:
compute.disks.useReadOnlyfür das Laufwerk
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Vorbereiten des Erstellens von Spot-VMs
Bevor Sie Spot-VMs für eine Arbeitslast erstellen, führen Sie die folgenden Schritte aus:
Arbeitslast so konfigurieren, dass sie mit dem Präemptieren umgehen kann Wir empfehlen, entweder ein Script vorzubereiten, das die Unterbrechung verarbeitet und als Teil Ihrer Arbeitslast ausgeführt wird, oder eine Datei, die Sie in den VM-Metadaten hinzufügen können, damit sie beim Herunterfahren ausgeführt wird. Eine Anleitung dazu finden Sie unter Vorzeitiges Beenden von Spot-VMs verwalten.
Wir empfehlen dringend, sich die Daten für Spot-VMs anzusehen, um einen Maschinentyp und einen Standort auszuwählen. Wenn Sie einen Maschinentyp und einen Standort mit einer höheren Ressourcenverfügbarkeit auswählen, können Sie die Wahrscheinlichkeit von Fehlern bei der Ressourcenverfügbarkeit und einer längeren Betriebszeit vor der Unterbrechung erhöhen.
Verlaufsdaten zu vorzeitigen Beendigungen und Preisen, die besonders bei der Planung langfristiger Arbeitslasten hilfreich sind, finden Sie unter Rate der vorzeitigen Beendigungen und Preisdaten für Spot-VMs ansehen.
Aktuelle Verfügbarkeitsdaten, die besonders hilfreich sind, wenn Sie kurz vor dem Erstellen von Spot-VMs für kurzfristige Arbeitslasten stehen, finden Sie unter Verfügbarkeit von Spot-VMs ansehen.
Methode zum Erstellen von Spot-VMs auswählen Wir empfehlen, eine Methode wie folgt auszuwählen:
Wenn Sie noch keine Spot-VMs erstellt haben oder eine kleine, kurzfristige Arbeitslast haben, lesen Sie den Abschnitt Spot-VM erstellen.
Wenn Sie bereits Spot-VMs erstellt haben und mehrere Spot-VMs erstellen möchten, z. B. für eine große, langfristige Arbeitslast, lesen Sie den Abschnitt Verwaltete Instanzgruppe (MIG) mit Spot-VMs erstellen.
Wenn Sie Spot-VMs mit TPUs erstellen und verwalten möchten, lesen Sie den Abschnitt TPU-Spot-VMs anfordern.
Weitere Informationen zu Empfehlungen zum Erstellen von Spot-VMs finden Sie unter Best Practices.
Spot-VM erstellen
Nachdem Sie die Erstellung von Spot-VMs vorbereitet haben, können Sie eine Spot-VM mit einer der folgenden Methoden erstellen.
Console
Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.
Führen Sie im Bereich Maschinenkonfiguration, der standardmäßig geöffnet ist, die folgenden Schritte aus:
- Wählen Sie im Abschnitt Bereitstellungsmodell aus der Liste VM-Bereitstellungsmodell die Option Spot aus. Der Abschnitt Erweiterte Einstellungen für das VM-Bereitstellungsmodell wird maximiert.
Wählen Sie in der Liste Benachrichtigungsdauer bei Preemption eine Option aus, die dem Umgang mit Preemption entspricht.
Wenn Sie 120 Sekunden auswählen, müssen Sie dafür sorgen, dass das vorzeitige Beenden in Ihrer Arbeitslast berücksichtigt wird, bevor Sie eine Spot-VM erstellen. Prüfen Sie beispielsweise, ob Ihre Arbeitslast ein Skript zum Speichern Ihres Fortschritts enthält, das erst ausgeführt wird, wenn eine Unterbrechung erkannt wird.
Wenn Sie 0 Sekunden (Standard) auswählen, müssen Sie das vorzeitige Beenden mit einem Shutdown-Skript verwalten. Bevor Sie eine Spot-VM erstellen, erstellen Sie eine Datei mit einem Shutdown-Script, das Ihren Fortschritt speichert, wenn das Herunterfahren durch Preemption verursacht wird. Hängen Sie dieses Herunterfahr-Script an, wie in einem späteren Schritt beschrieben.
Optional: Wenn Sie die Beendigungsaktion auswählen möchten, die ausgeführt wird, wenn Compute Engine die VM vorzeitig beendet, wählen Sie in der Liste Bei VM-Beendigung eine der folgenden Optionen aus:
- Wählen Sie Beenden (Standardeinstellung) aus, um die VM während des vorzeitigen Beendens zu beenden.
- Wählen Sie Löschen aus, um die VM während des vorzeitigen Beendens zu löschen.
So fügen Sie ein Herunterfahrskript hinzu: Wenn Sie für die Dauer der Benachrichtigung über die Unterbrechung 0 Sekunden (Standard) ausgewählt haben, ist dieser Schritt erforderlich, um die Unterbrechung zu verarbeiten. Wenn Sie 120 Sekunden ausgewählt haben, ist dieser Schritt optional.
- Klicken Sie im Navigationsmenü auf Erweitert.
- Klicken Sie im Abschnitt Metadaten auf Element hinzufügen.
- Geben Sie im Feld Schlüssel
shutdown-scriptfür den Metadatenschlüssel ein. - Fügen Sie im Feld Wert den Inhalt eines Herunterfahrskripts hinzu, das die Preemption verarbeitet. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Beispiel für die Verarbeitung von vorzeitigen Beendigungen.
Optional: Geben Sie weitere Konfigurationsoptionen an. Weitere Informationen finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen.
Klicken Sie zum Erstellen und Starten der VM auf Erstellen.
gcloud
Verwenden Sie zum Erstellen einer VM mit der gcloud CLI den Befehl gcloud compute instances create:
Wenn Sie eine VM erstellen, sollten Sie immer einen Maschinentyp, einen Standort und ein Betriebssystem-Image angeben.
Wenn Sie eine Spot-VM erstellen möchten, müssen Sie das Flag --provisioning-model=SPOT angeben.
Wenn Sie die Dauer der Benachrichtigung über die Preemption angeben möchten, fügen Sie das Flag --preemption-notice-duration und bei Bedarf ein Shutdown-Script ein.
Optional können Sie mit dem Flag --instance-termination-action auch eine Beendigungsaktion für Spot-VMs festlegen.
gcloud compute instances create VM_NAME \
--machine-type=MACHINE_TYPE \
--zone=ZONE \
--image-family=IMAGE_FAMILY \
--image-project=IMAGE_PROJECT \
--provisioning-model=SPOT \
--instance-termination-action=TERMINATION_ACTION \
--preemption-notice-duration=PREEMPTION_NOTICE_DURATION \
--metadata shutdown-script=SHUTDOWN_SCRIPT
Ersetzen Sie Folgendes:
VM_NAMEist der Name der neuen VM.MACHINE_TYPE: der vordefinierte oder benutzerdefinierte Maschinentyp für die neue VM.ZONEist die Zone, in der die VM erstellt werden soll. Diese Zone muss auch den Maschinentyp unterstützen, der für die neue VM verwendet werden soll.IMAGE_FAMILYist eine Image-Familie. Dieser Wert gibt das neueste nicht verworfene Betriebssystem-Image an. Wenn Sie beispielsweisedebian-13angeben, wird die aktuelle Version in der Debian 13-Image-Familie verwendet. Weitere Informationen zur Verwendung von Image-Familien finden Sie unter Best Practices für Image-Familien.IMAGE_PROJECTist das Projekt, das das Image enthält. Wenn Sie beispielsweisedebian-13als Image-Familie festlegen, geben Siedebian-cloudals Image-Projekt an.TERMINATION_ACTION: Optional: Geben Sie an, welche Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.PREEMPTION_NOTICE_DURATION: Gibt an, ob eine Benachrichtigungsdauer für die Unterbrechung aktiviert werden soll. Für die gcloud CLI muss der Wert entweder120soder0ssein.Wenn Sie
120sangeben, müssen Sie das Vorhaben in Ihrer Arbeitslast berücksichtigen. Optional können Sie auch ein Herunterfahrskript angeben.Wenn Sie
0s(Standard) angeben, müssen Sie das vorzeitige Beenden in einem Shutdown-Skript verarbeiten.
SHUTDOWN_SCRIPT: ein Shutdown-Skript.Wenn Sie
PREEMPTION_NOTICE_DURATIONauf0s(Standard) festlegen, müssen Sie ein Shutdown-Script angeben, um die Unterbrechung zu verarbeiten. Weitere Informationen zum Formatieren und Angeben eines Shutdown-Skripts finden Sie unter Shutdown-Skripts ausführen.Wenn Sie kein Shutdown-Script angeben möchten, können Sie das Flag
--metadata shutdown-scriptentfernen.
Terraform
Mit einer Terraform-Ressource können Sie eine Spot-VM mit dem Block scheduling erstellen, wie im folgenden Beispiel gezeigt.
Wenn Sie ein Shutdown-Skript zum Verarbeiten von vorzeitigen Beendigungen hinzufügen möchten, fügen Sie auch einen metadata-Block hinzu, wie unter Shutdown-Skripts ausführen beschrieben.
Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Vorzeitiges Beenden verarbeiten.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
REST
Wenn Sie eine VM mit der Compute Engine API erstellen möchten, verwenden Sie die Methode instances.insert.
Wenn Sie eine VM erstellen, sollten Sie immer einen Maschinentyp, einen Standort und ein Betriebssystem-Image angeben.
Zum Erstellen einer Spot-VM müssen Sie das Feld "provisioningModel": "SPOT" angeben.
Fügen Sie das Feld preemptionNoticeDuration ein, um die Dauer der Benachrichtigung über die Unterbrechung anzugeben.
Optional können Sie mit dem Feld instanceTerminationAction auch eine Beendigungsaktion für Spot-VMs festlegen.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "scheduling": { "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION", "preemptionNoticeDuration": { "seconds": PREEMPTION_NOTICE_DURATION } }, "metadata": { "items": [ { "key": "shutdown-script", "value": "SHUTDOWN_SCRIPT" } ] } }
Ersetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID des Projekts, in dem die VM erstellt werden soll.ZONEist die Zone, in der die VM erstellt werden soll. Diese Zone muss auch den Maschinentyp unterstützen, der für die neue VM verwendet werden soll.MACHINE_TYPE: der vordefinierte oder benutzerdefinierte Maschinentyp für die neue VM.VM_NAMEist der Name der neuen VM.IMAGE_PROJECT: Das Projekt, das das Image enthält. Wenn Sie beispielsweisefamily/debian-13als Image-Familie festlegen, geben Siedebian-cloudals Image-Projekt an.IMAGE: Geben Sie eine der folgenden Optionen an:- Eine bestimmte Version eines öffentlichen Images. Ein bestimmtes Image ist beispielsweise
"sourceImage": "projects/debian-cloud/global/images/debian-13-trixie-v20260908", wobeidebian-clouddasIMAGE_PROJECTist. - Eine Image-Familie.
Dadurch wird die VM aus dem neuesten nicht verworfenen Betriebssystem-Image erstellt.
Wenn Sie beispielsweise
"sourceImage": "projects/debian-cloud/global/images/family/debian-13"angeben, wobeidebian-cloudderIMAGE_PROJECTist, erstellt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in der Debian 13-Image-Familie.
- Eine bestimmte Version eines öffentlichen Images. Ein bestimmtes Image ist beispielsweise
TERMINATION_ACTION: Optional: Geben Sie an, welche Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.PREEMPTION_NOTICE_DURATION: Gibt an, ob eine Benachrichtigungsdauer für die Unterbrechung aktiviert werden soll. Für REST muss der Wert entweder120oder0sein.Wenn Sie
120angeben, müssen Sie das Vorhaben in Ihrer Arbeitslast berücksichtigen. Optional können Sie auch ein Herunterfahrskript angeben.Wenn Sie
0(Standard) angeben, müssen Sie das vorzeitige Beenden in einem Shutdown-Skript verarbeiten.
SHUTDOWN_SCRIPT: ein Shutdown-Skript.Wenn Sie
PREEMPTION_NOTICE_DURATIONauf0(Standard) festlegen, müssen Sie ein Shutdown-Script angeben, um die Unterbrechung zu verarbeiten. Weitere Informationen zum Formatieren und Angeben eines Shutdown-Skripts finden Sie unter Shutdown-Skripts ausführen. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Beispiel für die Verarbeitung von vorzeitigen Beendigungen.Wenn Sie kein Shutdown-Script angeben möchten, können Sie das Feld
metadataund die Unterfelder entfernen.
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen.
Spot-VMs starten
Wie andere VMs starten Spot-VMs bei der Erstellung. Ebenso können Sie, wenn Spot-VMs beendet werden, die VMs neu starten und zum Status RUNNING zurückkehren.
Sie können vorzeitig beendete Spot-VMs beliebig oft stoppen und neu starten, solange Kapazität vorhanden ist.
Weitere Informationen finden Sie unter Lebenszyklus von VM-Instanzen.
Wenn Compute Engine eine oder mehrere Spot-VMs in einer verwalteten Instanzgruppe (Managed Instance Group, MIG) oder einem Google Kubernetes Engine-Cluster (GKE) beendet, startet die Gruppe die VMs neu, sobald die Ressourcen wieder verfügbar sind.
Bereitstellungsmodell und Beendigungsaktion einer VM identifizieren
Ermitteln Sie anhand des Bereitstellungsmodells einer VM, ob es sich um eine Standard-VM, Spot-VM oder präemptive VM handelt. Für eine Spot-VM können Sie auch die Beendigungsaktion identifizieren. Sie können das Bereitstellungsmodell und die Beendigungsaktion einer VM über dieGoogle Cloud Console, die gcloud CLI oder die Compute Engine API identifizieren.
Console
Rufen Sie die Seite VM-Instanzen auf.
Klicken Sie auf den Namen der VM, die Sie ändern möchten. Die Seite VM-Instanzdetails wird geöffnet.
Wechseln Sie unten auf der Seite zum Abschnitt Verwaltung. Aktivieren Sie im Unterbereich Verfügbarkeitsrichtlinien die folgenden Optionen:
- Wenn das VM-Bereitstellungsmodell auf Spot gesetzt ist, ist die VM eine Spot-VM.
- Bei VM gibt Beendigung an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet: entweder beenden oder löschen.
- Wenn das VM-Bereitstellungsmodell auf Standard oder – gesetzt ist, gilt Folgendes:
- Wenn die Option Abrufbarkeit auf Ein festgelegt ist, ist die VM eine VM auf Abruf.
- Andernfalls ist die VM eine Standard-VM.
- Wenn das VM-Bereitstellungsmodell auf Spot gesetzt ist, ist die VM eine Spot-VM.
gcloud
Verwenden Sie zum Beschreiben einer VM mit der gcloud CLI den Befehl gcloud compute instances describe:
gcloud compute instances describe VM_NAME
Dabei ist VM_NAME der Name der VM, die Sie prüfen möchten.
Prüfen Sie in der Ausgabe das Feld scheduling, um die VM zu identifizieren:
Wenn die Ausgabe das Feld
provisioningModelenthält, das aufSPOTfestgelegt ist, ist die VM eine Spot-VM, ähnlich wie im Folgenden.... scheduling: ... provisioningModel: SPOT instanceTerminationAction: TERMINATION_ACTION ...
Dabei gibt
TERMINATION_ACTIONan, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet – entweder Stoppen (STOP) oder Löschen (DELETE). Wenn das FeldinstanceTerminationActionfehlt, ist der StandardwertSTOP.Wenn dagegen die Ausgabe das Feld
provisioningModelenthält, das aufstandardgesetzt ist, oder wenn das FeldprovisioningModelnicht in der Ausgabe angegeben ist:- Wenn die Ausgabe das Feld
preemptibleenthält, das auftruegesetzt ist, ist die VM eine VM auf Abruf. - Andernfalls ist die VM eine Standard-VM.
- Wenn die Ausgabe das Feld
REST
Zum Beschreiben einer VM aus der Compute Engine API verwenden Sie die Methode instances.get:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Ersetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID des Projekts, in dem sich die VM befindet.ZONEist die Zone, in der sich die VM befindet.VM_NAMEist der Name der VM, die Sie prüfen möchten.
Prüfen Sie in der Ausgabe das Feld scheduling, um die VM zu identifizieren:
Wenn die Ausgabe das Feld
provisioningModelenthält, das aufSPOTfestgelegt ist, ist die VM eine Spot-VM, ähnlich wie im Folgenden.{ ... "scheduling": { ... "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" ... }, ... }Dabei gibt
TERMINATION_ACTIONan, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet – entweder Stoppen (STOP) oder Löschen (DELETE). Wenn das FeldinstanceTerminationActionfehlt, ist der StandardwertSTOP.Wenn dagegen die Ausgabe das Feld
provisioningModelenthält, das aufstandardgesetzt ist, oder wenn das FeldprovisioningModelnicht in der Ausgabe angegeben ist:- Wenn die Ausgabe das Feld
preemptibleenthält, das auftruegesetzt ist, ist die VM eine VM auf Abruf. - Andernfalls ist die VM eine Standard-VM.
- Wenn die Ausgabe das Feld
Go
Java
Python
Vorzeitiges Beenden von Spot-VMs verwalten
In den folgenden Abschnitten erfahren Sie, wie Sie das vorzeitige Beenden von Spot-VMs verwalten:
- Vorwegnahme verarbeiten
- Vorzeitiges Beenden von Spot-VMs erkennen.
- Einstellungen für das vorzeitige Beenden testen
Umgang mit vorzeitigem Beenden
Wenn Compute Engine mit dem vorzeitigen Beenden einer Spot-VM beginnt, können Sie versuchen, Bereinigungsaktionen auszuführen, bevor die VM heruntergefahren wird. Der Umgang mit der Unterbrechung kann das ordnungsgemäße Beenden eines laufenden Prozesses und die Übertragung des Status Ihrer Arbeitslast umfassen.
Sie haben folgende Möglichkeiten, um auf das Vorbelegungssignal einer Spot-VM zu reagieren. Weitere Informationen dazu, wo Sie das vorzeitige Beenden für Ihre Arbeitslast verarbeiten, finden Sie in der Definition der Dauer der Benachrichtigung über das vorzeitige Beenden.
- Unterbrechungen in Ihrer Arbeitslast verarbeiten Wir empfehlen diese Methode für Spot-VMs mit einer Vorwarnungsdauer von 120 Sekunden. Konfigurieren Sie in Ihrer Arbeitslast Code für die Verarbeitung von Preemption, der erst ausgeführt wird, wenn die Preemption beginnt, wie unter Preemption in einer VM erkennen beschrieben. Ihr Code für die Verarbeitung des vorzeitigen Beendens wird dann während der Dauer der Benachrichtigung über das vorzeitige Beenden ausgeführt. Optional kann für diese VMs auch ein Herunterfahrskript angegeben werden, das während des Herunterfahrens ausgeführt wird.
- Vorzeitiges Beenden mit einem Shutdown-Skript verwalten Wir empfehlen diese Methode für Spot-VMs ohne Dauer des Hinweises auf vorzeitiges Beenden, was die Standardkonfiguration ist. Konfigurieren Sie Ihren Code speziell für die Verarbeitung von Preemption in einem Shutdown-Script, wie im folgenden Beispiel gezeigt. Das Shutdown-Script wird während der Zeitspanne für das Herunterfahren (Best-Effort) bei jeder Art von Herunterfahren automatisch bis zu 30 Sekunden lang ausgeführt. Daher sollten Sie den Code für die Verarbeitung der vorzeitigen Beendigung so konfigurieren, dass er nur ausgeführt wird, wenn die VM vorzeitig beendet wird, wie unter Vorzeitige Beendigung in einer VM erkennen beschrieben.
Beispiel für den Umgang mit vorzeitigem Beenden
Im folgenden Beispielskript wird gezeigt, wie Sie die Unterbrechung durch Hochladen einer Checkpoint-Datei in einen Cloud Storage-Bucket behandeln. Sie können dieses Skript entweder in Ihrer Arbeitslast ausführen oder als Shutdown-Skript konfigurieren. Nachdem ein angegebenes Programm ordnungsgemäß beendet wurde, lädt das Skript parallel eine Prüfpunktdatei in einen Cloud Storage-Bucket hoch.
Nachdem das Script beendet wurde oder das Zeitlimit überschritten wurde, werden alle verbleibenden Prozesse mit dem normalen kill-Befehl des Betriebssystems beendet.
#!/bin/bash
MY_PROGRAM="PROGRAM_NAME" # For example, "apache2" or "nginx"
MY_USER="LOCAL_USER"
CHECKPOINT="/home/$MY_USER/checkpoint.out"
BUCKET_NAME="BUCKET_NAME" # For example, "my-checkpoint-files" (without gs://)
echo "Shutting down! Seeing if ${MY_PROGRAM} is running."
# Find the newest copy of $MY_PROGRAM
PID="$(pgrep -n "$MY_PROGRAM")"
if [[ "$?" -ne 0 ]]; then
echo "${MY_PROGRAM} not running, shutting down immediately."
exit 0
fi
echo "Sending SIGINT to $PID"
kill -2 "$PID"
# Portable waitpid equivalent
while kill -0 "$PID"; do
sleep 1
done
echo "$PID is done, copying ${CHECKPOINT} to gs://${BUCKET_NAME} as ${MY_USER}"
su "${MY_USER}" -c "gcloud storage cp $CHECKPOINT gs://${BUCKET_NAME}/"
echo "Done uploading, shutting down."
Das Skript setzt Folgendes aus:
Die VM wurde mindestens mit Lese- oder Schreibzugriff auf Cloud Storage erstellt. Eine Anleitung zum Erstellen einer VM mit den entsprechenden Bereichen finden Sie in der Dokumentation zur Authentifizierung.
Sie haben einen Cloud Storage-Bucket und die Berechtigung zum Schreiben in diesen Bucket.
Um dieses Skript einer VM hinzuzufügen, konfigurieren Sie es so, dass es mit der Arbeitslast auf der VM funktioniert, und fügen es dann der Arbeitslast oder den VM-Metadaten hinzu.
Kopieren oder laden Sie das Beispielskript herunter:
Kopieren Sie das vorherige Script, nachdem Sie Folgendes ersetzt haben:
PROGRAM_NAME: der Name des Prozesses oder Programms, das Sie beenden möchten. Beispiel:apache2odernginxLOCAL_USER: Der Nutzername, mit dem Sie auf der VM angemeldet sind.BUCKET_NAME: der Name des Cloud Storage-Bucket, in dem Sie die Checkpoint-Datei des Programms speichern möchten. Der Bucket-Name beginnt in diesem Fall nicht mitgs://.
Laden Sie das Beispielskript auf Ihre lokale Workstation herunter. Ersetzen Sie dann die folgenden Variablen in der Datei:
PROGRAM_NAME: der Name des Prozesses oder Programms, das Sie beenden möchten. Beispiel:apache2odernginxLOCAL_USER: Der Nutzername, mit dem Sie auf der VM angemeldet sind.BUCKET_NAME: der Name des Cloud Storage-Bucket, in dem Sie die Checkpoint-Datei des Programms speichern möchten. Der Bucket-Name beginnt in diesem Fall nicht mitgs://.
Konfigurieren Sie die Erkennung vorzeitiger Beendigungen und fügen Sie das Skript entsprechend dem Ort hinzu, an dem Sie die vorzeitige Beendigung verarbeiten möchten, entweder in Ihrer Arbeitslast oder in einem Shutdown-Skript. Weitere Informationen dazu, wo Sie das vorzeitige Beenden für Ihre Arbeitslast verarbeiten, finden Sie in der Definition der Dauer der Benachrichtigung über das vorzeitige Beenden.
Unterbrechungen in Ihrer Arbeitslast verarbeiten:Führen Sie die folgenden Schritte aus.
Konfigurieren Sie das Script so, dass es wartet, bis das vorzeitige Beenden beginnt, wie unter Vorzeitiges Beenden in einer VM erkennen beschrieben.
Fügen Sie das Skript Ihrer Arbeitslast hinzu.
Vorzeitiges Beenden mit einem Shutdown-Skript verarbeiten:Führen Sie die folgenden Schritte aus.
Wir empfehlen, das Script so zu konfigurieren, dass es nur ausgeführt wird, wenn das Herunterfahren durch ein vorzeitiges Beenden verursacht wird, wie unter Vorzeitiges Beenden in einer VM erkennen beschrieben. Sie müssen beispielsweise keine Prüfpunktdatei hochladen, wenn Ihre VM heruntergefahren wird, weil Ihre Arbeitslast abgeschlossen ist.
Fügen Sie das Shutdown-Skript einer neuen VM oder einer vorhandenen VM hinzu.
Vorzeitiges Beenden von Spot-VMs erkennen
In den folgenden Abschnitten werden die Methoden beschrieben, mit denen Sie das Präemptieren von Spot-VMs erkennen können.
- Vorzeitiges Beenden in einer VM erkennen: Mit dieser Methode können Sie beispielsweise in einem Shutdown-Script nach einem vorzeitigen Beenden suchen oder die Verarbeitung des vorzeitigen Beendens für Spot-VMs mit einer Benachrichtigungsdauer von 120 Sekunden auslösen.
- Vorgänge für die vorzeitige Beendigung ansehen: Verwenden Sie diese Methode beispielsweise, um festzustellen, warum Spot-VMs heruntergefahren wurden.
Vorzeitiges Beenden in einer VM erkennen
Wenn Sie erkennen möchten, ob eine VM von der VM selbst aus präemptiv beendet wird, prüfen Sie den Metadatenserver auf den Wert preempted in den Standardmetadaten der VM. Verwenden Sie beispielsweise eine oder mehrere der folgenden Methoden, je nachdem, wo Sie die Unterbrechung behandeln möchten.
Wenn Sie das vorzeitige Beenden in einem Shutdown-Skript verarbeiten, prüfen Sie den aktuellen Wert von
preempted. Sie können den folgendencurl-Befehl in der VM ausführen, um den aktuellen Wert fürpreemptedabzurufen:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUEWenn dieser Wert
TRUEist, wurde die VM von Compute Engine vorzeitig beendet, andernfalls lautet erFALSE. Verwenden Sie diesen Befehl beispielsweise in einem Shutdown-Script, um je nach Ursache des Herunterfahrens unterschiedliche Aktionen auszuführen.Wenn Sie die Unterbrechung in Ihrer Arbeitslast verarbeiten, warten Sie, bis
preemptedTRUEist. Wenn Sie warten möchten, bispreemptedTRUEist, können Sie den Abfrageparameter?wait_for_change=truean die URL des vorherigen Befehls anhängen. Mit diesem Abfrageparameter führt der Befehl eine hängende HTTP-GET-Anfrage aus, die nur zurückgegeben wird, wenn sich die Metadaten geändert haben und die VM vorzeitig beendet wurde.curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUEDieser Befehl ist nützlich, wenn Sie die Verarbeitung von Präemptionen außerhalb eines Shutdown-Skripts auslösen möchten. Mit dieser Methode können Sie beispielsweise die Verarbeitung vorzeitiger Beendigungen für Spot-VMs mit einer Benachrichtigungsdauer von 120 Sekunden auslösen.
Vorwegnahmevorgänge ansehen
Sie können Unterbrechungsvorgänge von Compute Engine über dieGoogle Cloud console, die gcloud CLI oder die Compute Engine API aufrufen.
Console
Im Systemaktivitätsprotokoll können Sie prüfen, ob eine VM vorzeitig beendet wurde.
Rufen Sie in der Google Cloud Console die Seite Logs auf.
Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.
Fügen Sie
compute.instances.preemptedzum Feld Nach Label oder Textsuche filtern hinzu.Optional können Sie auch einen VM-Namen eingeben, wenn Sie Vorgänge der vorzeitigen Beendigung für eine bestimmte VM prüfen möchten.
Drücken Sie die Eingabetaste, um die angegebenen Filter anzuwenden. Die Google Cloud Console aktualisiert die Liste der Logs so, dass nur die Vorgänge angezeigt werden, bei denen eine VM vorzeitig beendet wurde.
Wählen Sie einen Vorgang aus der Liste aus, um Details zur VM zu sehen, die vorzeitig beendet wurde.
gcloud
Verwenden Sie den Befehl gcloud compute operations list mit einem Filterparameter, um eine Liste vorzeitig beendeter Ereignisse in Ihrem Projekt zu erhalten.
gcloud compute operations list \
--filter="operationType=compute.instances.preempted"
Optional können Sie die Ergebnisse durch zusätzliche Filterparameter anpassen. Mit dem folgenden Befehl können Sie beispielsweise Ereignisse der vorzeitigen Beendigung nur für Instanzen innerhalb einer verwalteten Instanzgruppe aufrufen:
gcloud compute operations list \
--filter="operationType=compute.instances.preempted AND targetLink:instances/BASE_INSTANCE_NAME"
Dabei ist BASE_INSTANCE_NAME der Basisname, der als Präfix für die Namen aller VMs in dieser verwalteten Instanzgruppe verwendet wird.
Die entsprechende Ausgabe sieht etwa so aus:
NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-yyyyyyyy compute.instances.preempted us-central1-f/instances/example-instance-yyy 200 DONE 2015-04-02T12:12:10.881-07:00
Der Vorgangstyp compute.instances.preempted zeigt an, dass die VM vorzeitig beendet wurde. Mit dem Befehl gcloud compute operations describe erhalten Sie weitere Informationen zu einem bestimmten Vorgang zur vorzeitigen Beendigung.
gcloud compute operations describe SYSTEM_EVENT \
--zone=ZONE
Ersetzen Sie Folgendes:
SYSTEM_EVENT: Das Systemereignis aus der Ausgabe des Befehlsgcloud compute operations list, z. B.systemevent-yyyyyyyy.ZONE: Die Zone des Systemereignisses, z. B.us-central1-f.
Die Ausgabe sieht in etwa so aus:
... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/operations/systemevent-yyyyyyyy startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
Mit der Methode zoneOperations.get können Sie eine Liste der letzten Systemvorgänge für ein bestimmtes Projekt und eine bestimmte Zone abrufen.
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations
Ersetzen Sie Folgendes:
PROJECT_ID: Eine Projekt-ID.ZONE: eine Zone.
Wenn Sie die Antworten optional so eingrenzen möchten, dass nur Vorgänge zur vorzeitigen Beendigung angezeigt werden, können Sie Ihrer API-Anfrage einen Filter hinzufügen:
operationType="compute.instances.preempted"
Alternativ können Sie zum Abrufen von Vorgängen zur vorzeitigen Beendigung für eine bestimmte VM den Parameter targetLink zum Filter hinzufügen:
operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Ersetzen Sie Folgendes: + PROJECT_ID: die Projekt-ID.
+ ZONE: die Zone.
+ VM_NAME: der Name einer bestimmten VM in dieser Zone und in diesem Projekt.
Die Antwort enthält eine Liste der letzten Vorgänge. Vorzeitiges Beenden sieht beispielsweise so aus:
{
"kind": "compute#operation",
"id": "15041793718812375371",
"name": "systemevent-yyyyyyyy",
"zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f",
"operationType": "compute.instances.preempted",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/instances/example-instance",
"targetId": "12820389800990687210",
"status": "DONE",
"statusMessage": "Instance was preempted.",
...
}
Einstellungen für vorzeitiges Beenden testen
Sie können simulierte Wartungsereignisse für Ihre Spot-VMs ausführen, um eine vorzeitige Beendigung zu erzwingen. Mit diesem Feature können Sie testen, wie Ihre Arbeitslasten das Vorrecht erkennen und darauf reagieren. Unter Hostwartungsereignis simulieren erfahren Sie, wie Sie Wartungsereignisse in Ihren Instanzen testen.
Best Practices
Im Folgenden finden Sie einige Best Practices, mit denen Sie Spot-VMs optimal nutzen können.
Ressourcenverfügbarkeit ansehen Bevor Sie Spot-VMs erstellen oder wenn Sie versuchen, Spot-VMs zu erstellen, aber immer wieder Fehler bei der Ressourcenverfügbarkeit auftreten, können Sie die Verfügbarkeit eines Maschinentyps in einer bestimmten Region oder Zone prüfen. Wenn Sie die Verfügbarkeit von Ressourcen prüfen, erhöhen Sie die Wahrscheinlichkeit, dass Sie Spot-VMs erfolgreich erstellen können. Eine Anleitung finden Sie unter Verfügbarkeit von Spot-VMs ansehen.
Verlaufsdaten ansehen Bevor Sie Spot-VMs erstellen, können Sie die bisherige Rate der vorzeitigen Beendigungen und die bisherigen Preise für die Maschinentypen ansehen, die Ihre Spot-VMs verwenden sollen. Anhand dieser Informationen können Sie den Maschinentyp vergleichen und auswählen, der am besten zu Ihrer Arbeitslast und Ihren Kostenanforderungen passt. Eine Anleitung finden Sie unter Abrufquote und Preise für Spot-VMs ansehen.
Instanzvorlagen verwenden. Anstatt Spot-VMs einzeln zu erstellen, können Sie mit Instanzvorlagen mehrere Spot-VMs mit denselben Attributen erstellen. Instanzvorlagen sind für die Verwendung von MIGs erforderlich. Alternativ können Sie mehrere Spot-VMs mit der Bulk-Instanz-API erstellen.
Mit MIGs die Ressourcenverfügbarkeit verbessern und Spot-VMs automatisch neu erstellen. Verwenden Sie MIGs, um Arbeitslasten auf Spot-VMs flexibler und stabiler zu gestalten. Um beispielsweise Fehler bei der Ressourcenverfügbarkeit zu vermeiden, können Sie die Flexibilität Ihrer Arbeitslast erhöhen, indem Sie Folgendes zulassen:
- Mit regionalen MIGs können Sie mehrere Standorte zulassen.
- Mehrere Maschinentypen zulassen, indem Sie die Flexibilität der Instanzen verwenden.
Außerdem können MIGs vorzeitig beendete Spot-VMs reparieren, indem sie sie automatisch neu erstellen.
Kleinere Maschinentypen auswählen. Ressourcen für Spot-VMs stammen aus überschüssiger Kapazität und Sicherungskapazität von Google Cloud . Die Kapazität für Spot-VMs ist häufig für kleinere Maschinentypen leichter zu erhalten, also für Maschinentypen mit weniger Ressourcen wie vCPUs und Arbeitsspeicher. Wenn Sie einen kleineren benutzerdefinierten Maschinentyp auswählen, finden Sie möglicherweise mehr Kapazität für Spot-VMs. Für kleinere vordefinierte Maschinentypen ist die Kapazität jedoch wahrscheinlicher. Im Vergleich zu der Kapazität für den vordefinierten Maschinentyp
n2-standard-32ist die Kapazität für den benutzerdefinierten Maschinentypn2-custom-24-96wahrscheinlicher, aber die Kapazität für den vordefinierten Maschinentypn2-standard-16ist noch wahrscheinlicher.Führen Sie große Cluster von Spot-VMs außerhalb der Spitzenzeiten aus. Die Belastung der Google Cloud Rechenzentren variiert je nach Standort und Tageszeit, ist aber in der Regel nachts und am Wochenende am geringsten. Somit eignen sich Nächte und Wochenenden am besten zur Ausführung großer Cluster von Spot-VMs.
Arbeitslasten so konzipieren, dass sie fehlertolerant sind und vorzeitig beendet werden können Man sollte immer darauf vorbereitet sein, dass Änderungen bei den vorzeitigen Beendigungsmustern zu unterschiedlichen Zeiten auftreten. Wenn beispielsweise eine Zone teilweise ausfällt, könnte eine große Anzahl von Spot-VMs vorzeitig beendet werden, um Platz für Standard-VMs zu schaffen, die im Rahmen der Wiederherstellung verschoben werden müssen. In diesem kleinen Zeitfenster würde die vorzeitige Beendigungsrate ganz anders als an jedem anderen Tag aussehen. Wenn Ihr Arbeitslast davon ausgeht, dass vorzeitige Beendigungen immer in kleinen Gruppen erfolgen, sind Sie möglicherweise nicht auf einen derartigen Fall vorbereitet.
Erstellen von Spot-VMs wiederholen, die vorzeitig beendet wurden. Wenn die Spot-VMs vorzeitig beendet wurden, versuchen Sie ein- oder zweimal, neue Spot-VMs zu erstellen, bevor Sie auf Standard-VMs zurückgreifen. Je nach Anforderungen können Sie Standard-VMs und Spot-VMs in Ihren Clustern kombinieren, um eine Fortsetzung der Arbeit mit einer angemessenen Geschwindigkeit sicherzustellen.
Fortschritt speichern, um Vorwegnahme zu vermeiden: Verwalten Sie Hinweise zu Shutdown und vorzeitiger Beendigung, indem Sie den Fortschritt Ihrer Arbeitslast speichern. Dann kann die Arbeitslast nach einer Unterbrechung an jener Stelle wiederaufgenommen werden, an der sie unterbrochen wurde, und muss nicht vollständig neu erstellt werden. Speichern Sie beispielsweise den Fortschritt, wenn ein vorzeitiges Beenden erkannt wird, wie unter Vorzeitiges Beenden von Spot-VMs verwalten beschrieben. Um die Robustheit weiter zu erhöhen, sollten Sie den Fortschritt auch in regelmäßigen Abständen speichern, nicht nur, wenn eine Unterbrechung erkannt wird.
Nächste Schritte
- Stellen Sie eine Verbindung zur VM-Instanz her.
- Weitere Informationen zu Shutdown-Skripts
- Laufzeit einer VM begrenzen
- Informationen zu Instanzvorlagen
- Informationen zu verwalteten Instanzgruppen (MIGs)