Auf dieser Seite wird beschrieben, wie Sie VMs auf Abruf in Google Kubernetes Engine (GKE) verwenden.
Spot-VMs sind die neueste Version von VMs auf Abruf. Anstelle von VMs auf Abruf empfehlen wir, entweder Spot-Pods in Autopilot-Clustern oder Spot-VMs in Standard-Clustern zu verwenden. GKE unterstützt weiterhin VMs auf Abruf, die dasselbe Preismodell wie Spot-VMs verwenden.
Übersicht
VMs auf Abruf sind Compute Engine-VM-Instanzen, die günstiger als Standard-VMs sind und keine Verfügbarkeit garantieren. VMs auf Abruf bieten ähnliche Funktionen wie Spot-VMs, sind jedoch maximal 24 Stunden nach der Erstellung gültig.
In einigen Fällen kann eine VM auf Abruf länger als 24 Stunden dauern. Dies kann auftreten, wenn die neue Compute Engine-Instanz zu schnell bereitgestellt wird und Kubernetes nicht erkennt, dass eine andere Compute Engine-VM erstellt wurde. Die zugrunde liegende Compute Engine-Instanz hat eine maximale Dauer von 24 Stunden und folgt dem erwarteten Verhalten von VMs auf Abruf.
Vergleich mit Spot-VMs
VMs auf Abruf haben viele Gemeinsamkeiten mit Spot-VMs, darunter:
- Wird beendet, wenn Compute Engine die Ressourcen zum Ausführen von Standard-VMs benötigt.
- Sind nützlich für das Ausführen zustandsloser, Batch- oder fehlertoleranter Arbeitslasten.
- Niedrigere Preise als bei Standard-VMs.
- Die ordnungsgemäße Herunterfahren von Knoten ist standardmäßig aktiviert. Anders als bei Spot-VMs können Sie die Dauer des Zeitraums für das ordnungsgemäße Beenden jedoch nicht ändern. Weitere Informationen finden Sie unter Beenden und ordnungsgemäßes Herunterfahren von Spot-VMs.
- Funktioniert mit Cluster Autoscaler und automatischer Knotenbereitstellung.
Im Gegensatz zu Spot-VMs, die keine maximale Ablaufzeit haben, sind VMs auf Abruf nur bis zu 24 Stunden nach der Erstellung gültig.
Sie können VMs auf Abruf in neuen Clustern und Knotenpools aktivieren, nodeSelector oder Knotenaffinität verwenden, um die Planung zu steuern, und Markierungen und Toleranzen verwenden, um Probleme mit Systemarbeitslasten zu vermeiden, wenn Knoten vorzeitig beendet werden.
Beendigung und ordnungsgemäßes Herunterfahren von VMs auf Abruf
Wenn Compute Engine die von VMs auf Abruf verwendeten Ressourcen zurückfordern muss, wird ein Hinweis auf vorzeitiges Beenden an GKE gesendet. VMs auf Abruf enden 30 Sekunden nach Erhalt eines Beendigungshinweises.
Standardmäßig wird in Clustern das ordnungsgemäße Herunterfahren von Knoten verwendet.
Das kubelet erkennt den Beendigungshinweis und beendet alle Pods, die auf dem Knoten ausgeführt werden, ordnungsgemäß. Wenn die Pods Teil einer verwalteten Arbeitslast wie einem Deployment sind, erstellt und plant der Controller neue Pods, um die beendeten Pods zu ersetzen.
Gemäß dem Best-Effort-Prinzip gewährt kubelet einen Zeitraum von 15 Sekunden für die ordnungsgemäße Beendigung von Nicht-System-Pods. Anschließend haben System-Pods (mit den Prioritätsklassen system-cluster-critical oder system-node-critical) 15 Sekunden Zeit für die ordnungsgemäße Beendigung. Während der ordnungsgemäßen Knotenbeendigung aktualisiert das kubelet den Status der Pods und weist den beendeten Pods eine Failed-Phase und einen Terminated-Grund zu.
Der Zeitraum für die ordnungsgemäße Beendigung von Nicht-System-Pods beträgt maximal 15 Sekunden.
Die Angabe eines Werts von mehr als 15 Sekunden im Feld terminationGracePeriodSeconds Ihres Pod-Manifests hat keine Auswirkungen. Die gesamte VM wird 30 Sekunden nach dem Hinweis auf vorzeitiges Beenden heruntergefahren.
Änderungen am Kubernetes-Verhalten
Die Verwendung von VMs auf Abruf in GKE ändert die Schutzmaßnahmen, die von Kubernetes PodDisruptionBudgets bereitgestellt werden. Die Rückforderung von VMs auf Abruf ist nicht freiwillig und unterliegt nicht den Garantien von PodDisruptionBudgets.
Möglicherweise ist die Verfügbarkeit nicht höher als Ihr konfiguriertes PodDisruptionBudget.
Beschränkungen
- VMs auf Abruf unterstützen keine Windows Server-Knotenpools.
- Bei VMs auf Abruf können Sie die 15-sekündige Kulanzzeit für Nicht-System-Pods und die anschließende 15-sekündige Kulanzzeit für System-Pods nicht ändern. Die zugrunde liegenden Konfigurationsfelder
shutdownGracePeriodundshutdownGracePeriodCriticalPodskubeletsind unveränderlich. Bei Spot-VMs können diese Einstellungen jedoch geändert werden. Weitere Informationen finden Sie unter Beenden und ordnungsgemäßes Herunterfahren von Spot-VMs.
Cluster oder Knotenpool mit VMs auf Abruf erstellen
Mit der Google Cloud CLI können Sie einen Cluster oder Knotenpool mit VMs auf Abruf erstellen.
Führen Sie den folgenden Befehl aus, um einen Cluster mit VMs auf Abruf zu erstellen:
gcloud container clusters create CLUSTER_NAME \
--preemptible
Ersetzen Sie dabei CLUSTER_NAME durch den Namen des neuen Clusters.
Führen Sie den folgenden Befehl aus, um einen Knotenpool mit VMs auf Abruf zu erstellen:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--preemptible
Ersetzen Sie POOL_NAME durch den Namen des neuen Knotenpools.
Mit nodeSelector Pods auf VMs auf Abruf planen
GKE fügt Knoten, die VMs auf Abruf verwenden, die Labels cloud.google.com/gke-preemptible=true und cloud.google.com/gke-provisioning=preemptible hinzu. Sie können einen nodeSelector in Ihren Bereitstellungen verwenden, um GKE anzuweisen, Pods auf VMs auf Abruf zu planen.
Die folgende Bereitstellung filtert beispielsweise nach VMs auf Abruf mit dem Label cloud.google.com/gke-preemptible:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
spec:
replicas: 3
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
resources:
requests:
cpu: 200m
nodeSelector:
cloud.google.com/gke-preemptible: "true"
Knotenmarkierungen für VMs auf Abruf verwenden
Sie können Knoten markieren, die VMs auf Abruf verwenden, damit GKE nur Pods mit der entsprechenden Toleranz auf diesen Knoten platzieren kann.
Wenn Sie einem Knotenpool, der VMs auf Abruf verwendet, eine Knotenmarkierung hinzufügen möchten, verwenden Sie beim Erstellen des Knotenpools das Flag --node-taints, wie im folgenden Befehl:
gcloud container node-pools create POOL2_NAME \
--cluster=CLUSTER_NAME \
--node-taints=cloud.google.com/gke-preemptible="true":NoSchedule
Jetzt werden nur noch Pods, die die Knotenmarkierung tolerieren, auf dem Knoten geplant.
Ändern Sie die Bereitstellungen und fügen Sie der Pod-Spezifikation Folgendes hinzu, um den Pods die relevante Toleranz hinzuzufügen:
tolerations:
- key: cloud.google.com/gke-preemptible
operator: Equal
value: "true"
effect: NoSchedule
Knotenmarkierungen für GPU-VMs auf Abruf
VMs auf Abruf unterstützen die Verwendung von GPUs. Sie sollten in Ihrem Cluster mindestens einen weiteren Knotenpool erstellen, der keine VMs auf Abruf verwendet, bevor Sie einen GPU-Knotenpool hinzufügen, der VMs auf Abruf verwendet. Ein Standardknotenpool sorgt dafür, dass GKE Systemkomponenten wie DNS sicher platzieren kann.
Wenn Sie einen neuen Cluster mit GPU-Knotenpools erstellen, die unterbrechbare VMs verwenden, oder wenn Sie einen neuen GPU-Knotenpool, der unterbrechbare VMs verwendet, zu einem Cluster hinzufügen, der noch nicht über einen Standard-Knotenpool verfügt, fügt GKE die Markierung nvidia.com/gpu=present:NoSchedule nicht automatisch zu den Knoten hinzu. GKE kann System-Pods auf den VMs auf Abruf planen, was zu Unterbrechungen führen kann. Dieses Verhalten erhöht auch den Ressourcenverbrauch, da GPU-Knoten teurer sind als Nicht-GPU-Knoten.
Nächste Schritte
- GKE-Anwendung auf Spot-VMs mit On-Demand-Knoten als Fallback ausführen
- Spot-VMs in GKE
- Markierungen und Toleranzen