Auf dieser Seite wird beschrieben, wie eine VM-Instanz auf Abruf erstellt und verwendet wird. VMs auf Abruf sind im Vergleich zum Preis von Standard-VMs mit einem Rabatt von bis zu 60 bis 91 % verfügbar. Compute Engine kann diese VMs jedoch (vorzeitig) beenden, wenn diese Ressourcen für andere Aufgaben zurückgefordert werden müssen. VMs auf Abruf werden immer nach 24 Stunden beendet. VMs auf Abruf werden nur für fehlertolerante Anwendungen empfohlen, die einem vorzeitigen Beenden von VMs standhalten. Stellen Sie sicher, dass Ihre Anwendung einem vorzeitigen Beenden standhalten kann, bevor Sie eine VM auf Abruf erstellen. In der Dokumentation zu VM-Instanzen auf Abruf werden die Risiken und Vorteile von VMs auf Abruf beschrieben.
Hinweise
- Lesen Sie die Dokumentation zu VM-Instanzen auf Abruf.
-
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.
- 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.
- 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.
- 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.
- Kopieren oder laden Sie das Shutdown-Skript auf die lokale Workstation herunter.
- Öffnen Sie die Datei zur Bearbeitung und ändern Sie 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://
.
- Speichern Sie die Änderungen.
- Fügen Sie das Shutdown-Skript einer neuen VM oder einer vorhandenen VM hinzu.
Die VM wurde mindestens mit Lese-/Schreibzugriff auf Cloud Storage erstellt. Anleitungen zum Erstellen einer VM mit den entsprechenden Bereichen finden Sie unter Authentifizierungsdokumentation.
Sie haben einen Cloud Storage-Bucket und die Berechtigung zum Schreiben in diesen Bucket.
Ö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.
- Dokumentation zu VM-Instanzen auf Abruf lesen
- Mehr über Shutdown-Skripts erfahren
- Mit VM verbinden.
Go
Wenn Sie die Go 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.
Java
Wenn Sie die Java 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.
Node.js
Wenn Sie die Node.js 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.
Python
Wenn Sie die Python 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.
VM auf Abruf erstellen
Erstellen Sie mithilfe der gcloud-Kommandozeile oder der Compute Engine API eine VM auf Abruf. Wenn Sie die Google Cloud Console verwenden möchten, erstellen Sie stattdessen eine Spot-VM.
gcloud
Verwenden Sie bei
gcloud compute
denselbeninstances create
-Befehl, mit dem Sie eine normale VM erstellen würden, aber fügen Sie das Flag--preemptible
hinzu:gcloud compute instances create [VM_NAME] --preemptible
Dabei ist
[VM_NAME]
der Name der VM.Go
Java
Node.js
Python
REST
Richten Sie in der API eine Standardanfrage ein, um eine VM zu erstellen. Geben Sie dabei jedoch das Attribut
preemptible
unterscheduling
an und setzen Sie es auftrue
. Beispiele:POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances { 'machineType': 'zones/[ZONE]/machineTypes/[MACHINE_TYPE]', 'name': '[INSTANCE_NAME]', 'scheduling': { 'preemptible': true }, ... }
Präemptive CPU-Kontingente
VMs auf Abruf erfordern verfügbare CPU-Kontingente wie Standard-VMs. Um zu vermeiden, dass VMs auf Abruf die CPU-Kontingente für Ihre Standard-VMs verbrauchen, können Sie ein besonderes Kontingent "CPU auf Abruf" anfordern. Nachdem Compute Engine ein Kontingent für CPUs auf Abruf in dieser Region zugeteilt hat, werden alle VMs auf Abruf auf dieses Kontingent angerechnet und alle Standard-VMs werden weiter auf das Standard-CPU-Kontingent angerechnet.
In Regionen, in denen kein Kontingent für VMs auf Abruf vorhanden ist, können Sie das reguläre VM-Kontingent verwenden, um Instanzen auf Abruf zu starten. Außerdem benötigen Sie wie üblich ein ausreichendes IP-Adressen- und Laufwerkskontingent. Das präemptive CPU-Kontingent ist nicht auf den Kontingentseiten der gcloud CLI oder der Google Cloud Platform Console sichtbar, es sei denn, Compute Engine hat das Kontingent zugeteilt.
Weitere Informationen zu Kontingenten finden Sie auf der Seite "Ressourcenkontingente".
Vorzeitig beendete VM starten
Wie bei jeder anderen VM können Sie, wenn eine VM auf Abruf beendet oder vorzeitig beendet wird, die VM wieder starten und in den Status
RUNNING
zurücksetzen. Wenn Sie eine VM auf Abruf starten, wird die 24-Stunden-Frist zurückgesetzt. Da sie jedoch weiterhin eine VM auf Abruf ist, kann sie von Compute Engine vor Ablauf der 24 Stunden vorzeitig beendet werden. Eine VM auf Abruf kann während der Ausführung nicht in eine Standard-VM umgewandelt werden.Wenn von Compute Engine eine VM auf Abruf in einem Cluster einer verwalteten Instanzgruppe mit Autoscaling oder in einem Google Kubernetes Engine-Cluster (GKE) beendet wird, startet die Gruppe die VM neu, sobald die Ressourcen wieder verfügbar sind.
Vorzeitiges Beenden mit einem Shutdown-Skript verwalten
Wenn Compute Engine eine 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 unter Vorgang des vorzeitigen Beendens.
Im Folgenden wird ein Shutdown-Script dargestellt, das Sie einer gerade ausgeführten VM auf Abruf oder einer neuen Instanz auf Abruf bei ihrer Erstellung 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_USERNAME]" 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."
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.
Das Skript setzt Folgendes aus:
VMs auf Abruf identifizieren
Führen Sie die Schritte unter Bereitstellungsmodell und Beendigungsaktion einer VM identifizieren aus, um zu prüfen, ob eine VM auf Abruf ist.
Prüfen, ob eine VM vorzeitig beendet wurde
Bestimmen Sie mit der Google Cloud Console, der gcloud-Befehlszeile oder der API, ob eine VM vorzeitig beendet wurde.
Console
In den Systemaktivitätslogs können Sie prüfen, ob eine VM vorzeitig beendet wurde.
gcloud
Verwenden Sie den Befehlgcloud 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"
Mit dem Filterparameter können Sie die Ergebnisse weiter eingrenzen. So können Sie beispielsweise Präemptionsereignisse nur für Instanzen innerhalb einer verwalteten VM-Gruppe anzeigen lassen:
gcloud compute operations list \ --filter="operationType=compute.instances.preempted AND targetLink:instances/[BASE_VM_NAME]"
gcloud
gibt in etwa folgende Antwort zurück:NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-xxxxxxxx compute.instances.preempted us-central1-f/instances/example-vm-xxx 200 DONE 2015-04-02T12:12:10.881-07:00
Der Vorgangstyp
compute.instances.preempted
gibt an, dass die VM vorzeitig beendet wurde. Mit dem Befehloperations describe
erhalten Sie weitere Informationen zu einem bestimmten Vorgang zur vorzeitigen Beendigung.gcloud compute operations describe \ systemevent-xxxxxxxx
gcloud
gibt in etwa folgende Antwort zurück:... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/operations/systemevent-xxxxxxxx startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
Senden Sie eineGET
-Anfrage an den URI der Zonenvorgänge, um eine Liste der letzten Systemvorgänge abzurufen.GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations
Die Antwort enthält eine Liste der letzten Vorgänge.
{ "kind": "compute#operation", "id": "15041793718812375371", "name": "systemevent-xxxxxxxx", "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f", "operationType": "compute.instances.preempted", "targetLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-vm", "targetId": "12820389800990687210", "status": "DONE", "statusMessage": "Instance was preempted.", ... }
Wenn Sie die Antworten 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"
. Zum Anzeigen von Vorgängen zur vorzeitigen Beendigung für eine bestimmte VM fügen Sie dem Filter einentargetLink
-Parameter hinzu:operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[VM_NAME]"
.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 vorzeitiges Beenden testen
Sie können simulierte Wartungsereignisse für Ihre VMs ausführen, um ihre präemptive Beendigung zu erzwingen. Mit diesem Feature können Sie testen, wie Anwendungen VMs auf Abruf handhaben. Lesen Sie unter Verfügbarkeitsrichtlinien testen, wie Sie Wartungsereignisse in Ihren VMs testen können.
Anstatt eines simulierten Wartungsereignisses können Sie auch das vorzeitige Beenden einer VM simulieren. Hierzu müssen Sie die VM beenden. So werden Kontingentlimits vermieden.
Best Practices
Hier sind einige Best Practices, mit denen Sie präemptive VM-Instanzen optimal nutzen können.
Bulk Instance API verwenden
Statt einzelne VMs zu erstellen, können Sie die Bulk Instance API verwenden.
Kleinere Maschinenformen wählen
Ressourcen für VMs auf Abruf stammen aus überschüssiger Kapazität und Sicherungskapazität von Google Cloud. Die Kapazität ist für kleinere Maschinentypen oft einfacher. Das heißt, 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 VMs auf Abruf. 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.Große VM-Cluster auf Abruf außerhalb der Spitzenzeiten ausführen
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 auf Abruf.
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 es bei einer Zone z. B. zu einem Teilausfall kommt, muss unter Umständen eine große Anzahl von VMs auf Abruf vorzeitig beendet werden, um Platz für reguläre 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. Sie können das Verhalten der Anwendung bei einem vorzeitige Beendigungsereignis testen, indem Sie die VM-Instanz beenden.
Erstellen von VMs wiederholen, die vorzeitig beendet wurden
Wenn eine VM-Instanz vorzeitig beendet wurde, versuchen Sie ein oder zweimal, neue VMs auf Abruf zu erstellen, bevor Sie auf Standard-VMs zurückgreifen. Je nach Anforderungen könnten reguläre und VMs auf Abruf auch in Clustern kombiniert werden, um eine Fortsetzung der Arbeit mit einer angemessenen Geschwindigkeit sicherzustellen.
Shutdown-Skripts verwenden
Verwalten Sie Shutdown- und Präemptionshinweise 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 ganz neu erstellt werden.
Weitere Informationen
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).
-