Zustandslose Linux-Anwendung 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 für zonale Cluster oder eine Region für regionale oder Autopilot-Cluster 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 Standardzone für Compute Engine fest:
    gcloud config set compute/zone COMPUTE_ZONE
  • Wenn Sie mit Autopilot oder 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
  • 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: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

In diesem Beispiel:

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

Ersetzen Sie DEPLOYMENT_FILE durch 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 die Seite Arbeitslasten auf.

    Zu "Arbeitslasten"

  2. Klicken Sie auf Bereitstellen.

  3. Wählen Sie unter Container bearbeiten eine der folgenden Optionen aus:

    • Vorhandenes Container-Image, um ein in Container Registry verfügbares Container-Image auszuwählen. Geben Sie unter Image-Pfad den Pfad zum Container-Image und zur Version ein.

    • 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 Fertig und dann auf Weiter.

  6. Geben Sie im Abschnitt Konfiguration einen Anwendungsnamen für das Deployment an und legen Sie den Kubernetes Namespace fest, in dem er bereitgestellt werden soll.

  7. Optional können Sie unter Labels Kubernetes-Labels zum Deployment hinzufügen.

  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 öffnen. Kopieren Sie den YAML-Inhalt und fügen Sie ihn in eine Datei ein. Speichern Sie die Datei und klicken Sie im Dialogfeld YAML-Ausgabe auf Schließen.

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

  10. Klicken Sie auf Deploy.

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

Ersetzen Sie DEPLOYMENT_NAME durch den Namen 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 die Seite Arbeitslasten auf.

    Zu "Arbeitslasten"

  2. Klicken Sie in der Liste der Arbeitslasten auf den Namen des Deployments, das Sie überprüfen möchten.

  3. Führen Sie auf der Seite Bereitstellungsdetails einen der folgenden Schritte aus:

    • Klicken Sie auf den Tab Überarbeitungsverlauf, um den Überarbeitungsverlauf des Deployments anzuzeigen.
    • Klicken Sie auf den Tab Ereignisse, um alle Ereignisse im Zusammenhang mit dem Deployment anzuzeigen.
    • Klicken Sie auf den Tab Logs, um Containeraktivitätslogs im Deployment aufzurufen.
    • Klicken Sie auf den Tab YAML, um das YAML-Manifest für das Deployment aufzurufen, zu kopieren und herunterzuladen.

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

Ersetzen Sie DEPLOYMENT_FILE durch 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

So greifen Sie auf das Menü Rolling Update des Deployments zu:

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

    Zu "Arbeitslasten"

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

  3. Klicken Sie auf Aktionen > Rolling Update.

  4. Konfigurieren Sie die folgenden optionalen Parameter für die Updatestrategie:

    • Minimale Bereitschaftsdauer in Sekunden: Gibt die Mindestanzahl von Sekunden an, in der neu erstellte Pods bereit und verfügbar sein sollen.
    • Maximal zu viel: Gibt die maximale Anzahl von Pods an, die über die gewünschte Anzahl von Pods hinaus erstellt werden können. Der Wert kann eine absolute Zahl oder ein Prozentsatz sein.
    • Maximal nicht verfügbar: Gibt die maximale Anzahl der Pods an, die während des Updatevorgangs nicht verfügbar sein müssen. Der Wert kann eine absolute Zahl oder ein Prozentsatz sein.
  5. Geben Sie unter Container-Images den Image-Pfad und die Version für das aktualisierte Container-Image ein.

  6. Klicken Sie auf Aktualisieren.

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

Ersetzen Sie NUMBER_OF_REPLICAS durch die gewünschte Anzahl von replizierten Pods.

Console

So skalieren Sie ein Deployment:

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

    Zu "Arbeitslasten"

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

  3. Klicken Sie auf Aktionen > Skalieren.

  4. Geben Sie die neue Anzahl von Replikaten für das Deployment 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 die Seite Arbeitslasten auf.

    Zu "Arbeitslasten"

  2. Wählen Sie in der Arbeitslastliste ein oder mehrere Deployments aus, die gelöscht werden sollen.

  3. Klicken Sie auf Löschen.

  4. Wenn Sie zur Bestätigung aufgefordert werden, klicken Sie auf Löschen.

Nächste Schritte