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 mit dem Spot-Bereitstellungsmodell. Spot-VMs sind im Vergleich zum Preis von Standard-VMs mit einem Rabatt von bis zu 60 bis 91% verfügbar. Die Compute Engine kann die Ressourcen jedoch jederzeit zurückfordern, indem Spot-VMs vorzeitig beendet werden. Spot-VMs werden nur für fehlertolerante Anwendungen empfohlen, die einem vorzeitigen Beenden von VMs standhalten. Prüfen Sie deshalb, ob Ihre Anwendung ein vorzeitiges Beenden verwalten kann, bevor Sie Spot-VMs erstellen.
Hinweise
- Lesen Sie die Konzeptdokumentation zu Spot-VMs:
- Prüfen Sie die Einschränkungen und Preise von Spot-VMs.
- Wenn Sie verhindern möchten, dass Spot-VMs Ihre Kontingente für CPUs, GPUs und Laufwerke von Standard-VMs verbrauchen, sollten Sie ein Kontingent für vorzeitige Beendigungen für Spot-VMs anfordern.
-
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 bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- VM-Bereitstellungsmodell, das in der Google Cloud Console auf Spot gesetzt ist
--provisioning-model=SPOT
in der gcloud CLI"provisioningModel": "SPOT"
in der Compute Engine APIRufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.
Gehen Sie anschließend so vor:
- Wählen Sie im Abschnitt Verfügbarkeitsrichtlinien aus der Liste VM-Bereitstellungsmodell die Option Spot aus. Diese Einstellung deaktiviert die Optionen für den automatischen Neustart und die Hostwartung für die VM und die Option zur Beendigungsaktion.
- Optional: Wählen Sie in der Liste Beim Beenden der VM aus, was passiert, wenn Compute Engine die VM vorzeitig beendet:
- Wählen Sie Beenden (Standardeinstellung) aus, um die VM während des vorzeitigen Beendens zu stoppen.
- Wählen Sie Löschen aus, um die VM während des vorzeitigen Beendens zu löschen.
Optional: Geben Sie andere VM-Optionen an. Weitere Informationen finden Sie unter VM-Instanz erstellen und starten.
Klicken Sie zum Erstellen und Starten der VM auf Erstellen.
VM_NAME
ist der Name der neuen VM.TERMINATION_ACTION
: Optional: Geben Sie an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP
(Standardverhalten) oderDELETE
.VM_NAME
ist der Name der neuen VM.IMAGE
: Wählen Sie eine der folgenden Optionen aus:IMAGE
: Eine bestimmte Version eines öffentlichen Image oder der Image-Familie. Ein bestimmtes Image ist beispielsweise--image=debian-10-buster-v20200309
.- Eine Image-Familie.
Dadurch wird die VM aus dem neuesten nicht verworfenen Betriebssystem-Image erstellt.
Wenn Sie beispielsweise
--image-family=debian-10
angeben, legt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in der Debian 10-Image-Familie an.
IMAGE_PROJECT
ist das Projekt, das das Image enthält. Wenn Sie beispielsweisedebian-10
als Image-Familie festlegen, geben Siedebian-cloud
als Image-Projekt an.MACHINE_TYPE
ist der vordefinierte oder benutzerdefinierte Maschinentyp für die neue VM.TERMINATION_ACTION
: Optional: Geben Sie an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP
(Standardverhalten) oderDELETE
.Verwenden Sie zum Abrufen einer Liste der in einer Zone verfügbaren Maschinentypen den Befehl
gcloud compute machine-types list
mit dem Flag--zones
.PROJECT_ID
ist die Projekt-ID des Projekts, in dem die VM erstellt werden soll.ZONE
ist 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
ist der vordefinierte oder benutzerdefinierte Maschinentyp für die neue VM.VM_NAME
ist der Name der neuen VM.IMAGE_PROJECT
: Das Projekt, das das Image enthält. Wenn Sie beispielsweisefamily/debian-10
als Image-Familie festlegen, geben Siedebian-cloud
als Image-Projekt an.IMAGE
: Wählen Sie eine der folgenden Optionen aus:- Eine bestimmte Version eines öffentlichen Images. Ein bestimmtes Image ist beispielsweise
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
, wobeidebian-cloud
dasIMAGE_PROJECT
ist. - 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-10"
angeben, wobeidebian-cloud
derIMAGE_PROJECT
ist, erstellt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in Debian. 10-Image-Familie.
- Eine bestimmte Version eines öffentlichen Images. Ein bestimmtes Image ist beispielsweise
TERMINATION_ACTION
: Optional: Geben Sie an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP
(Standardverhalten) oderDELETE
.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.
Wenn die Ausgabe das Feld
provisioningModel
enthält, das aufSPOT
festgelegt ist, ist die VM eine Spot-VM, ähnlich wie im Folgenden.... scheduling: ... provisioningModel: SPOT instanceTerminationAction: TERMINATION_ACTION ...
Dabei gibt
TERMINATION_ACTION
an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet – entweder Stoppen (STOP
) oder Löschen (DELETE
). Wenn das FeldinstanceTerminationAction
fehlt, ist der StandardwertSTOP
.Wenn dagegen die Ausgabe das Feld
provisioningModel
enthält, das aufstandard
gesetzt ist, oder wenn das FeldprovisioningModel
nicht in der Ausgabe angegeben ist:- Wenn die Ausgabe das Feld
preemptible
enthält, das auftrue
gesetzt ist, ist die VM eine VM auf Abruf. - Andernfalls ist die VM eine Standard-VM.
- Wenn die Ausgabe das Feld
PROJECT_ID
ist die Projekt-ID des Projekts mit der VM.ZONE
ist die Zone, in der sich die VM befindet.VM_NAME
ist der Name der VM, die Sie prüfen möchten.Wenn die Ausgabe das Feld
provisioningModel
enthält, das aufSPOT
festgelegt ist, ist die VM eine Spot-VM, ähnlich wie im Folgenden.{ ... "scheduling": { ... "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" ... }, ... }
Dabei gibt
TERMINATION_ACTION
an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet – entweder Stoppen (STOP
) oder Löschen (DELETE
). Wenn das FeldinstanceTerminationAction
fehlt, ist der StandardwertSTOP
.Wenn dagegen die Ausgabe das Feld
provisioningModel
enthält, das aufstandard
gesetzt ist, oder wenn das FeldprovisioningModel
nicht in der Ausgabe angegeben ist:- Wenn die Ausgabe das Feld
preemptible
enthält, das auftrue
gesetzt ist, ist die VM eine VM auf Abruf. - Andernfalls ist die VM eine Standard-VM.
- Wenn die Ausgabe das Feld
Die VM wurde mindestens mit Lese-/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.
Kopieren Sie das Shutdown-Skript oder laden Sie es herunter:
Kopieren Sie das vorherige Shutdown-Skript und ersetzen Sie darin Folgendes:
PROGRAM_NAME
ist der Name des Prozesses oder Programms, das Sie herunterfahren möchten. Beispiel:apache2
odernginx
LOCAL_USER
ist der Nutzername, mit dem Sie in der virtuellen Maschine angemeldet sind.BUCKET_NAME
ist der Name des Cloud Storage-Buckets, in dem die Prüfpunktdatei des Programms gespeichert werden soll. Der Bucket-Name beginnt in diesem Fall nicht mitgs://
.
Laden Sie das Shutdown-Skript auf Ihre lokale Workstation herunter und ersetzen Sie in der Datei die folgenden Variablen:
[PROGRAM_NAME]
ist der Name des Prozesses oder Programms, das Sie herunterfahren möchten. Beispiel:apache2
odernginx
[LOCAL_USER]
ist der Nutzername, mit dem Sie in der virtuellen Maschine angemeldet sind.[BUCKET_NAME]
ist der Name des Cloud Storage-Buckets, in dem die Prüfpunktdatei des Programms gespeichert werden soll. Der Bucket-Name beginnt in diesem Fall nicht mitgs://
.
Fügen Sie das Shutdown-Skript einer neuen VM oder einer vorhandenen VM hinzu.
Öffnen Sie in der Google Cloud Console die Seite Logs.
Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.
Fügen Sie
compute.instances.preempted
zum 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.
SYSTEM_EVENT
: das Systemereignis aus der Ausgabe des Befehlsgcloud compute operations list
, z. B.systemevent-xxxxxxxx
.ZONE
: Die Zone des Systemereignisses, z. B.us-central1-f
.PROJECT_ID
: eine Projekt-ID.ZONE
: eine Zone.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 Spot-VMs regional verteilen und automatisch neu erstellen. Verwenden Sie MIGs, um Arbeitslasten auf Spot-VMs flexibler und stabiler zu gestalten. Verwenden Sie beispielsweise regionale MIGs, um VMs auf mehrere Zonen zu verteilen. Dadurch werden Fehler bei der Ressourcenverfügbarkeit minimiert. Außerdem können Sie Spot-VMs mithilfe der automatischen Reparatur automatisch neu erstellen, nachdem sie vorzeitig beendet wurden.
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-32
ist die Kapazität für den benutzerdefinierten Maschinentypn2-custom-24-96
wahrscheinlicher, aber die Kapazität für den vordefinierten Maschinentypn2-standard-16
ist noch wahrscheinlicher.Führen Sie große Cluster von Spot-VMs außerhalb der Spitzenzeiten aus. Die Auslastung der Google Cloud-Rechenzentren variiert je nach Standort und Tageszeit, ist aber im Allgemeinen nachts und am Wochenende am niedrigsten. Somit eignen sich Nächte und Wochenenden am besten zur Ausführung großer Cluster von Spot-VMs.
Anwendungen tolerant gegenüber Fehlern und vorzeitigem Beenden gestalten. 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 die Anwendung 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.
Shutdown-Skripts verwenden. Verwalten Sie Hinweise zu Shutdown und vorzeitiger Beendigung mit einem Shutdown-Skript, das den Fortschritt eines Jobs speichern kann. Dann kann der Job nach einer Unterbrechung an jener Stelle wiederaufgenommen werden, an der er unterbrochen wurde, und muss nicht vollständig neu erstellt werden.
- Stellen Sie eine Verbindung zur VM-Instanz her.
- Weitere Informationen zu Shutdown-Skripts
- Weitere Informationen zum Begrenzen der Laufzeit einer VM
- Informationen zu Instanzvorlagen
- Informationen zu verwalteten Instanzgruppen (MIGs)
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 dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen unter Set up authentication for a local development environment.
REST
Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.
Spot-VM erstellen
Erstellen Sie eine Spot-VM mit der Google Cloud Console, der gcloud CLI oder der Compute Engine API. Eine Spot-VM ist eine beliebige VM, die für die Verwendung des Spot-Bereitstellungsmodells konfiguriert ist:
Console
gcloud
Verwenden Sie zum Erstellen einer VM mit der gcloud CLI den Befehl
gcloud compute instances create
: Zum Erstellen von Spot-VMs müssen Sie das Flag--provisioning-model=SPOT
angeben. Optional können Sie mit dem Flag--instance-termination-action
auch eine Beendigungsaktion für Spot-VMs festlegen.gcloud compute instances create VM_NAME \ --provisioning-model=SPOT \ --instance-termination-action=TERMINATION_ACTION
Dabei gilt:
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter VM-Instanz erstellen und starten. Verwenden Sie beispielsweise den folgenden Befehl, um Spot-VMs mit einem angegebenen Maschinentyp und Image zu erstellen:
gcloud compute instances create VM_NAME \ --provisioning-model=SPOT \ [--image=IMAGE | --image-family=IMAGE_FAMILY] \ --image-project=IMAGE_PROJECT \ --machine-type=MACHINE_TYPE \ --instance-termination-action=TERMINATION_ACTION
Dabei gilt:
Terraform
Mit einer Terraform-Ressource können Sie eine Spot-Instanz mit dem Planungsblock erstellen.
REST
Wenn Sie eine VM mit der Compute Engine API erstellen möchten, verwenden Sie die Methode
instances.insert
. Sie müssen dabei einen Maschinentyp und einen Namen für die VM angeben. Optional können Sie ein Image für das Bootlaufwerk festlegen.Zum Erstellen von Spot-VMs müssen Sie das Feld
"provisioningModel": spot
angeben. Optional können Sie auch eine Beendigungsaktion für Spot-VMs angeben, indem Sie das Feld"instanceTerminationAction"
einfügen.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" }, ... }Dabei gilt:
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter VM-Instanz erstellen und starten.
Go
Java
Python
Um mehrere Spot-VMs mit denselben Attributen zu erstellen, können Sie eine Instanzvorlage erstellen und die Vorlage, zur Erstellung einer verwalteten Instanzgruppe (MIG) verwenden. Weitere Informationen finden Sie unter Best Practices.
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 die Google Cloud Console, die gcloud CLI oder die Compute Engine API identifizieren.
Console
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: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
Dabei gilt:
Prüfen Sie in der Ausgabe das Feld
scheduling
, um die VM zu identifizieren:Go
Java
Python
Vorzeitiges Beenden mit einem Shutdown-Skript verwalten
Wenn Compute Engine eine Spot-VM vorzeitig beendet, können Sie ein Shutdown-Script verwenden, mit dem Bereinigungsaktionen ausgeführt werden, bevor die VM vorzeitig beendet wird. Sie können z. B. einen laufenden Prozess ordnungsgemäß beenden und eine Checkpoint-Datei in Cloud Storage kopieren. Die maximale Dauer der Abschaltung ist beim vorzeitigen Beenden kürzer als bei einer vom Nutzer initiierten Abschaltung. Weitere Informationen zur Abschaltungsdauer bei vorzeitigem Beenden finden Sie in der Konzeptdokumentation für Spot-VMs unter Vorgang des vorzeitigen Beendens.
Das folgende Beispiel zeigt ein Shutdown-Skript, das Sie laufenden Spot-VMs hinzufügen oder beim Erstellen neuer Spot-VMs hinzufügen können. Dieses Script wird ausgeführt, wenn die VM mit dem Herunterfahren beginnt, bevor mit dem normalen
kill
-Befehl des Betriebssystems alle restlichen Prozesse beendet werden. Nachdem das gewünschte Programm ordnungsgemäß beendet wurde, lädt das Skript parallel eine Prüfpunktdatei in einen Cloud Storage-Bucket hoch.#!/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:
Um dieses Skript einer VM hinzuzufügen, konfigurieren Sie es so, dass es mit einer Anwendung auf der VM funktioniert, und fügen es den VM-Metadaten hinzu.
Vorzeitiges Beenden von Spot-VMs erkennen
Bestimmen Sie mit der Google Cloud Console, der gcloud CLI oder der Compute Engine API, ob Spot-VMs von Compute Engine vorzeitig beendet wurden.
Console
Im Systemaktivitätsprotokoll können Sie prüfen, ob eine VM 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-xxxxxxxx compute.instances.preempted us-central1-f/instances/example-instance-xxx 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 Befehlgcloud 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:
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-xxxxxxxx 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
Dabei gilt:
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-xxxxxxxx", "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.", ... }
Alternativ können Sie feststellen, ob eine VM innerhalb der VM selbst vorzeitig beendet wurde. Das ist nützlich, wenn Sie das Herunterfahren aufgrund einer vorzeitigen Compute Engine-Beendigung anders verarbeiten möchten als ein normales Herunterfahren in einem Shutdown-Skript. Dazu prüfen Sie einfach den Metadatenserver auf den Wert
preempted
in den Standardmetadaten der VM.Verwenden Sie beispielsweise
curl
in der VM, um den Wert fürpreempted
abzurufen:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUE
Wenn dieser Wert
TRUE
ist, wurde die VM von Compute Engine vorzeitig beendet, andernfalls lautet erFALSE
.Wenn Sie dies außerhalb eines Shutdown-Skripts verwenden möchten, können Sie
?wait_for_change=true
an die URL anhängen. Dadurch wird eine hängende HTTP-GET-Anfrage ausgeführt, 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" TRUE
Einstellungen für das vorzeitige Beenden testen
Sie können simulierte Wartungsereignisse für Ihre VMs ausführen, um eine vorzeitige Beendigung zu erzwingen. Mit diesem Feature können Sie testen, wie Spot-VMs von Ihren Anwendungen verarbeitet werden. Unter Hostwartungsereignis simulieren erfahren Sie, wie Sie Wartungsereignisse in Ihren Instanzen testen.
Anstatt ein Wartungsereignis zu simulieren, können Sie auch eine vorzeitige Beendigung der VM simulieren, indem Sie die VM-Instanz beenden. So lassen sich Kontingentlimits vermeiden.
Best Practices
Im Folgenden finden Sie einige Best Practices, mit denen Sie Spot-VMs optimal nutzen können.
Nächste Schritte
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-12-22 (UTC).
-