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 mit einem Rabatt von bis zu 91% auf den Standardpreis von Standard-VMs verfügbar. 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. Prüfen Sie deshalb, ob Ihre Arbeitslast ein vorzeitiges Beenden verwalten kann, bevor Sie Spot-VMs erstellen.
Wenn Sie Spot-VMs mit TPUs erstellen und verwalten möchten, lesen Sie stattdessen die Cloud TPU-Dokumentation für Spot-VMs.
Hinweis
- 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 Cloud de Confiance by S3NS 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 aus, der Ihrer geplanten Verwendung der Beispiele auf dieser Seite entspricht:
Console
Wenn Sie über die Cloud de Confiance Console auf Cloud de Confiance by S3NS Dienste und APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.
gcloud
-
Installieren Sie die Google Cloud CLI und melden Sie sich dann mit Ihrer föderierten Identität in der gcloud CLI an. Nach der Anmeldung initialisieren Sie die Google Cloud CLI mit dem folgenden Befehl:
gcloud init
-
- Legen Sie eine Standardregion und -zone fest.
-
Installieren Sie die Google Cloud CLI.
-
Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.
Weitere Informationen finden Sie unter Mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
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 und melden Sie sich dann mit Ihrer föderierten Identität in der gcloud CLI an.
Weitere Informationen finden Sie in der Dokumentation zur Cloud de Confiance -Authentifizierung unter Für die Verwendung von REST authentifizieren.
Spot-VM erstellen
Eine Spot-VM ist eine beliebige VM, die für die Verwendung des Spot-Bereitstellungsmodells konfiguriert ist:
- VM-Bereitstellungsmodell, das in der Cloud de Confiance Console auf Spot gesetzt ist
--provisioning-model=SPOTin der gcloud CLI"provisioningModel": "SPOT"in der Compute Engine API
Wählen Sie eine der folgenden Methoden aus, um eine Spot-VM zu erstellen. Die Auswahl richtet sich danach, wie Sie Unterbrechungen verarbeiten möchten:
- Spot-VM mit 120 Sekunden für die Verarbeitung des vorzeitigen Beendens erstellen (Vorschau)
- Spot-VM mit bis zu 30 Sekunden für die Verarbeitung des vorzeitigen Beendens erstellen (Standard)
Alternativ können Sie mehrere Spot-VMs mit denselben Attributen erstellen, indem Sie eine Instanzvorlage erstellen und die Vorlage zur Erstellung einer verwalteten Instanzgruppe (MIG) verwenden. Weitere Informationen finden Sie unter Best Practices.
Spot-VM mit 120 Sekunden für die Verarbeitung des vorzeitigen Beendens erstellen
Bevor Sie eine Spot-VM mit einer 120-sekündigen Vorankündigung für das vorzeitige Beenden erstellen, müssen Sie sicherstellen, dass Sie das vorzeitige Beenden in Ihrer Arbeitslast verarbeiten.
gcloud
Verwenden Sie zum Erstellen einer Spot-VM mit einer Vorankündigungsdauer von 120 Sekunden mit der gcloud CLI den Befehl gcloud beta compute instances create und fügen Sie das Flag --preemption-notice-duration=120s ein. 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 beta compute instances create VM_NAME \
--provisioning-model=SPOT \
--preemption-notice-duration=120s \
--instance-termination-action=TERMINATION_ACTION
Ersetzen Sie Folgendes:
VM_NAMEist der Name der neuen VM.TERMINATION_ACTION: Optional: Geben Sie an, welche Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen. Verwenden Sie beispielsweise den folgenden Befehl, um Spot-VMs mit einem angegebenen Maschinentyp und Image zu erstellen:
gcloud beta compute instances create VM_NAME \
--provisioning-model=SPOT \
--preemption-notice-duration=120s \
[--image=IMAGE | --image-family=IMAGE_FAMILY] \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--instance-termination-action=TERMINATION_ACTION
Dabei gilt:
VM_NAMEist der Name der neuen VM.IMAGE: Wählen Sie eine der folgenden Optionen aus:IMAGE: Eine bestimmte Version eines öffentlichen Images 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-10angeben, legt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in der Debian 10-Image-Familie an.
IMAGE_PROJECTist das Projekt, das das Image enthält. Wenn Sie beispielsweisedebian-10als Image-Familie festlegen, geben Siedebian-cloudals Image-Projekt an.MACHINE_TYPE: der vordefinierte oder benutzerdefinierte Maschinentyp für die neue VM.Verwenden Sie zum Abrufen einer Liste der in einer Zone verfügbaren Maschinentypen den Befehl
gcloud compute machine-types listmit dem Flag--zones.TERMINATION_ACTION: Optional: Geben Sie an, welche Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.
REST
Wenn Sie mit der Compute Engine API eine Spot-VM mit einer Vorwarnungsdauer von 120 Sekunden erstellen möchten, verwenden Sie die Betamethode instances.insert und fügen Sie das Feld "preemptionNoticeDuration": { "seconds": 120 } ein.
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/beta/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", "preemptionNoticeDuration": { "seconds": 120 }, "instanceTerminationAction": "TERMINATION_ACTION" } }
Ersetzen Sie Folgendes:
PROJECT_IDist 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-10als Image-Familie festlegen, geben Siedebian-cloudals 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-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-10"angeben, wobeidebian-cloudderIMAGE_PROJECTist, 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 Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen.
Spot-VM mit bis zu 30 Sekunden für die Verarbeitung des vorzeitigen Beendens erstellen (Standard)
Standardmäßig wird eine Spot-VM zu Beginn des 30-sekündigen Best-Effort-Zeitraums für das Herunterfahren über die vorzeitige Beendigung informiert. Sie müssen die vorzeitige Beendigung in einem Shutdown-Skript verarbeiten.
Console
Rufen Sie in der Cloud de Confiance 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.
Optional: So wählen Sie die Beendigungsaktion aus, die ausgeführt wird, wenn Compute Engine die VM vorzeitig beendet:
- Maximieren Sie den Abschnitt Erweiterte Einstellungen für das VM-Bereitstellungsmodell.
- 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.
Klicken Sie im Navigationsmenü auf Erweitert. Führen Sie im angezeigten Bereich Erweitert die folgenden Schritte aus:
- Klicken Sie im Abschnitt Benutzerdefinierte Metadaten auf Element hinzufügen.
- Geben Sie im Feld Schlüssel
shutdown-scriptfür den Metadatenschlüssel ein. - Geben Sie im Feld Wert den Inhalt eines Shutdown-Skripts ein, das die Vorabreservierung verarbeitet. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Vorzeitiges Beenden verarbeiten.
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:
Zum Erstellen von Spot-VMs müssen Sie das Flag --provisioning-model=SPOT angeben. Um die Präemption zu verarbeiten, fügen Sie das Flag --metadata shutdown-script ein, um ein Shutdown-Skript anzugeben. 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 \
--metadata shutdown-script=SHUTDOWN_SCRIPT \
--instance-termination-action=TERMINATION_ACTION
Ersetzen Sie Folgendes:
VM_NAMEist der Name der neuen VM.SHUTDOWN_SCRIPT: Ein Shutdown-Skript, das Sie wie unter Shutdown-Skripts ausführen beschrieben formatieren können. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Vorzeitiges Beenden verarbeiten.TERMINATION_ACTION: Optional: Geben Sie an, welche Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen. 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 \
--metadata shutdown-script=SHUTDOWN_SCRIPT \
[--image=IMAGE | --image-family=IMAGE_FAMILY] \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--instance-termination-action=TERMINATION_ACTION \
Dabei gilt:
VM_NAMEist der Name der neuen VM.SHUTDOWN_SCRIPT: Ein Shutdown-Skript, das die Unterbrechung verarbeitet. 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 Vorzeitiges Beenden verarbeiten.IMAGE: Wählen Sie eine der folgenden Optionen aus:IMAGE: Eine bestimmte Version eines öffentlichen Images 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-10angeben, legt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in der Debian 10-Image-Familie an.
IMAGE_PROJECTist das Projekt, das das Image enthält. Wenn Sie beispielsweisedebian-10als Image-Familie festlegen, geben Siedebian-cloudals Image-Projekt an.MACHINE_TYPE: der vordefinierte oder benutzerdefinierte Maschinentyp für die neue VM.Verwenden Sie zum Abrufen einer Liste der in einer Zone verfügbaren Maschinentypen den Befehl
gcloud compute machine-types listmit dem Flag--zones.TERMINATION_ACTION: Optional: Geben Sie an, welche Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.
Terraform
Mit einer Terraform-Ressource können Sie eine Spot-VM mit dem scheduling-Block erstellen, wie im folgenden Beispiel gezeigt.
Wenn Sie ein Shutdown-Skript zum Verarbeiten von Vorabunterbrechungen 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.
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.
Um Präemption zu verarbeiten, fügen Sie auch das Feld "metadata" ein und geben Sie ein Shutdown-Skript an.
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" }, "metadata": { "items": [ { "key": "shutdown-script", "value": "SHUTDOWN_SCRIPT" } ] } }
Ersetzen Sie Folgendes:
PROJECT_IDist 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-10als Image-Familie festlegen, geben Siedebian-cloudals 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-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-10"angeben, wobeidebian-cloudderIMAGE_PROJECTist, 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 Beendigungsaktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entwederSTOP(Standardverhalten) oderDELETE.SHUTDOWN_SCRIPT: Ein Shutdown-Skript, das die Unterbrechung verarbeitet. 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 Vorzeitiges Beenden verarbeiten.
Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen.
Go
Im folgenden Beispiel wird eine Spot-VM ohne Shutdown-Skript für die Verarbeitung von Preemption erstellt. Weitere Informationen zum Angeben eines Shutdown-Skripts für eine neue oder vorhandene VM finden Sie unter Shutdown-Skripts ausführen. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Vorzeitiges Beenden verarbeiten.
Java
Im folgenden Beispiel wird eine Spot-VM ohne Shutdown-Skript für die Verarbeitung von Preemption erstellt. Weitere Informationen zum Angeben eines Shutdown-Skripts für eine neue oder vorhandene VM finden Sie unter Shutdown-Skripts ausführen. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Vorzeitiges Beenden verarbeiten.
Python
Im folgenden Beispiel wird eine Spot-VM ohne Shutdown-Skript für die Verarbeitung von Preemption erstellt. Weitere Informationen zum Angeben eines Shutdown-Skripts für eine neue oder vorhandene VM finden Sie unter Shutdown-Skripts ausführen. Ein Beispiel für ein Shutdown-Skript finden Sie in diesem Dokument unter Vorzeitiges Beenden verarbeiten.
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 dieCloud de Confiance 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_IDist die Projekt-ID des Projekts mit der VM.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 einer Spot-VM verwalten
In den folgenden Abschnitten erfahren Sie, wie Sie das vorzeitige Beenden einer Spot-VM 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 durchzuführen, bevor die VM heruntergefahren wird. Das Vorbereiten auf das Unterbrechen kann das ordnungsgemäße Beenden eines laufenden Prozesses und das Übertragen des Status Ihrer Arbeitslast umfassen.
Sie haben folgende Möglichkeiten, um auf das Vorbelegen einer Spot-VM zu reagieren:
- Unterbrechungen in Ihrer Arbeitslast verarbeiten Wir empfehlen diese Methode für Spot-VMs mit einer Vorlaufzeit von 120 Sekunden für die Vorabbenachrichtigung (Vorschau). 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 zur Verarbeitung von Preemption wird dann während der Benachrichtigungsdauer für Preemption 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 verarbeiten 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 Unterbrechungen in einem Shutdown-Script, wie im folgenden Beispiel gezeigt. Das Shutdown-Skript wird während der Shutdown-Phase (Best-Effort) für bis zu 30 Sekunden automatisch 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. Weitere Informationen finden Sie unter Vorzeitige Beendigung in einer VM erkennen.
Im folgenden Beispiel wird gezeigt, wie Sie die Vorabentnahme behandeln, indem Sie eine Prüfpunktdatei in einem Shutdown-Skript in einen Cloud Storage-Bucket hochladen. Außerdem wird gezeigt, wie Sie ein Shutdown-Skript beim Erstellen oder Aktualisieren einer Spot-VM hinzufügen. Dieses Skript wird ausgeführt, wenn die VM mit dem Herunterfahren beginnt, bevor mit dem normalen kill-Befehl des Betriebssystems alle restlichen Prozesse beendet werden. Nachdem ein angegebenes 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:
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.
Um dieses Skript einer VM hinzuzufügen, konfigurieren Sie es so, dass es mit der Arbeitslast auf der VM funktioniert, und fügen es den VM-Metadaten hinzu.
Kopieren Sie das Shutdown-Skript oder laden Sie es herunter:
Kopieren Sie das vorherige Shutdown-Skript und ersetzen Sie darin Folgendes:
PROGRAM_NAMEist der Name des Prozesses oder Programms, das Sie herunterfahren möchten. Beispiel:apache2odernginxLOCAL_USERist der Nutzername, mit dem Sie in der virtuellen Maschine angemeldet sind.BUCKET_NAMEist 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:apache2odernginx[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.
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 (Vorschau).
- Vorgänge zum vorzeitigen Beenden 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 innerhalb der VM selbst unterbrochen wird, prüfen Sie den Metadatenserver auf den Wert preempted in den Standardmetadaten der VM. Verwenden Sie beispielsweise die folgenden Methoden:
Prüfen Sie den aktuellen Wert von
preempted. Sie können den folgendencurl-Befehl in Ihrer 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 zu prüfen, ob das Herunterfahren durch Preemption verursacht wurde.Warten Sie, bis
preemptedden WertTRUEhat. Wenn Sie warten möchten, bispreemptedden WertTRUEhat, können Sie der URL des vorherigen Befehls?wait_for_change=trueanhängen. Mit diesem Befehl 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" TRUEDieser Befehl ist nützlich, wenn Sie die Verarbeitung vorzeitiger Beendigungen außerhalb eines Shutdown-Skripts auslösen möchten. Mit dieser Methode können Sie beispielsweise die Vorabbenachrichtigung für Spot-VMs mit einer Vorabbenachrichtigungsdauer von 120 Sekunden (Vorschau) auslösen.
Vorwegnahmevorgänge ansehen
Sie können Unterbrechungsvorgänge von Compute Engine über dieCloud de Confiance 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 Cloud de Confiance 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 Cloud de Confiance 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-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 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-xxxxxxxx.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-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
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-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.",
...
}
Einstellungen für vorzeitiges Beenden testen
Sie können simulierte Wartungsereignisse für Ihre Spot-VMs ausführen, um ihre präemptive Beendigung zu erzwingen. Mit diesem Feature können Sie testen, wie Ihre Arbeitslasten das Vorziehen erkennen und verarbeiten. 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.
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. Cloud de Confiance by S3NS 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 zur 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 Auslastung der Cloud de Confiance by S3NS -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.
Arbeitslasten 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 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.
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.
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)