Anwendungen skalieren

Auf dieser Seite wird gezeigt, wie Sie eine bereitgestellte Anwendung in Kubernetes Engine 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:

Mit den folgenden Methoden können Sie die gcloud-Einstellungen festlegen:

  • Verwenden Sie gcloud init, wenn Sie die Standardeinstellungen ansehen möchten.
  • Verwenden Sie gcloud config, um Ihre Projekt-ID, Zone und Region individuell festzulegen.

gcloud init verwenden

Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify location erhalten, führen Sie diesen Abschnitt aus.

  1. Führen Sie gcloud init aus und folgen Sie der Anleitung:

    gcloud init

    Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag --console-only verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:

    gcloud init --console-only
  2. Folgen Sie der Anleitung, um gcloud zur Verwendung Ihres Google Cloud-Kontos zu autorisieren.
  3. Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
  4. Wählen Sie ein Google Cloud-Projekt aus.
  5. Wählen Sie eine Compute Engine-Standardzone aus.

gcloud config verwenden

  • Legen Sie Ihre standardmäßige Projekt-ID fest:
    gcloud config set project PROJECT_ID
  • Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Compute-Standardzone fest:
    gcloud config set compute/zone COMPUTE_ZONE
  • Wenn Sie mit regionalen Clustern arbeiten, legen Sie die Compute-Standardregion fest:
    gcloud config set compute/region COMPUTE_REGION
  • Aktualisieren Sie gcloud auf die neueste Version:
    gcloud components update

Anwendung prüfen

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: gcr.io/google-samples/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 Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.

    Zum Menü "Arbeitslasten"

  2. Wählen Sie die gewünschte Arbeitslast aus dem Menü aus.

  3. Wählen Sie Aktionen und dann Skalieren aus.

  4. Geben Sie im Feld Replikate die gewünschte Anzahl der Replikate 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 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

Dabei ist hpa-name der Name 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

Mit den folgenden Schritten kann das Autoscaling von Deployments festgelegt werden:

  1. Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.

    Zum Menü "Arbeitslasten"

  2. Wählen Sie im Menü die gewünschte Arbeitslast aus.

  3. Klicken Sie auf Aktionen und dann auf Automatisch skalieren.

  4. Geben Sie im Feld Maximale Anzahl von Pods die gewünschte maximale Anzahl der Pods ein.

  5. Optional können Sie Werte in den Feldern Mindestanzahl von Pods und Ziel-CPU-Auslastung in Prozent eingeben.

  6. Klicken Sie auf Automatisch skalieren.

Automatische Skalierung mit benutzerdefinierten Messwerten

Sie können Deployments anhand von benutzerdefinierten Messwerten skalieren, die aus Kubernetes Engine 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