Auf dieser Seite wird beschrieben, wie eine VM-Instanz auf Abruf erstellt und verwendet wird. VMs auf Abruf sind im Vergleich zum Standardpreis von Standard-VMs mit einem Rabatt von bis zu 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 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 Google Cloud Console auf Google Cloud Dienste und APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.
gcloud
-
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud initWenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
- Legen Sie eine Standardregion und -zone fest.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
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 Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
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 Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
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 Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
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 Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
REST
Wenn Sie die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, verwenden Sie die Anmeldedaten, die Sie der gcloud CLI bereitstellen.
Installieren Sie die Google Cloud CLI.
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.
VM auf Abruf erstellen
Erstellen Sie mithilfe der gcloud-Kommandozeile oder der Compute Engine API eine VM auf Abruf. Wenn Sie dieGoogle Cloud -Konsole verwenden möchten, erstellen Sie stattdessen eine Spot-VM.
gcloud
Verwenden Sie bei gcloud compute denselben instances 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 unter scheduling an und setzen Sie es auf true. 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 auf Abruf verfügbare CPU-Kontingent ist nicht auf den Kontingentseiten der gcloud CLI oder derGoogle Cloud -Konsole 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.
- 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: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://.
- Speichern Sie die Änderungen.
- Fügen Sie das Shutdown-Skript einer neuen VM oder einer vorhandenen VM hinzu.
Das Skript setzt Folgendes aus:
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.
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 derGoogle Cloud console, der gcloud CLI 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.
Rufen Sie in der Google Cloud Console die Seite Logs auf.
Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.
Fügen Sie
compute.instances.preemptedzum Feld Nach Label oder Textsuche filtern hinzu.Optional können Sie auch einen VM-Namen eingeben, wenn Sie Vorgänge der vorzeitigen Beendigung für eine bestimmte VM prüfen möchten.
Drücken Sie die Eingabetaste, um die angegebenen Filter anzuwenden. Die Google Cloud Console aktualisiert die Liste der Logs so, dass nur die Vorgänge angezeigt werden, bei denen eine VM vorzeitig beendet wurde.
Wählen Sie einen Vorgang aus der Liste aus, um Details zur VM zu sehen, die vorzeitig beendet wurde.
gcloud
Verwenden Sie den Befehl gcloud compute operations list mit einem Filterparameter, um eine Liste vorzeitig beendeter Ereignisse in Ihrem Projekt zu erhalten.
gcloud compute operations list \
--filter="operationType=compute.instances.preempted"
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 Befehl operations 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 eine GET-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 einen targetLink-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ü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 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. Google CloudDie 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 Maschinentyp n2-custom-24-96 wahrscheinlicher, aber die Kapazität für den vordefinierten Maschinentyp n2-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
- Dokumentation zu VM-Instanzen auf Abruf lesen
- Mehr über Shutdown-Skripts erfahren
- Mit VM verbinden.