Auf dieser Seite erfahren Sie, wie Sie fehlertolerante Arbeitslasten zu geringeren Kosten ausführen können, indem Sie Spot Pods in Ihren Google Kubernetes Engine (GKE) Autopilot-Clustern verwenden.
Übersicht
In GKE Autopilot-Clustern sind Spot-Pods Pods, die auf Knoten ausgeführt werden, die von Compute Engine Spot-VMs unterstützt werden. Spot-Pods sind preislich günstiger als Standard-Autopilot-Pods, können aber von GKE entfernt werden, wenn Rechenressourcen benötigt werden, um Standard-Pods auszuführen.
Spot-Pods sind ideal für die Ausführung zustandsloser, Batch- oder fehlertoleranter Arbeitslasten zu geringeren Kosten im Vergleich zu einer Ausführung dieser Arbeitslasten auf Standard-Pods. Wenn Sie Spot-Pods in Autopilot-Clustern verwenden möchten, ändern Sie das Manifest mit Ihrer Pod-Spezifikation, um Spot-Pods anzufordern.
Sie können Spot-Pods mit der Standard-Compute-Klasse für Autopilot sowie mit speziellen Compute-Klassen ausführen, die bestimmte Hardwareanforderungen erfüllen. Informationen zu diesen Compute-Klassen finden Sie unter Compute-Klassen in Autopilot.
Weitere Informationen zu den Preisen für Spot-Pods in Autopilot-Clustern finden Sie unter Preise für Google Kubernetes Engine.
Spot-Pods sind vom Autopilot-Service Level Agreement ausgeschlossen.
Vorteile
Die Verwendung von Spot-Pods in Ihren Autopilot-Clustern bietet folgende Vorteile:
- Niedrigere Preise als die Ausführung derselben Arbeitslasten auf standardmäßigen Autopilot-Pods.
- GKE verwaltet automatisch Autoscaling und Planung.
- GKE markiert Knoten automatisch, die Spot-Pods ausführen, damit Standard-Pods wie Ihre kritischen Arbeitslasten nicht auf diesen Knoten geplant werden. Ihre Bereitstellungen, die Spot-Pods verwenden, werden automatisch mit einer entsprechenden Toleranz aktualisiert.
Hinweise
Führen Sie die folgenden Schritte durch, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
Spot-Pods in Ihren Autopilot-Arbeitslasten anfordern
Wenn Sie anfordern möchten, dass Ihre Pods als Spot-Pods ausgeführt werden, verwenden Sie das Label cloud.google.com/gke-spot=true
in einem nodeSelector oder Knotenaffinität in der Pod-Spezifikation. GKE stellt automatisch Knoten bereit, die Spot-Pods ausführen können.
Spot-Pods können jederzeit entfernt und beendet werden, z. B. wenn die Rechenressourcen an anderer Stelle in Google Cloud erforderlich sind. Wenn eine Beendigung auftritt, können Spot-Pods auf dem beendenden Knoten einen Kulanzzeitraums von bis zu 15 Sekunden vor der Beendigung anfordern. Dies wird auf Best-Effort-Basis durch Festlegen des Feldes terminationGracePeriodSeconds
gewährt.
Der maximale Kulanzzeitraum für Spot-Pods während des vorzeitigen Beendens beträgt 15 Sekunden. Wenn Sie in terminationGracePeriodSeconds
mehr als 15 Sekunden anfordern, werden während des vorzeitigen Beendens nicht mehr als 15 Sekunden gewährt. Bei der Bereinigung wird Ihrem Pod das SIGTERM-Signal gesendet, was die Schritte zum Herunterfahren während des Kulanzzeitraums einleitet.
Für Autopilot markiert GKE auch automatisch die Knoten, die zum Ausführen von Spot-Pods erstellt wurden, und ändert diese Arbeitslasten mit der entsprechenden Toleranz. Die Markierung verhindert, dass Standard-Pods auf Knoten geplant werden, die Spot-Pods ausführen.
Mit nodeSelector die Spot-Pods erforderlich machen
Sie können einen nodeSelector verwenden, um Spot-Pods in einem Deployment erforderlich zu machen. Fügen Sie dem Deployment das Label cloud.google.com/gke-spot=true
hinzu, wie im folgenden Beispiel gezeigt:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
labels:
app: pi
spec:
nodeSelector:
cloud.google.com/gke-spot: "true"
terminationGracePeriodSeconds: 15
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Mit Knotenaffinität die Spot-Pods anfordern
Alternativ können Sie Spot-Pods mit Knotenaffinität anfordern. Die Knotenaffinität bietet Ihnen eine umfangreichere Möglichkeit, Knoten zum Ausführen Ihrer Arbeitslasten auszuwählen. Sie können beispielsweise mehrere Auswahlkriterien kombinieren, um eine genauere Kontrolle darüber zu erhalten, wo Ihre Pods ausgeführt werden. Wenn Sie Spot-Pods zur Knotenaffinität verwenden, können Sie die Art der zu verwendenden Knotenaffinität so angeben:
requiredDuringSchedulingIgnoredDuringExecution
: Spot-Pods müssen verwendet werden.preferredDuringSchedulingIgnoredDuringExecution
: Spot-Pods auf Best-Effort-Basis verwenden.
Wenn Sie Spot-Pods in einem Deployment anfordern möchten, fügen Sie Ihrem Deployment-Manifest die folgende nodeAffinity
-Regel hinzu:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
labels:
app: pi
spec:
terminationGracePeriodSeconds: 15
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-spot
operator: In
values:
- "true"
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Spot-Pods auf Best-Effort-Basis anfordern
Verwenden Sie preferredDuringSchedulingIgnoredDuringExecution
, um Spot-Pods auf Best-Effort-Basis anzufordern.
Wenn Sie Spot-Pods auf bevorzugte Weise anfordern, plant GKE Ihre Pods in folgender Reihenfolge:
- Vorhandene Knoten, die Spot-Pods ausführen können, die eine zuweisbare Kapazität haben.
- Vorhandene Standardknoten mit verfügbaren zuweisbaren Kapazitäten.
- Neue Knoten, die Spot-Pods ausführen können, sofern die Rechenressourcen verfügbar sind.
- Neue Standardknoten.
Da GKE vorhandene Standardknoten mit zuweisbarer Kapazität gegenüber der Erstellung neuer Knoten für Spot-Pods bevorzugt, werden möglicherweise mehr Pods als Standard-Pods ausgeführt als als Spot-Pods. Dadurch können Sie die Vorteile der niedrigeren Preise für Spot-Pods eventuell nicht voll ausschöpfen.
Anfragen für Pods auf Abruf
Autopilot-Cluster unterstützen Anfragen für Pods auf Abruf. Dazu wird die Auswahl cloud.google.com/gke-preemptible
verwendet. Pods, die diesen Selektor verwenden, werden automatisch zu Spot-Pods migriert und der Selektor wird in cloud.google.com/gke-spot
geändert.
Beendete Pods suchen und löschen
Während der ordnungsgemäßen Pod-Beendigung weist das Kubelet den beendeten Pods den Status Failed
und den Grund Shutdown
zu. Wenn die Anzahl der beendeten Pods einen Schwellenwert von 1.000 erreicht, bereinigt die automatische Speicherbereinigung die Pods. Sie können Shutdown-Pods mit dem folgenden Befehl auch manuell löschen:
kubectl get pods --all-namespaces | grep -i shutdown | awk '{print $1, $2}' | xargs -n2 kubectl delete pod -n
Nächste Schritte
- Weitere Informationen zur Autopilot-Clusterarchitektur
- Lebenszyklus von Pods
- Spot-VMs in GKE-Standardclustern