Auf dieser Seite wird gezeigt, wie Sie mit Spot-VMs in GKE-Clustern (Google Kubernetes Engine) und Knotenpools fehlertolerante, zustandslose oder Batcharbeitslasten zu geringeren Kosten ausführen.
Übersicht
Spot-VMs sind Compute Engine-VMs, die günstiger als Standard-VMs sind und keine Verfügbarkeit garantieren. Spot-VMs bieten die gleichen Maschinentypen und Optionen wie Standard-Compute Engine-VMs. Compute Engine kann Spot-VMs jederzeit aufgrund von Systemereignissen zurücknehmen, z. B. wenn die Ressourcen für Standard-VMs benötigt werden.
Weitere Informationen zu Spot-VMs in GKE finden Sie unter Spot-VMs.
Dank Spot-VMs müssen Sie nicht mehr VMs auf Abruf verwenden, um zustandslose, Batch- oder fehlertolerante Arbeitslasten auszuführen. Im Gegensatz zu VMs auf Abruf, die nach 24 Stunden ablaufen, haben Spot-VMs keine Ablaufzeit. Spot-VMs werden beendet, wenn Compute Engine die Ressourcen zum Ausführen von Standard-VMs benötigt.
Spot-VMs werden auch in GKE Autopilot-Clustern über Spot-Pods unterstützt. Mit Spot-Pods plant und verwaltet Autopilot die Arbeitslasten automatisch auf Spot-VMs.
Beschränkungen
- Spot-VMs unterstützen keine Windows Server-Knotenpools.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten,
installieren und dann
initialisieren Sie die
gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste
Version mit dem
gcloud components updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
Spot-VMs in GKE bereitstellen
Sie können Spot-VMs bereitstellen, indem Sie einen Cluster erstellen, der Spot-VMs für den Standardknotenpool verwendet. Alternativ können Sie einen Knotenpool erstellen, der Spot-VMs verwendet.
Verwenden Sie die gcloud CLI, um die Parameter für das ordnungsgemäße Herunterfahren von Spot-VMs festzulegen. Weitere Informationen zum Festlegen der Parameter für das ordnungsgemäße Herunterfahren, einer Funktion, die in der Vorschauverfügbar ist, finden Sie unter Beendigung und ordnungsgemäßes Herunterfahren von Spot-VMs.
Cluster mit Spot-VMs erstellen
Sie können einen neuen Cluster über Spot-VMs, die Google Cloud CLI oder die Google Cloud console erstellen.
gcloud
Erstellen Sie einen neuen Cluster, der Spot-VMs im Standardknotenpool anstelle von Standard-VMs verwendet:
gcloud container clusters create CLUSTER_NAME \
--spot
[--system-config-from-file=SYSTEM_CONFIG_PATH]
Ersetzen Sie CLUSTER_NAME durch den Namen des neuen Clusters.
Wenn Sie optional die Parameter für das ordnungsgemäße Herunterfahren
(Vorschau) für den
Standardknotenpool festlegen möchten, ersetzen Sie SYSTEM_CONFIG_PATH durch
den Pfad zur Datei mit Ihrer kubelet Konfiguration. Weitere Informationen finden Sie unter Ordnungsgemäßes Beenden von Spot-VMs in
GKE.
Sie können diese Parameter auch nach dem Erstellen des Knotenpools aktualisieren.
GKE muss die Knoten
neu erstellen,
damit die Änderungen übernommen werden.
Console
Führen Sie folgende Schritte aus, um einen neuen Cluster mit einem Knotenpool über Spot-VMs zu erstellen:
Rufen Sie in der Google Cloud console die Seite Kubernetes-Cluster erstellen auf.
Klicken Sie im Navigationsmenü im Abschnitt Knotenpools auf den Namen des zu konfigurierenden Knotenpools und dann auf Knoten.
Markieren Sie das Kästchen Spot-VMs aktivieren.
Konfigurieren Sie den Cluster nach Bedarf und klicken Sie dann auf Erstellen.
Knotenpools mit Spot-VMs erstellen
Sie können neue Knotenpools mit Spot-VMs und der gcloud CLI oder Google Cloud console erstellen. Sie können Spot-VMs nur in neuen Knotenpools aktivieren. Sie können Spot-VMs in vorhandenen Knotenpools nicht aktivieren oder deaktivieren.
gcloud
Erstellen Sie einen neuen Knotenpool mit Spot-VMs:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--spot
[--system-config-from-file=SYSTEM_CONFIG_PATH]
Ersetzen Sie POOL_NAME durch den Namen des neuen Knotenpools.
Wenn Sie optional die Parameter für das ordnungsgemäße Herunterfahren
(Vorschau) festlegen möchten, ersetzen Sie
SYSTEM_CONFIG_PATH durch den Pfad zur Datei
mit Ihrer kubelet Konfiguration. Weitere Informationen finden Sie unter Ordnungsgemäßes
Beenden von Spot-VMs in
GKE.
Sie können diese Parameter auch nach dem Erstellen des Knotenpools aktualisieren.
GKE muss die Knoten
neu erstellen,
damit die Änderungen übernommen werden.
Console
Führen Sie folgende Schritte aus, um einen neuen Knotenpool über Spot-VMs zu erstellen:
Öffnen Sie in der Google Cloud console die Seite Google Kubernetes Engine.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf den Tab Knoten.
Klicken Sie auf Vom Nutzer verwalteten Knotenpool erstellen.
Klicken Sie im Navigationsmenü auf Knoten.
Markieren Sie das Kästchen Spot-VMs aktivieren.
Konfigurieren Sie den Knotenpool nach Bedarf und klicken Sie dann auf Erstellen.
Arbeitslasten auf Spot-VMs planen
GKE fügt Knoten die Labels cloud.google.com/gke-spot=true und cloud.google.com/gke-provisioning=spot (für Knoten mit GKE-Version 1.25.5-gke.2500 oder höher) hinzu, die Spot-VMs verwenden Sie können nach diesem Label in Ihrer Pod-Spezifikation filtern. Verwenden Sie dazu das Feld nodeSelector in Ihrer Pod-Spezifikation oder die Knotenaffinität.
Im folgenden Beispiel erstellen Sie einen Cluster mit zwei Knotenpools, von denen einer Spot-VMs verwendet. Anschließend stellen Sie eine zustandslose nginx-Anwendung auf den Spot-VMs bereit. Verwenden Sie dazu einen nodeSelector, um zu steuern, wo GKE die Pods platziert.
Erstellen Sie einen neuen Cluster mit dem Standardknotenpool über Standard-VMs:
gcloud container clusters create CLUSTER_NAMEErsetzen Sie dabei
CLUSTER_NAMEdurch den Namen des neuen Clusters.Rufen Sie Anmeldedaten für den Cluster ab:
gcloud container clusters get-credentials CLUSTER_NAMEErstellen Sie einen Knotenpool mit Spot-VMs:
gcloud container node-pools create POOL_NAME \ --num-nodes=1 \ --spotErsetzen Sie
POOL_NAMEdurch den Namen des neuen Knotenpools.Speichern Sie dieses YAML-Manifest als Datei mit dem Namen
pi-app.yaml:apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: metadata: labels: app: pi spec: nodeSelector: cloud.google.com/gke-spot: "true" terminationGracePeriodSeconds: 25 containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never backoffLimit: 4In diesem Manifest wird GKE vom Feld
nodeSelectorangewiesen, Pods nur auf Knoten zu planen, die Spot-VMs verwenden.Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f pi-app.yamlBeschreiben Sie den Pod:
kubectl describe pod piDie Ausgabe sieht etwa so aus:
Name: pi-kjbr9 Namespace: default Priority: 0 Node: gke-cluster-2-spot-pool-fb434072-44ct ... Labels: app=pi job-name=pi Status: Succeeded ... Controlled By: Job/pi Containers: ... Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: ... Node-Selectors: cloud.google.com/gke-spot=true Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m3s default-scheduler Successfully assigned default/pi-kjbr9 to gke-cluster-2-spot-pool-fb434072-44ct Normal Pulling 4m2s kubelet Pulling image "perl:5.34.0" Normal Pulled 3m43s kubelet Successfully pulled image "perl:5.34.0" in 18.481761978s Normal Created 3m43s kubelet Created container pi Normal Started 3m43s kubelet Started container piDas Feld
Nodezeigt, dass GKE Ihre Pods nur auf Knoten plant, die Spot-VMs verwenden.
Markierungen und Toleranzen für Spot-VMs verwenden
Erstellen Sie als Best Practice Cluster mit mindestens einem Knotenpool ohne Spot-VMs, an einem Speicherort, an denen Sie Systemarbeitslasten wie DNS platzieren können. Sie können Knotenmarkierungen und die entsprechenden Toleranzen verwenden, um GKE anzuweisen, bestimmte Arbeitslasten nicht auf Spot-VMs zu platzieren.
Verwenden Sie zum Erstellen eines Knotenpools mit Knoten, die Spot-VMs verwenden und Knotenmarkierungen haben, beim Erstellen des Knotenpools das
--node-taints-Flag:gcloud container node-pools create POOL_NAME \ --node-taints=cloud.google.com/gke-spot="true":NoSchedule --spotÄndern Sie die Bereitstellungen und fügen Sie der Pod-Spezifikation Folgendes hinzu, um den Pods, die Sie für Spot-VMs vorsehen möchten, die entsprechende Toleranz hinzuzufügen:
tolerations: - key: cloud.google.com/gke-spot operator: Equal value: "true" effect: NoScheduleGKE ordnet nur Pods mit dieser Toleranz den Spot-VMs mit der hinzugefügten Knotenmarkierung zu.
Nächste Schritte
- Informationen zum Ausführen einer GKE-Anwendung auf Spot-VMs mit On-Demand-Knoten als Fallback.
- Spot-VMs in GKE
- Anleitung zum Bereitstellen einer Batch-Arbeitslast mit Spot-VMs in GKE