Zustandslose Anwendungen bereitstellen

Auf dieser Seite wird beschrieben, wie Sie mit Google Kubernetes Engine (GKE) eine zustandslose Linux-Anwendung bereitstellen. Hier erfahren Sie, wie Sie zustandslose Windows-Anwendungen bereitstellen.

Übersicht

Zustandslose Anwendungen speichern weder Daten noch den Anwendungsstatus im Cluster oder nichtflüchtigen Speicher. Stattdessen bleiben Daten und Anwendungsstatus beim Client. Das macht zustandslose Anwendungen skalierbarer. Bei einer zustandslosen Front-End-Anwendung zum Beispiel werden mehrere Replikate bereitgestellt, um ihre Verfügbarkeit zu erhöhen und bei geringem Bedarf wieder zu verringern. Die Replikate benötigen dabei keine eindeutigen Identitäten.

Kubernetes verwendet den Deployment-Controller zum Bereitstellen zustandsloser Anwendungen als einheitliche, nicht eindeutige Pods. Deployments verwalten dabei den gewünschten Status einer Anwendung und geben Antworten auf Fragen wie "Wie viele Pods sollten die Anwendung ausführen?", "Welche Version des Container-Images sollte ausgeführt werden?", "Welche Labels sollten die Pods haben?" usw. Der gewünschte Status kann dynamisch durch Aktualisieren der Pod-Spezifikation des Deployments geändert werden.

Zustandslose Anwendungen sind das Gegenteil von zustandsorientierten Anwendungen. Diese verwenden zum Speichern von Daten nichtflüchtigen Speicher und stellen über StatefulSets Pods mit eindeutigen Identitäten bereit.

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 Standardregion für Compute Engine fest:
    gcloud config set compute/region compute-region
  • Aktualisieren Sie gcloud auf die neueste Version:
    gcloud components update
  • Achten Sie darauf, dass Ihre containerisierte Anwendung in einer Image-Registry wie Container Registry gespeichert ist.

  • Wenn Sie mit GKE noch nicht vertraut sind, gehen Sie den Schnellstart durch. Darin aktivieren Sie auch die GKE API und erfahren, wie das Produkt funktioniert.

Anatomie eines Deployments

Das folgende Beispiel zeigt eine einfache Manifestdatei eines Deployments. Bei diesem Deployment werden drei replizierte Pods mit dem Label app=my-app erstellt, die das in Container Registry gespeicherte Image hello-app ausführen:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: hello-app
        image: gcr.io/google-samples/hello-app:1.0

Dabei gilt:

  • spec: replicas: ist die Anzahl der replizierten Pods, die vom Deployment verwaltet werden.
  • spec: template: metadata: labels: ist das Label für jeden Pod, das vom Deployment zum Verwalten der Pods verwendet wird.
  • spec: template: spec: ist die Pod-Spezifikation, mit der definiert wird, wie jeder Pod ausgeführt werden soll. spec: containers enthält den Namen des in jedem Pod auszuführenden Containers sowie das auszuführende Container-Image.

Weitere Informationen zur Deployment-Spezifikation finden Sie in der Referenz zur Deployment API.

Deployment erstellen

Ein Deployment können Sie mit einer der folgenden Methoden erstellen:

  • In der Google Cloud Console steht Ihnen im Menü Arbeitslasten die Funktion "Bereitstellen" zur Verfügung. Damit können Sie aus einem in Container Registry gespeicherten Container-Image ein einfaches Deployment erstellen.
  • Sie können ein Deployment-Manifest schreiben und dann kubectl apply ausführen, um die Ressource zu erstellen.

kubectl apply

Sie können mit kubectl apply aus Manifestdateien deklaratorisch Deployments erstellen und aktualisieren. Diese Methode behält auch Aktualisierungen bei, die an aktiven Ressourcen vorgenommen wurden, ohne die Änderungen in die Manifestdateien zu übernehmen.

Führen Sie den folgenden Befehl aus, um aus einer Manifestdatei ein Deployment zu erstellen:

kubectl apply -f [DEPLOYMENT_FILE]

Dabei ist [DEPLOYMENT_FILE] die Manifestdatei, z. B. config.yaml.

Sie können auch kubectl apply -f [DIRECTORY]/ verwenden, um alle Objekte (außer bereits vorhandene) zu erstellen, die in Manifestdateien definiert und in einem Verzeichnis gespeichert sind.

Console

So erstellen Sie ein Deployment:

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

    Zum Menü "Arbeitslasten"

  2. Klicken Sie auf Bereitstellen.

  3. Wählen Sie unter Container bearbeiten Folgendes aus:

    • Vorhandenes Container-Image, um ein in Container Registry verfügbares Docker-Image auszuwählen. Geben Sie unter Container-Image das Container-Image, das Sie verwenden möchten, sowie dessen Version an.

    • Neues Container-Image, um ein Image zu verwenden, das mit Cloud Source Repositories und Cloud Build erstellt wurde.

  4. Optional können Sie das Deployment konfigurieren mit:

    • Umgebungsvariablen, die an den Container übergeben werden sollen.
    • Ersten Befehlen, um den Einstiegspunkt des Containers zur Laufzeit anzupassen.
  5. Klicken Sie auf Weiter. Der Bildschirm Konfiguration wird angezeigt.

  6. Weisen Sie Ihrem Deployment einen Anwendungsnamen zu und geben Sie den Kubernetes Namespace an, in dem es bereitgestellt werden soll.

  7. Wenn Sie auf das Deployment Labels von Kubernetes anwenden möchten, fügen Sie unter Labels Schlüssel und Werte hinzu.

  8. Wenn Sie die YAML-Inhalte speichern möchten, mit denen dieses Deployment erstellt wird, damit Sie es später aktualisieren können, klicken Sie auf YAML-Inhalt aufrufen. Kopieren Sie den YAML-Inhalt und fügen Sie ihn in eine Datei ein. Speichern Sie die Datei anschließend.

  9. Wählen Sie dann im Drop-down-Menü Cluster den gewünschten Cluster aus.

  10. Klicken Sie auf Bereitstellen.

Deployment überprüfen

Nach dem Erstellen eines Deployments können Sie es mit einer der folgenden Methoden überprüfen:

kubectl

Führen Sie den folgenden Befehl aus, um ausführliche Informationen zum Deployment zu erhalten:

kubectl describe deployment [DEPLOYMENT_NAME]

Dabei ist [DEPLOYMENT_NAME] der Name des Deployments.

Um eine Liste der Pods zu erstellen, die von dem Deployment erstellt wurden, führen Sie den folgenden Befehl aus:

kubectl get pods -l [KEY]=[VALUE]

Hier weist das Flag -l den Befehl kubectl an, alle Pods mit einem Schlüssel/Wert-Paar-Label abzurufen. Wenn Sie beispielsweise das Deployment app: my-app mit einem Label versehen haben, müssten Sie kubectl get pods -l app=my-app ausführen, um sich Pods mit diesem Label anzeigen zu lassen.

So erhalten Sie Informationen zu einem bestimmten Pod:

kubectl describe pod [POD_NAME]

Führen Sie den folgenden Befehl aus, um das Manifest eines Deployments zu sehen:

kubectl get deployments [DEPLOYMENT_NAME] -o yaml

Dieser Befehl zeigt die Live-Konfiguration im YAML-Format an.

Console

Führen Sie die folgenden Schritte aus, um ein Deployment zu überprüfen:

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

    Zum Menü "Arbeitslasten"

  2. Weitere Informationen zu einer Arbeitslast erhalten Sie durch das Auswählen der gewünschten Arbeitslast aus dem Menü.

Das Menü "Arbeitslasten" bietet verschiedene weitere Menüs:

  • Klicken Sie auf YAML, um die Live-Konfiguration des Deployments aufzurufen.
  • Klicken Sie auf Ereignisse, um alle Ereignisse im Zusammenhang mit dem Deployment anzeigen zu lassen.
  • Klicken Sie auf Überarbeitungsverlauf, um den Überarbeitungsverlauf des Deployments zu sehen.

Deployment aktualisieren

Sie haben die Möglichkeit, für die Pod-Spezifikation eines Deployments Aktualisierungen durchzuführen, z. B. für Image, Ressourcennutzung/-anfragen oder Konfiguration.

Dies ist mit den folgenden Methoden möglich:

  • Sie können in der Cloud Console im Menü Arbeitslasten das Menü Rolling Update und einen YAML-Editor verwenden.
  • Sie können Änderungen an einer Manifestdatei vornehmen und sie mit kubectl apply übernehmen.
  • Sie können die Felder image, resources oder selector der Pod-Spezifikation mit kubectl set aktualisieren.
  • Sie können ein Deployment direkt über Ihre Shell oder in einem Editor Ihrer Wahl mit kubectl edit aktualisieren.

kubectl apply

Das Deployment kann aktualisiert werden, indem eine neue oder aktualisierte Manifestdatei angewendet wird. Dies ist hilfreich, um verschiedene Änderungen an Ihrem Deployment vorzunehmen, z. B. zum Skalieren oder zum Angeben einer neuen Version Ihrer Anwendung.

Mit dem folgenden Befehl aktualisieren Sie ein Deployment:

kubectl apply -f [DEPLOYMENT_FILE]

Dabei ist [DEPLOYMENT_FILE] die aktualisierte Manifestdatei.

Der Befehl kubectl apply weist einer Ressource eine Manifestdatei zu. Wenn die angegebene Ressource nicht vorhanden ist, wird sie mit dem Befehl erstellt.

kubectl set

Sie können kubectl set verwenden, um die Felder "Image", "Ressourcen" (Anfragen oder Limits) oder "Auswahl" eines Deployments zu ändern.

Führen Sie folgenden Befehl aus, um das Image eines Deployments zu ändern:

kubectl set image deployment [DEPLOYMENT_NAME] [IMAGE] [IMAGE]:[TAG]

Führen Sie beispielsweise den folgenden Befehl aus, um ein Deployment von nginx-Version 1.7.9 auf Version 1.9.1 zu aktualisieren:

kubectl set image deployment nginx nginx=nginx:1.9.1

Console

Sie können die Aktualisierung unter "Arbeitslasten" über das Menü Rolling Update vornehmen.

Führen Sie die folgenden Schritte aus, um auf das Menü Rolling Update des Deployments zuzugreifen:

  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. Klicken Sie auf Aktionen und dann auf Rolling Update.

Sie können an der Aktualisierungsstrategie des Deployments die folgenden Änderungen vornehmen:

  • Minimale Bereitschaftsdauer in Sekunden: Gibt die Mindestanzahl von Sekunden an, in der neu erstellte Pods bereit und verfügbar sein sollen.
  • Maximal zu viel: Optionales Feld mit der maximalen Anzahl von Pods, die über die gewünschte Anzahl von Pods erstellt werden können. Der Wert kann eine absolute Zahl oder ein Prozentsatz sein.
  • Maximal nicht verfügbar: Optionales Feld mit der maximalen Anzahl der Pods, die während des Aktualisierungsvorgangs nicht verfügbar sein müssen. Der Wert kann eine absolute Zahl oder ein Prozentsatz sein.

    So bearbeiten Sie einen vorhandenen Container:

    1. Wählen Sie im Menü Rolling Update den Container aus, dessen Menü Sie erweitern möchten.
    2. Wenn Sie den Namen des Containers ändern möchten, bearbeiten Sie das Feld Containername.
    3. Wenn Sie das Container-Image ändern möchten, bearbeiten Sie das Feld Image-Name.
    4. Klicken Sie auf Fertig, um die Änderungen zu speichern.
    5. Wenn Sie den Container löschen möchten, klicken Sie auf das Papierkorbsymbol.

    So fügen Sie einen neuen Container hinzu:

    1. Klicken Sie im Menü Rolling Update auf Container hinzufügen.
    2. Geben Sie im Feld Image-Name das Image und die Version im folgenden Format ein: [IMAGE_NAME]:[IMAGE_VERSION]. Beispiel: nginx:1.7.9.
    3. Optional füllen Sie das Feld Containername mit einem Namen für den Container aus.
    4. Klicken Sie auf Fertig.
  • Klicken Sie auf Aktualisieren.

Führen Sie die folgenden Schritte aus, um die Live-Konfiguration eines Deployments zu bearbeiten:

  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.

  3. Klicken Sie auf Bearbeiten.

  4. Verwenden Sie den Editor, um die gewünschten Änderungen am Objekt vorzunehmen.

  5. Klicken Sie auf Speichern.

Aktualisierung rückgängig machen

Mit dem Befehl kubectl rollout undo lässt sich eine Aktualisierung rückgängig machen.

So setzen Sie eine laufende oder abgeschlossene Aktualisierung auf die vorherige Version zurück:

kubectl rollout undo deployment my-deployment

Sie können auch zu einer bestimmten Überarbeitung zurückkehren:

kubectl rollout undo deployment my-deployment --to-revision=3

Deployment skalieren

Sie können ein Deployment mithilfe der Cloud Console oder kubectl scale manuell skalieren.

Weitere Informationen finden Sie unter Autoscaling von Deployments.

kubectl

kubectl scale kann jederzeit zum Skalieren des Deployments verwendet werden.

Um ein Deployment manuell zu skalieren, führen Sie den folgenden Befehl aus:

kubectl scale deployment [DEPLOYMENT_NAME] --replicas [NUMBER_OF_REPLICAS]

Dabei ist [NUMBER_OF_REPLICAS] die gewünschte Anzahl von replizierten Pods.

Console

So skalieren Sie ein Deployment:

  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.

Deployment löschen

Mit der Cloud Console oder kubectl delete können Sie ein Deployment löschen.

kubectl

Mit diesem Befehl löschen Sie das Deployment:

kubectl delete deployment [DEPLOYMENT_NAME]

Console

Mit den folgenden Schritten löschen Sie ein Deployment:

  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 Löschen.

  4. Klicken Sie im Bestätigungsdialogfeld auf Löschen.

Weitere Informationen