Spot-VMs erstellen und verwenden


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 60 bis 91 % verfügbar. Compute Engine kann jedoch die Ressourcen zurückgewinnen, indem Sie Spot-VMs jederzeit vorzeitig beenden. 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 Dokumentation zu Spot-VMs:
  • 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 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

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Legen Sie eine Standardregion und -zone fest.

    Terraform

    Wenn Sie die Terraform-Beispiele auf dieser Seite aus einer lokalen Entwicklungsumgebung heraus verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Installieren Sie die Google Cloud CLI.
    2. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

      gcloud init
    3. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

      gcloud auth application-default login

    Weitere Informationen: Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init

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:

  • 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 API

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Gehen Sie anschließend so vor:

    1. 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.
    2. 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.
  3. Optional: Geben Sie andere VM-Optionen an. Weitere Informationen finden Sie unter VM-Instanz erstellen und starten.

  4. 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. 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:

  • 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, entweder STOP (Standardverhalten) oder DELETE.

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:

  • 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 beispielsweise debian-10 als Image-Familie festlegen, geben Sie debian-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, entweder STOP (Standardverhalten) oder DELETE.

    Verwenden Sie zum Abrufen einer Liste der in einer Zone verfügbaren Maschinentypen den Befehl gcloud compute machine-types list mit dem Flag --zones.

Terraform

Mit einer Terraform-Ressource können Sie eine Spot-Instanz mit dem Planungsblock erstellen.


resource "google_compute_instance" "spot_vm_instance" {
  name         = "spot-instance-name"
  machine_type = "f1-micro"
  zone         = "us-central1-c"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  scheduling {
    preemptible                 = true
    automatic_restart           = false
    provisioning_model          = "SPOT"
    instance_termination_action = "STOP"
  }

  network_interface {
    # A default network is created for all GCP projects
    network = "default"
    access_config {
    }
  }
}

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:

  • 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 beispielsweise debian-10 als Image-Familie festlegen, geben Sie debian-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", wobei debian-cloud das IMAGE_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, wobei debian-cloud der IMAGE_PROJECT ist, erstellt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in Debian. 10-Image-Familie.
  • TERMINATION_ACTION: Optional: Geben Sie an, welche Aktion ausgeführt werden soll, wenn Compute Engine die VM vorzeitig beendet, entweder STOP (Standardverhalten) oder DELETE.

Weitere Informationen zu den Optionen, die Sie beim Erstellen einer VM angeben können, finden Sie unter VM-Instanz erstellen und starten.

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

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf den Namen der VM, die Sie ändern möchten. Die Seite VM-Instanzdetails wird geöffnet.

  3. 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.

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 provisioningModel enthält, das auf SPOT 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 Feld instanceTerminationAction fehlt, ist der Standardwert STOP.

  • Wenn dagegen die Ausgabe das Feld provisioningModel enthält, das auf standard gesetzt ist, oder wenn das Feld provisioningModel nicht in der Ausgabe angegeben ist:

    • Wenn die Ausgabe das Feld preemptible enthält, das auf true gesetzt ist, ist die VM eine VM auf Abruf.
    • Andernfalls ist die VM eine Standard-VM.

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:

  • 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.

Prüfen Sie in der Ausgabe das Feld scheduling, um die VM zu identifizieren:

  • Wenn die Ausgabe das Feld provisioningModel enthält, das auf SPOT 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 Feld instanceTerminationAction fehlt, ist der Standardwert STOP.

  • Wenn dagegen die Ausgabe das Feld provisioningModel enthält, das auf standard gesetzt ist, oder wenn das Feld provisioningModel nicht in der Ausgabe angegeben ist:

    • Wenn die Ausgabe das Feld preemptible enthält, das auf true gesetzt ist, ist die VM eine VM auf Abruf.
    • Andernfalls ist die VM eine Standard-VM.

Vorzeitiges Beenden mit einem Shutdown-Skript verwalten

Wenn Ihre Spot-VMs von Compute Engine vorzeitig beendet werden, können Sie ein Shutdown-Skript verwenden, um Bereinigungsaktionen durchzuführen, bevor jede VM vorzeitig beendet wird. Sie können z. B. einen laufenden Prozess ordnungsgemäß beenden und eine Checkpoint-Datei in Cloud Storage kopieren.

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 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 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"
GSUTIL_OPTS="-m -o GSUtil:parallel_composite_upload_threshold=32M"
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 "gsutil $GSUTIL_OPTS 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 einer Anwendung auf der VM funktioniert, und fügen es den VM-Metadaten hinzu.

  1. 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 oder nginx
      • 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 mit gs://.
    • 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 oder nginx
      • [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 mit gs://.
  2. Fügen Sie das Shutdown-Skript einer neuen VM oder einer vorhandenen VM hinzu.

Vorzeitiges Beenden von Spot-VMs erkennen

Bestimmen Sie mit der Google Cloud Console, der gcloud CLI oder der Compute Engine, ob Spot-VMs von Compute Engine vorzeitig beendet wurden.

Console

Im Systemaktivitätsprotokoll können Sie prüfen, ob eine VM vorzeitig beendet wurde.

  1. Öffnen Sie in der Google Cloud Console die Seite Logs.

    Zu den Logs

  2. Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.

  3. Fügen Sie compute.instances.preempted zum Feld Nach Label oder Textsuche filtern hinzu.

  4. 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.

  5. 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.

  6. 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 Befehls gcloud 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

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ür preempted 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 er FALSE.

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.

  • 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 Maschinentyp n2-custom-24-96 wahrscheinlicher, aber die Kapazität für den vordefinierten Maschinentyp n2-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.

Nächste Schritte