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 Frontend-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 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.
Achten Sie darauf, dass Ihre containerisierte Anwendung in einer Image-Registry wie Artifact Registry gespeichert ist.
Wenn Sie mit GKE noch nicht vertraut sind, gehen Sie die Kurzanleitung 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 run=my-app
erstellt, die das in Artifact 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 Fall gilt Folgendes:
.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 Artifact 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:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie auf add_box Bereitstellen.
Wählen Sie unter Container angeben eine der folgenden Optionen aus:
Vorhandenes Container-Image, um ein in Artifact Registry oder DockerHub 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.
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.
Klicken Sie auf Fertig und dann auf Weiter.
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.
Optional können Sie unter Labels Kubernetes-Labels zum Deployment hinzufügen.
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.
Wählen Sie dann im Drop-down-Menü Kubernetes-Cluster den gewünschten Cluster aus.
Klicken Sie auf Bereitstellen.
Deployment überprüfen
Nach dem Erstellen eines Deployments können Sie es mit einer der folgenden Methoden überprüfen:
- Über das Menü Arbeitslasten
Sie können
kubectl describe
undkubectl get
verwenden.
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 run: my-app
mit einem Label versehen haben, müssten Sie kubectl get pods -l run=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:
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 überprüfen möchten.
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 Google 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
oderselector
der Pod-Spezifikation mitkubectl 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:
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 ändern möchten.
Klicken Sie auf list Aktionen > Rolling Update.
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.
Geben Sie unter Container-Images den Image-Pfad und die Version für das aktualisierte Container-Image ein.
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 Google 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:
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 ändern möchten.
Klicken Sie auf list Aktionen > Skalierung > Replikate bearbeiten
Geben Sie die neue Anzahl von Replikaten für das Deployment ein.
Klicken Sie auf Skalieren.
Deployment löschen
Mit der Google 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:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Wählen Sie in der Arbeitslastliste ein oder mehrere Deployments aus, die gelöscht werden sollen.
Klicken Sie auf delete Löschen.
Wenn Sie zur Bestätigung aufgefordert werden, klicken Sie auf Löschen.