In dieser Anleitung wird gezeigt, wie Sie mithilfe von Google Kubernetes Engine (GKE) eine mehrstufige Webanwendung erstellen.
In dieser Anleitung tun Sie Folgendes:
- Richten Sie eine Webanwendung mit einer externen IP-Adresse und einem Load Balancer ein.
- Erstellen Sie einen Redis-Cluster mit einem einzelnen Master (Leader) und mehreren Replikaten (Followern).
Im Beispiel werden die folgenden Kubernetes-Konzepte beschrieben:
- Deklarative Konfiguration mithilfe von YAML-Manifestdateien
- Deployments, also Kubernetes-Ressourcen, die die Konfiguration eines Sets von replizierten Pods festlegen
- Services zum Erstellen interner und externer Load-Balancer für ein Set von Pods
Ziele
So stellen Sie die Anwendung auf GKE bereit und führen sie aus:- Redis-Leader einrichten
- Redis-Follower einrichten
- Web-Frontend einrichten
- Zur Website
- Web-Frontend vertikal skalieren
Das folgende Diagramm bietet einen Überblick über die Clusterarchitektur, die Sie durch Erfüllen dieser Ziele erstellen:
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert, einschließlich kubectl und gcloud CLI. Wenn Sie Cloud Shell nicht verwenden, müssen Sie die gcloud CLI installieren.
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Google Cloud Projekt erstellen oder auswählen
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
Erstellen Sie ein Projekt in Google Cloud :
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch Ihren Google Cloud Projektnamen.
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die GKE API, falls sie noch nicht aktiviert ist:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable container.googleapis.com
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Google Cloud Projekt erstellen oder auswählen
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
Erstellen Sie ein Projekt in Google Cloud :
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch Ihren Google Cloud Projektnamen.
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die GKE API, falls sie noch nicht aktiviert ist:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable container.googleapis.com
Umgebung vorbereiten
So richten Sie Ihre Umgebung ein:
Legen Sie Umgebungsvariablen fest:
export PROJECT_ID=PROJECT_ID export COMPUTE_LOCATION=COMPUTE_LOCATIONErsetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID in Google CloudCOMPUTE_LOCATION: ein Compute Engine-Standort, z. B.us-central1.
Klonen Sie das GitHub-Repository:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesWechseln Sie in das Arbeitsverzeichnis:
cd kubernetes-engine-samples/quickstarts/guestbook/
GKE-Cluster erstellen
Autopilot- oder Standard-GKE-Cluster erstellen:
Autopilot
gcloud container clusters create-auto guestbook \
--location=${COMPUTE_LOCATION} \
Standard
gcloud container clusters create guestbook \
--location=${COMPUTE_LOCATION} \
--num-nodes=4
Mit dem Cluster verbinden
Konfigurieren Sie kubectl für die Kommunikation mit dem Cluster:
gcloud container clusters get-credentials guestbook \
--location=${COMPUTE_LOCATION}
Redis-Leader einrichten
Die Anwendung nutzt Redis zur Datenspeicherung. Die Anwendung schreibt Daten auf eine Redis-Leader-Instanz und verwendet mehrere Redis-Follower-Instanzen zum Lesen von Daten.
Das folgende Manifest beschreibt ein Kubernetes-Deployment, das ein Einzel-Replikat-Redis-Leader-Pod ausführt:
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f redis-leader-deployment.yamlPrüfen Sie, ob der Redis-Leader-Pod ausgeführt wird:
kubectl get podsDie Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE redis-leader-343230949-qfvrq 1/1 Running 0 43sEs kann einige Minuten dauern, bis
STATUSvonPendinginRunninggeändert wird.
Redis-Leader-Service erstellen
Die Webanwendung muss mit dem Redis-Leader kommunizieren, um die Daten zu schreiben. Sie können einen Service erstellen, um den Traffic an den Redis-Leader-Pod weiterzuleiten.
Ein Dienst ist eine Kubernetes-Abstraktion, die eine logische Gruppe von Pods und eine Richtlinie für den Zugriff auf die Pods definiert. Wenn Sie einen Dienst erstellen, beschreiben Sie anhand von Pod-Labels, welche Pods als Proxy verwendet werden sollen.
Das folgende Manifest beschreibt einen Dienst für den Redis-Leader:
Dieses Manifest enthält eine Reihe von Labelauswahlen. Diese Label entsprechen jenen, die im letzten Schritt bereitgestellt wurden. Deshalb leitet dieser Dienst den Netzwerktraffic an den Redis-Leader-Pod weiter, der in einem vorherigen Schritt erstellt wurde.
Im Abschnitt
portsdes Manifests wird eine einzelne Portzuordnung deklariert. Der Dienst leitet den Traffic überport: 6379zumtargetPort: 6379der Container weiter, die den spezifiziertenselector-Labels entsprechen. DiecontainerPort, die in der Bereitstellung verwendet wird, muss mit dertargetPortübereinstimmen, um Traffic an die Bereitstellung weiterzuleiten.Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f redis-leader-service.yamlPrüfen Sie, ob GKE den Dienst erstellt hat:
kubectl get serviceDie Ausgabe sieht in etwa so aus:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.51.240.1 <none> 443/TCP 42s redis-leader 10.51.242.233 <none> 6379/TCP 12s
Redis-Follower einrichten
Auch wenn es sich beim Redis-Leader um einen einzelnen Pod handelt, können Sie ihn durch das Hinzufügen einiger Redis-Follower oder -Replikate hochverfügbar machen und damit so anpassen, dass er den Traffic bewältigt.
Das folgende Manifest beschreibt ein Deployment für die Redis-Follower-Pods:
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f redis-follower-deployment.yamlPrüfen Sie, ob die beiden Redis-Follower-Replikate ausgeführt werden:
kubectl get podsDie Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE redis-follower-76588f55b7-bnsq6 1/1 Running 0 27s redis-follower-76588f55b7-qvtws 1/1 Running 0 27s redis-leader-dd446dc55-kl7nl 1/1 Running 0 119sEs kann einige Minuten dauern, bis
STATUSvonPendinginRunninggeändert wird.
Redis-Follower-Service erstellen
Die Webanwendung muss mit den Redis-Followern kommunizieren, um Daten zu lesen. Damit die Redis-Follower gefunden werden können, müssen Sie einen weiteren Service einrichten.
Das folgende Manifest beschreibt einen Dienst für den Redis-Follower:
Dieses Manifest gibt an, dass der Dienst auf Port 6379 ausgeführt wird. Das Feld
selectordes Dienstes entspricht den Redis-Follower-Pods, die im vorherigen Schritt erstellt wurden.Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f redis-follower-service.yamlPrüfen Sie, ob GKE den Dienst erstellt hat:
kubectl get serviceDie Ausgabe sieht in etwa so aus:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.51.240.1 <none> 443/TCP 1m redis-leader 10.51.242.233 <none> 6379/TCP 49s redis-follower 10.51.247.238 <none> 6379/TCP 3s
Web-Frontend der Anwendung einrichten
Nachdem Sie nun Redis-Speicher für Ihre Anwendung haben, starten Sie die Webserver. Wie bei den Redis-Follower wird das Frontend mithilfe eines Kubernetes-Deployments bereitgestellt.
Die Webanwendung verwendet ein PHP-Frontend, das so konfiguriert ist, dass es je nach Art der Anfrage (Lesen oder Schreiben) entweder mit den Redis-Follower- oder den Redis-Leader-Diensten kommuniziert. Das Frontend stellt eine JSON-Schnittstelle bereit und bietet eine jQuery-Ajax-basierte UX.
Das folgende Manifest beschreibt ein Deployment für den Webserver:
In der Manifestdatei wird die Umgebungsvariable
GET_HOSTS_FROM=dnsangegeben. Wenn Sie die Konfiguration für die Web-Frontend-Anwendung bereitstellen, verwendet die Frontend-Anwendung die Hostnamenredis-followerundredis-leader, um einen DNS-Lookup durchzuführen. Der DNS-Lookup ermittelt die IP-Adressen der Services, die Sie in den vorherigen Schritten erstellt haben. Dieses Konzept heißt DNS-Diensterkennung.Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f frontend-deployment.yamlPrüfen Sie, ob die Replikate ausgeführt werden:
kubectl get pods -l app=guestbook -l tier=frontendDie Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE frontend-7b78458576-8kp8s 1/1 Running 0 37s frontend-7b78458576-gg86q 1/1 Running 0 37s frontend-7b78458576-hz87g 1/1 Running 0 37s
Frontend über eine externe IP-Adresse bereitstellen
In der aktuellen Konfiguration sind die Services redis-follower und redis-leader, die Sie in den vorherigen Schritten erstellt haben, nur im GKE-Cluster zugänglich, da der Standardtyp für einen Dienst ClusterIP ist.
Ein ClusterIP-Dienst stellt eine einzelne IP-Adresse für die Gruppe von Pods bereit, auf die der Dienst verweist. Diese IP-Adresse ist nur innerhalb des Clusters zugänglich.
Wenn Sie den Web-Frontend-Dienst extern zugänglich machen möchten, können Sie je nach Bedarf type: LoadBalancer oder type: NodePort in der Dienstkonfiguration angeben.
Das folgende Manifest beschreibt einen Service vom Typ LoadBalancer.
In der Portdeklaration im Abschnitt ports ist port: 80 spezifiziert und targetPort ist nicht spezifiziert. Wenn Sie die Eigenschaft targetPort weglassen, wird standardmäßig der Wert im Feld port verwendet. In diesem Fall leitet der Service den externen Traffic über Port 80 an Port 80 der Container im frontend-Deployment weiter.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f frontend-service.yaml
Beim Erstellen des Service frontend generiert GKE einen Load-Balancer und eine externe IP-Adresse. Diese Ressourcen unterliegen der Abrechnung.
Website der Anwendung besuchen
Rufen Sie die externe IP-Adresse des frontend-Dienstes ab, um auf die Website der Anwendung zuzugreifen:
kubectl get service frontend
Die Ausgabe sieht in etwa so aus:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend 10.51.242.136 109.197.92.229 80:32372/TCP 1m
In der Spalte EXTERNAL-IP kann <pending> angezeigt werden, während der Load Balancer erstellt wird. Dieser Vorgang kann einige Minuten dauern. Wenn Sie Fehler wie Does not have minimum availability sehen, warten Sie einige Minuten. Dieser temporäre Fehler tritt auf, weil GKE die Knoten neu erstellt, um die Änderungen vorzunehmen.
Kopieren Sie die IP-Adresse und öffnen Sie die Seite in Ihrem Browser:

Schreiben Sie Einträge durch Eingabe einer Nachricht und klicken Sie auf Senden. Die eingegebene Nachricht wird im Frontend angezeigt. Diese Meldung gibt an, dass Daten über die von Ihnen erstellten Dienste erfolgreich zu Redis hinzugefügt wurden.
Web-Frontend vertikal skalieren
Angenommen, Ihre Anwendung wird schon seit einiger Zeit ausgeführt und erhält plötzlich viel Aufmerksamkeit. Sie entschließen sich dazu, weitere Webserver Ihrem Frontend hinzuzufügen. Dazu können Sie die Anzahl der Pods erhöhen.
Anzahl der
frontend-Pods hochskalieren:kubectl scale deployment frontend --replicas=5Die Ausgabe sieht in etwa so aus:
deployment.extensions/frontend scaledPrüfen Sie die Anzahl der ausgeführten Replikate:
kubectl get podsDie Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE frontend-88237173-3s3sc 1/1 Running 0 1s frontend-88237173-twgvn 1/1 Running 0 1s frontend-88237173-5p257 1/1 Running 0 23m frontend-88237173-84036 1/1 Running 0 23m frontend-88237173-j3rvr 1/1 Running 0 23m redis-leader-343230949-qfvrq 1/1 Running 0 54m redis-follower-132015689-dp23k 1/1 Running 0 37m redis-follower-132015689-xq9v0 1/1 Running 0 37mSie können die Anzahl der
frontend-Pods mit demselben Befehl herunterskalieren. Ersetzen Sie dazu5durch1.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Google Cloud -Projekt löschen:
gcloud projects delete PROJECT_ID
Einzelne Ressourcen löschen
Wenn Sie ein vorhandenes Projekt verwendet haben und es nicht löschen möchten, können Sie die einzelnen Ressourcen löschen.
So löschen Sie den Dienst
frontend:kubectl delete service frontendLöschen Sie den GKE-Cluster:
gcloud container clusters delete guestbook