Anwendung in einem Container-Image in einem GKE-Cluster bereitstellen
Diese Seite enthält Anleitungen für Folgendes:
- Eine Hello-World-Anwendung erstellen.
- Die Anwendung mit Cloud Build in einem Container-Image verpacken.
- Einen Cluster in Google Kubernetes Engine (GKE) erstellen.
- Das Container-Image in Ihrem Cluster bereitstellen.
Es wird gezeigt, wie Sie das Beispiel mit verschiedenen Sprachen ausführen können. Sie können es jedoch auch mit Sprachen ausführen, die hier nicht behandelt werden.
Eine detaillierte Anleitung zu dieser Aufgabe finden Sie direkt im Cloud Shell-Editor. Klicken Sie dazu einfach auf Anleitung:
Die folgenden Abschnitte führen Sie durch dieselben Schritte wie das Klicken auf Anleitung.
Hinweis
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie 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.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Artifact Registry, Cloud Build, and Google Kubernetes Engine APIs aktivieren.
- Installieren und initialisieren Sie Google Cloud CLI.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Artifact Registry, Cloud Build, and Google Kubernetes Engine APIs aktivieren.
- Installieren und initialisieren Sie Google Cloud CLI.
-
kubectl
wird zur Verwaltung von Kubernetes verwendet, dem Cluster-Orchestrierungssystem von GKE. Sie könnenkubectl
mithilfe vongcloud
installieren:gcloud components install kubectl
Beispielanwendung schreiben
Eine Anleitung zum Erstellen einer Hello-World-Anwendung, die auf GKE ausgeführt wird, erhalten Sie, wenn Sie auf Ihre Sprache klicken:
Go
Erstellen Sie ein neues Verzeichnis mit dem Namen
helloworld-gke
und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:mkdir helloworld-gke cd helloworld-gke
Erstellen Sie ein neues Modul namens
example.com/helloworld
:go mod init example.com/helloworld
Erstellen Sie eine neue Datei mit dem Namen
helloworld.go
und fügen Sie den folgenden Code in diese ein:Mit diesem Code wird ein Webserver erstellt, der den von der Umgebungsvariable
PORT
definierten Port überwacht.
Die Anwendung ist jetzt fertig und kann in einem Docker-Container verpackt und dann in Artifact Registry hochgeladen werden.
Node.js
Erstellen Sie ein neues Verzeichnis mit dem Namen
helloworld-gke
und wechseln Sie dorthin:mkdir helloworld-gke cd helloworld-gke
Erstellen Sie eine
package.json
-Datei mit folgendem Inhalt:Erstellen Sie im selben Verzeichnis eine
index.js
-Datei und kopieren Sie die folgenden Zeilen hinein:Mit diesem Code wird ein Webserver erstellt, der den von der Umgebungsvariable
PORT
definierten Port überwacht.
Die Anwendung ist jetzt fertig und kann in einem Docker-Container verpackt und in Artifact Registry hochgeladen werden.
Python
Erstellen Sie ein neues Verzeichnis mit dem Namen
helloworld-gke
und wechseln Sie dorthin:mkdir helloworld-gke cd helloworld-gke
Erstellen Sie eine Datei mit dem Namen
app.py
und fügen Sie dort den folgenden Code ein:
Java
Erstellen Sie eine Spring Boot-Anwendung.
Installieren Sie das Java SE Development Kit Version 8 oder höher und cURL. Java SE und cURL sind nur erforderlich, um das neue Webprojekt im nächsten Schritt zu erstellen. Das weiter unten beschriebene Dockerfile lädt alle Abhängigkeiten in den Container.
Erstellen Sie über Ihr Terminal ein neues, leeres Webprojekt:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d javaVersion=1.8 \ -d bootVersion=2.6.6 \ -d name=helloworld \ -d artifactId=helloworld \ -d baseDir=helloworld-gke \ -o helloworld-gke.zip unzip helloworld-gke.zip cd helloworld-gke
Sie haben jetzt ein neues Spring Boot-Projekt in
helloworld-gke
.Aktualisieren Sie in der Datei
src/main/java/com/example/helloworld/HelloworldApplication.java
die KlasseHelloworldApplication
durch Hinzufügen eines@RestController
zur Verarbeitung der/
-Zuordnung.Mit diesem Code wird ein Webserver erstellt, der den von der Umgebungsvariable
PORT
definierten Port überwacht.
Die Anwendung ist jetzt fertig und kann in einem Docker-Container verpackt und dann in Artifact Registry hochgeladen werden.
C#
Installieren Sie das .NET Core SDK 2.2. Das .NET Core SDK ist nur zum Erstellen des neuen Webprojekts im nächsten Schritt erforderlich. Der weiter unten beschriebene
Dockerfile
lädt alle Abhängigkeiten in den Container.Erstellen Sie über Ihr Terminal ein neues, leeres Webprojekt:
dotnet new web -o helloworld-gke
Ändern Sie das Verzeichnis in
helloworld-gke
.Aktualisieren Sie die Definition
CreateWebHostBuilder
inProgram.cs
. Dazu geben Sie die Port-URL für.UseUrls()
an, um den Bereitstellungsport zu definieren. Im Beispiel wurde Port8080
verwendet, aber Sie können auch andere Ports verwenden. Ihr Server muss den hier angegebenen Port überwachen:
Die Anwendung ist jetzt fertig und kann in einem Docker-Container verpackt und dann in Artifact Registry hochgeladen werden.
PHP
Erstellen Sie ein neues Verzeichnis mit dem Namen
helloworld-gke
und wechseln Sie dorthin:mkdir helloworld-gke cd helloworld-gke
Erstellen Sie eine Datei mit dem Namen
index.php
und fügen Sie dort den folgenden Code ein:
Die Anwendung ist jetzt fertig und kann in einem Docker-Container verpackt und dann in Artifact Registry hochgeladen werden.
Ruby
Erstellen Sie ein neues Verzeichnis mit dem Namen
helloworld-gke
und wechseln Sie dorthin:mkdir helloworld-gke cd helloworld-gke
Erstellen Sie eine Datei mit dem Namen
app.rb
und fügen Sie dort den folgenden Code ein:Mit diesem Code wird ein Webserver erstellt, der den von der Umgebungsvariable
PORT
definierten Port überwacht.Erstellen Sie eine Datei namens
Gemfile
und kopieren Sie Folgendes hinein:
Anwendung mit Cloud Build containerisieren
Erstellen Sie zum Containerisieren der Beispielanwendung in dem Verzeichnis, in dem sich die Quelldateien befinden, eine neue Datei namens
Dockerfile
und kopieren Sie den folgenden Inhalt hinein:Go
Node.js
Fügen Sie eine weitere
.dockerignore
-Datei hinzu, um dafür zu sorgen, dass lokale Dateien keine Auswirkungen auf den Build-Prozess des Containers haben:Python
Fügen Sie eine
.dockerignore
-Datei hinzu, um dafür zu sorgen, dass lokale Dateien keine Auswirkungen auf den Build-Prozess des Containers haben:Java
C#
Fügen Sie eine
.dockerignore
-Datei hinzu, um dafür zu sorgen, dass lokale Dateien keine Auswirkungen auf den Build-Prozess des Containers haben:PHP
Fügen Sie eine
.dockerignore
-Datei hinzu, um dafür zu sorgen, dass lokale Dateien keine Auswirkungen auf den Build-Prozess des Containers haben:Ruby
Rufen Sie Ihre Google Cloud-Projekt-ID ab:
gcloud config get-value project
In dieser Kurzanleitung speichern Sie den Container in Artifact Registry und stellen ihn aus der Registry in Ihrem Cluster bereit. Führen Sie den folgenden Befehl aus, um ein Repository mit dem Namen
hello-repo
in derselben Region wie der Cluster zu erstellen:gcloud artifacts repositories create hello-repo \ --project=PROJECT_ID \ --repository-format=docker \ --location=LOCATION \ --description="Docker repository"
Ersetzen Sie die folgenden Werte:
PROJECT_ID
ist Ihre Google Cloud-Projekt-ID.LOCATION
ist der Speicherort für das Repository, z. B.us-west1
. Im nächsten Abschnitt erstellen Sie den Cluster für die Bereitstellung des Container-Images in derselben Region.Führen Sie den folgenden Befehl aus, um eine Liste der verfügbaren Standorte aufzurufen:
gcloud artifacts locations list
Erstellen Sie das Container-Image mithilfe von Cloud Build. Dies ähnelt dem Ausführen von
docker build
unddocker push
, der Build wird aber in Google Cloud ausgeführt:gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke .
Das Image wird in Container Registry gespeichert.
GKE-Cluster erstellen
Ein GKE-Cluster ist ein verwalteter Satz von Compute Engine-VMs, die als ein GKE-Cluster genutzt werden. Je nachdem, welchen Betriebsmodus Sie in GKE verwenden möchten, geben Sie beim Erstellen eines Clusters eine Standardzone oder -region an. Wenn Sie den Autopilot-Modus verwenden, ist Ihr Cluster regional. Legen Sie daher die Standard-Computing-Region fest. Wenn Sie den Standardmodus verwenden, ist Ihr Cluster für diese Anleitung zonal. Legen Sie dann die Standard-Computing-Zone fest.
Erstellen Sie den Cluster.
Autopilot
Ersetzen Sie
COMPUTE_REGION
durch die Google Cloud-Region, in der Sie den Cluster hosten möchten, z. B.us-west1
. Wählen Sie dieselbe Region wie in Ihrem Artifact Registry-Repository aus.gcloud container clusters create-auto helloworld-gke \ --region COMPUTE_REGION
Standard
Ersetzen Sie
COMPUTE_ZONE
durch die Google Cloud-Zone, in der Sie den Cluster hosten möchten, z. B.us-west1-a
. Wählen Sie eine Zone in derselben Region wie für Ihr Artifact Registry-Repository aus.gcloud container clusters create helloworld-gke \ --num-nodes 1 \ --zone COMPUTE_ZONE
Prüfen Sie, ob Sie auf den Cluster zugreifen können. Mit dem folgenden Befehl werden die Knoten aufgelistet, die in Ihrem Containercluster ausgeführt werden, und es wird angegeben, dass Sie Zugriff auf den Cluster haben.
kubectl get nodes
Falls Fehler auftreten, lesen Sie die Anleitung zur Fehlerbehebung in Kubernetes.
In GKE bereitstellen
Für die Bereitstellung Ihrer Anwendung in dem von Ihnen erstellten GKE-Cluster benötigen Sie zwei Kubernetes-Objekte.
- Ein Deployment zur Definition Ihrer Anwendung.
- Einen Service zum Festlegen des Zugriffs auf Ihre Anwendung.
Anwendung bereitstellen
Die Anwendung umfasst einen Front-End-Server, der die Webanfragen verarbeitet. Sie definieren die Clusterressourcen, die zum Ausführen des Front-Ends benötigt werden, in einer neuen Datei namens deployment.yaml
. Diese Ressourcen werden als Deployment bezeichnet. Sie können mithilfe von Deployments ein ReplicaSet
einschließlich der zugehörigen Pods erstellen und aktualisieren.
Erstellen Sie die Datei
deployment.yaml
im selben Verzeichnis wie Ihre anderen Dateien und kopieren Sie den folgenden Inhalt: Ersetzen Sie die folgenden Werte in Ihrer Datei:$GCLOUD_PROJECT
ist Ihre Google Cloud-Projekt-ID.$LOCATION
ist der Speicherort des Repositorys, z. B.us-west1
.
Stellen Sie die Ressource im Cluster bereit:
kubectl apply -f deployment.yaml
Verfolgen Sie den Status des Deployments:
kubectl get deployments
Das Deployment ist abgeschlossen, wenn alle verfügbaren (
AVAILABLE
) Deployments den StatusREADY
haben.NAME READY UP-TO-DATE AVAILABLE AGE hello-deployment 1/1 1 1 20s
Wenn das Deployment einen Fehler hat, führen Sie
kubectl apply -f deployment.yaml
noch einmal aus, um das Deployment mit allen Änderungen zu aktualisieren.Wenn das Deployment abgeschlossen ist, können Sie die darin erstellten Pods sehen:
kubectl get pods
Service bereitstellen
Services bieten einen zentralen Zugriffspunkt auf eine Reihe von Pods. Es ist grundsätzlich möglich, auf einen einzelnen Pod zuzugreifen. Pods sind jedoch sitzungsspezifisch und können zuverlässig nur über eine Service-Adresse aufgerufen werden. In Ihrer Hello World-Anwendung definiert der „hello“-Service einen Load-Balancer, mit dem über eine einzelne IP-Adresse auf die hello-app
-Pods zugegriffen werden kann. Dieser Service ist in der Datei service.yaml
definiert.
Erstellen Sie die Datei
service.yaml
im selben Verzeichnis, in dem sich Ihre anderen Quelldateien befinden, mit folgendem Inhalt:Die Pods werden getrennt von dem Service definiert, der die Pods verwendet. Kubernetes nutzt Labels zur Auswahl der Pods für einen Service. Mit Labels kann ein Dienst Pods von verschiedenen Replikatsätzen verwenden. Gleichzeitig besteht mit Labels die Möglichkeit, dass mehrere Dienste einen einzelnen Pod nutzen.
Erstellen Sie den Hello-World-Service:
kubectl apply -f service.yaml
Suchen Sie die externe IP-Adresse des Dienstes :
kubectl get services
Es kann bis zu 60 Sekunden dauern, bis die IP-Adresse zugeordnet ist. Die externe IP-Adresse wird unter der Spalte
EXTERNAL-IP
für denhello
-Service aufgelistet.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello LoadBalancer 10.22.222.222 35.111.111.11 80:32341/TCP 1m kubernetes ClusterIP 10.22.222.1 <none> 443/TCP 20m
Bereitgestellte Anwendung ansehen
Sie haben jetzt alle Ressourcen bereitgestellt, die zum Ausführen der Hello-World-Anwendung in GKE erforderlich sind.
Laden Sie die Anwendung mit der externen IP-Adresse aus dem vorherigen Schritt in den Webbrowser und sehen Sie sich Ihre laufende Anwendung an!
http://EXTERNAL_IP
Sie können auch einen curl
-Aufruf an die externe IP-Adresse des Dienstes ausführen:
curl EXTERNAL_IP
Die Ausgabe sieht so aus:
Hello World!
Bereinigen
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:
Ihnen werden Gebühren für die Compute Engine-Instanzen, die in Ihrem Cluster ausgeführt werden, sowie für das Container-Image in Artifact Registry berechnet.Projekt löschen
Durch das Löschen des Cloudprojekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
- Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Löschen Sie den Cluster und den Container
Wenn Sie Ihr Projekt behalten und nur die in dieser Anleitung verwendeten Ressourcen löschen möchten, dann löschen Sie den Cluster und das Image.
Führen Sie zum Löschen eines Clusters mit der Google Cloud CLI den folgenden Befehl für den von Ihnen verwendeten Modus aus:
Standard
gcloud container clusters delete helloworld-gke \
--zone COMPUTE_ZONE
Autopilot
gcloud container clusters delete helloworld-gke \
--region COMPUTE_REGION
Mit dem folgenden Befehl löschen Sie ein Image in Ihrem Artifact Registry-Repository:
gcloud artifacts docker images delete \
LOCATION-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke
Weitere Informationen
Weitere Informationen zu Kubernetes finden Sie hier:
- Weitere Informationen zur Erstellung von Clustern.
- Weitere Informationen zu Kubernetes
- Lesen Sie die Referenzdokumentation zu
kubectl
.
Weitere Informationen zur Bereitstellung in GKE finden Sie hier:
- Informationen, wie Sie eine einfache Webserveranwendung verpacken, hosten und bereitstellen.
- Eine Gästebuch-Anwendung mit Redis und PHP bereitstellen.
- Wordpress auf GKE mit Persistent Disks und Cloud SQL bereitstellen.
- Cloud Run in GKE einrichten.
Weitere Informationen zum Erstellen, Entwickeln und Ausführen von Anwendungen in GKE direkt über Ihre IDE mit Cloud Code finden Sie hier: