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:
- Achten Sie darauf, dass die Google Kubernetes Engine API aktiviert ist. Aktivieren Sie Google Kubernetes Engine API
- Prüfen Sie, ob das Cloud SDK installiert ist.
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.
-
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
- Folgen Sie der Anleitung, um
gcloud
zur Verwendung Ihres Google Cloud-Kontos zu autorisieren. - Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
- Wählen Sie ein Google Cloud-Projekt aus.
- 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:
Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.
Klicken Sie auf Bereitstellen.
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.
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 Weiter. Der Bildschirm Konfiguration wird angezeigt.
Weisen Sie Ihrem Deployment einen Anwendungsnamen zu und geben Sie den Kubernetes Namespace an, in dem es bereitgestellt werden soll.
Wenn Sie auf das Deployment Labels von Kubernetes anwenden möchten, fügen Sie unter Labels Schlüssel und Werte hinzu.
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.
Wählen Sie dann im Drop-down-Menü 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]
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:
Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.
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
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]
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:
Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.
Wählen Sie die gewünschte Arbeitslast aus dem Menü aus.
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:
- Wählen Sie im Menü Rolling Update den Container aus, dessen Menü Sie erweitern möchten.
- Wenn Sie den Namen des Containers ändern möchten, bearbeiten Sie das Feld Containername.
- Wenn Sie das Container-Image ändern möchten, bearbeiten Sie das Feld Image-Name.
- Klicken Sie auf Fertig, um die Änderungen zu speichern.
- Wenn Sie den Container löschen möchten, klicken Sie auf das Papierkorbsymbol.
So fügen Sie einen neuen Container hinzu:
- Klicken Sie im Menü Rolling Update auf Container hinzufügen.
- Geben Sie im Feld Image-Name das Image und die Version im folgenden Format ein:
[IMAGE_NAME]:[IMAGE_VERSION]
. Beispiel:nginx:1.7.9
. - Optional füllen Sie das Feld Containername mit einem Namen für den Container aus.
- Klicken Sie auf Fertig.
Klicken Sie auf Aktualisieren.
Führen Sie die folgenden Schritte aus, um die Live-Konfiguration eines Deployments zu bearbeiten:
Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.
Wählen Sie die gewünschte Arbeitslast aus.
Klicken Sie auf Bearbeiten.
Verwenden Sie den Editor, um die gewünschten Änderungen am Objekt vorzunehmen.
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:
Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.
Wählen Sie die gewünschte Arbeitslast aus dem Menü aus.
Wählen Sie Aktionen und dann Skalieren aus.
Geben Sie im Feld Replikate die gewünschte Anzahl der Replikate ein.
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:
Rufen Sie in der Cloud Console das Google Kubernetes Engine-Menü "Arbeitslasten" auf.
Wählen Sie im Menü die gewünschte Arbeitslast aus.
Klicken Sie auf Löschen.
Klicken Sie im Bestätigungsdialogfeld auf Löschen.