Anwendungen skalieren


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 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 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 prüfen

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:

  1. Rufen Sie eine Liste der Pods ab und prüfen Sie, welche Pods fehlerhaft sind:

    kubectl get pods
    
  2. 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:

  1. Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.

    Zu Arbeitslasten

  2. Klicken Sie in der Liste der Arbeitslasten auf den Namen der Arbeitslast, die Sie skalieren möchten.

  3. Klicken Sie auf Aktionen > Skalieren > Replikate bearbeiten.

  4. Geben Sie die neue Anzahl von Replikaten für das Arbeitslast ein.

  5. 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:

  1. Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.

    Zu Arbeitslasten

  2. Klicken Sie in der Liste der Arbeitslasten auf den Namen des Deployments, das Sie automatisch skalieren möchten.

  3. Klicken Sie auf Aktionen > Autoscaling.

  4. Geben Sie die maximale Anzahl von Replikaten und optional die Mindestanzahl von Replikaten für das Deployment ein.

  5. Wählen Sie unter Messwerte für Autoscaling die gewünschten Messwerte aus und konfigurieren Sie sie.

  6. 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.

Nächste Schritte