Auf dieser Seite wird gezeigt, wie Sie eine bereitgestellte Anwendung in Kubernetes Engine (GKE) skalieren können.
Übersicht
Wenn Sie in GKE eine Anwendung bereitstellen, legen Sie fest, wie viele Replikate der Anwendung ausgeführt werden sollen. Beim Skalieren einer Anwendung erhöhen oder verringern Sie die Anzahl der Replikate.
Jedes Replikat einer Anwendung stellt einen Kubernetes-Pod dar, der die Container der Anwendung enthält.
Vorbereitung
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.
Anwendung untersuchen
Bevor Sie Ihre Anwendung skalieren, sollten Sie prüfen, ob die Anwendung fehlerfrei ist.
Um alle in Ihrem Cluster bereitgestellten Anwendungen zu sehen, führen Sie den folgenden Befehl aus:
kubectl get CONTROLLER
Ersetzen Sie CONTROLLER
durch deployments
, statefulsets
oder einen anderen Controller-Objekttyp.
Wenn Sie beispielsweise kubectl get deployments
ausführen und nur ein Deployment erstellt haben, sollte die Ausgabe des Befehls ungefähr so aussehen:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 1 1 1 1 10m
Die Ausgabe dieses Befehls ist für alle Objekte ähnlich, kann jedoch geringfügig abweichen. Bei Deployments hat die Ausgabe sechs Spalten:
NAME
: Listet die Namen der Deployments im Cluster auf.DESIRED
: Zeigt die gewünschte Anzahl von Replikaten oder den gewünschten Zustand der Anwendung an. Diesen Wert legen Sie beim Erstellen des Deployments fest.CURRENT
: Zeigt an, wie viele Replikate aktuell ausgeführt werden.UP-TO-DATE
: Zeigt die Anzahl der Replikate an, die aktualisiert wurden, um den gewünschten Status zu erreichen.AVAILABLE
: Zeigt an, wie viele Replikate der Anwendung den Nutzern zur Verfügung stehen.AGE
: Zeigt an, wie lange die Anwendung bereits im Cluster ausgeführt wird.
In diesem Beispiel gibt es nur das Deployment my-app
. Es hat nur ein Replikat, da dies der gewünschte Zustand ist. Sie definieren den gewünschten Zustand beim Erstellen, können ihn aber jederzeit durch Skalieren der Anwendung ändern.
StatefulSets untersuchen
Bevor Sie ein StatefulSet skalieren, sollten Sie es mit dem folgenden Befehl prüfen:
kubectl describe statefulset my-app
Markieren Sie in der Ausgabe dieses Befehls das Feld Pods Status. Wenn der Wert von Failed
größer ist als 0
, schlägt die Skalierung unter Umständen fehl.
Scheint ein StatefulSet fehlerhaft zu sein, gehen Sie so vor:
Rufen Sie eine Liste der Pods ab und prüfen Sie, welche Pods fehlerhaft sind:
kubectl get pods
Entfernen Sie den fehlerhaften Pod:
kubectl delete POD_NAME
Wenn Sie versuchen, ein fehlerhaftes StatefulSet zu skalieren, kann dieses im Anschluss eventuell nicht mehr verwendet werden.
Anwendungen skalieren
In den folgenden Abschnitten werden alle Methoden beschrieben, mit denen Sie eine Anwendung skalieren können.
Die Methode kubectl scale
ist die schnellste Skalierungsmethode. In bestimmten Situationen können aber andere Methoden hilfreicher sein, z. B. wenn Sie Konfigurationsdateien aktualisieren oder direkte Änderungen ausführen möchten.
kubectl scale
Mit dem Befehl kubectl scale
können Sie die Anzahl der Replikate unmittelbar ändern, die von der Anwendung ausgeführt werden sollen.
Wenn Sie kubectl scale
verwenden möchten, geben Sie die neue Anzahl von Replikaten an. Legen Sie dafür das Flag --replicas
fest. Beispiel: Zum Skalieren von my-app
auf vier Replikate führen Sie den unten aufgeführten Befehl aus. Ersetzen Sie dabei CONTROLLER
durch deployment
, statefulset
oder einen anderen Controller-Objekttyp:
kubectl scale CONTROLLER my-app --replicas 4
Bei erfolgreicher Ausführung sieht die Ausgabe dieses Befehls in etwa so aus: deployment
"my-app" scaled
.
Führen Sie als Nächstes diesen Befehl aus:
kubectl get CONTROLLER my-app
Die Ausgabe sollte in etwa so aussehen:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 4 4 4 4 15m
kubectl apply
Mit kubectl apply
können Sie eine neue Konfigurationsdatei auf ein vorhandenes Controller-Objekt anwenden. kubectl
apply
ist nützlich, um an einer Ressource mehrere Änderungen vorzunehmen. Außerdem kann es Nutzern helfen, die ihre Ressourcen lieber in Konfigurationsdateien verwalten möchten.
Zum Skalieren mit kubectl apply
sollte die bereitgestellte Konfigurationsdatei im Feld replicas
der Objektspezifikation eine neue Anzahl von Replikaten enthalten.
Im Folgenden finden Sie eine aktualisierte Version der Konfigurationsdatei für das Beispielobjekt my-app
. Das Beispiel zeigt ein Deployment. Wenn Sie also einen anderen Controllertyp wie StatefulSet verwenden, ändern Sie kind
entsprechend. Dieses Beispiel funktioniert am besten bei einem Cluster mit mindestens drei Knoten.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: my-container
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
In dieser Datei hat das Feld replicas
den Wert 3
. Wenn diese Konfigurationsdatei angewendet wird, wird das Objekt my-app
auf drei Replikate skaliert.
Führen Sie folgenden Befehl aus, um eine aktualisierte Konfigurationsdatei anzuwenden:
kubectl apply -f config.yaml
Führen Sie als Nächstes diesen Befehl aus:
kubectl get CONTROLLER my-app
Die Ausgabe sollte in etwa so aussehen:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 3 3 3 3 15m
Console
Mit den folgenden Schritten können Sie eine Arbeitslast in der Google Cloud Console skalieren:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen der Arbeitslast, die Sie skalieren möchten.
Klicken Sie auf list Aktionen > Skalieren > Replikate bearbeiten.
Geben Sie die neue Anzahl von Replikaten für das Arbeitslast ein.
Klicken Sie auf Skalieren.
Deployments automatisch skalieren
Sie haben die Möglichkeit, Deployments auf der Basis der CPU-Auslastung von Pods automatisch zu skalieren. Verwenden Sie dafür den Befehl kubectl
autoscale
oder das GKE-Menü "Arbeitslasten" in der Google Cloud Console.
kubectl autoscale
kubectl autoscale
erstellt ein HorizontalPodAutoscaler
-Objekt (HPA), das auf eine angegebene Ressource, das Skalierungsziel, ausgerichtet ist, und skaliert diese nach Bedarf. Der HPA passt die Anzahl der Replikate des Skalierungsziels in regelmäßigen Abständen an die von Ihnen angegebene durchschnittliche CPU-Auslastung an.
Wenn Sie kubectl autoscale
verwenden, geben Sie eine maximale und eine minimale Anzahl von Replikaten für die Anwendung sowie ein CPU-Auslastungsziel an. Wenn Sie beispielsweise maximal sechs und mindestens vier Replikate mit einem CPU-Auslastungsziel von 50 % festlegen möchten, führen Sie folgenden Befehl aus:
kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50
Bei diesem Befehl ist das Flag --max
erforderlich. Das Flag --cpu-percent
ist die Ziel-CPU-Auslastung für alle Pods zusammen. Dieser Befehl sorgt nicht dafür, dass das Deployment sofort auf sechs Replikate skaliert wird – es sei denn, die Anforderungen des Systems sind entsprechend hoch.
Nach der Ausführung von kubectl autoscale
wird das Objekt HorizontalPodAutoscaler
erstellt und auf die Anwendung ausgerichtet. Wenn sich die Last ändert, wird die Anzahl der Replikate der Anwendung durch das Objekt erhöht oder verringert.
Zum Abrufen einer Liste der HorizontalPodAutoscaler
-Objekte in Ihrem Cluster führen Sie folgenden Befehl aus:
kubectl get hpa
Wenn Sie ein bestimmtes Objekt des Typs HorizontalPodAutoscaler
im Cluster ansehen möchten, führen Sie folgenden Befehl aus:
kubectl get hpa HPA_NAME
Ersetzen Sie HPA_NAME
durch den Namen Ihres HorizontalPodAutoscaler
-Objekts.
So rufen Sie die Konfiguration von HorizontalPodAutoscaler
auf:
kubectl get hpa HPA_NAME -o yaml
Die Ausgabe dieses Befehls sieht in etwa wie folgt aus:
apiVersion: v1
items:
- apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: ...
name: HPA_NAME
namespace: default
resourceVersion: "664"
selfLink: ...
uid: ...
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: HPA_NAME
targetCPUUtilizationPercentage: 50
status:
currentReplicas: 0
desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""
In dieser Beispielausgabe enthält das Feld targetCPUUtilizationPercentage
den Prozentwert 50
, der vom Beispiel kubectl autoscale
übergeben wurde.
Wenn Sie die ausführliche Beschreibung eines bestimmten Objekts vom Typ HorizontalPodAutoscaler
im Cluster anzeigen lassen möchten, führen Sie Folgendes aus:
kubectl describe hpa HPA_NAME
Sie können HorizontalPodAutoscaler
ändern. Wenden Sie dafür eine neue Konfigurationsdatei, die kubectl apply
enthält, mit kubectl edit
oder kubectl patch
an.
So löschen Sie ein Objekt HorizontalPodAutoscaler
:
kubectl delete hpa HPA_NAME
Console
Gehen Sie wie folgt vor, um ein Deployment automatisch zu skalieren:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen des Deployments, das Sie automatisch skalieren möchten.
Klicken Sie auf list Aktionen > Autoscaling.
Geben Sie die maximale Anzahl von Replikaten und optional die Mindestanzahl von Replikaten für das Deployment ein.
Wählen Sie unter Messwerte für Autoscaling die gewünschten Messwerte aus und konfigurieren Sie sie.
Klicken Sie auf Automatisch skalieren.
Automatische Skalierung mit benutzerdefinierten Messwerten
Sie können Deployments anhand von benutzerdefinierten Messwerten skalieren, die aus Cloud Monitoring exportiert wurden.
Informationen zum Verwenden benutzerdefinierter Messwerte für das Autoscaling von Deployments finden Sie in der Anleitung Deployments mit benutzerdefinierten Messwerten automatisch skalieren.