Anwendung in einem GKE-Cluster bereitstellen


In dieser Kurzanleitung stellen Sie eine einfache Webserver-Containeranwendung in einem Google Kubernetes Engine-Cluster (GKE) bereit. Sie erfahren, wie Sie einen Cluster erstellen und die Anwendung im Cluster bereitstellen, damit Nutzer darauf zugreifen können.

In dieser Kurzanleitung werden Grundkenntnisse in Kubernetes vorausgesetzt.

Hinweis

Führen Sie folgende Schritte aus, um die Kubernetes Engine API zu aktivieren:
  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Google Kubernetes Engine APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry and Google Kubernetes Engine APIs.

    Enable the APIs

Cloud Shell starten

In dieser Anleitung verwenden Sie Cloud Shell, eine Shell-Umgebung für die Verwaltung von Ressourcen, die in Google Cloud gehostet werden.

Die Google Cloud CLI und das kubectl-Befehlszeilentool sind in Cloud Shell vorinstalliert. Die gcloud CLI ist die primäre Befehlszeile für Google Cloud und kubectl ist die primäre Befehlszeile zum Ausführen von Befehlen für Kubernetes-Cluster.

Cloud Shell aufrufen

  1. Öffnen Sie die Google Cloud Console.

    Google Cloud Console

  2. Klicken Sie in der oberen rechten Ecke der Console auf die Schaltfläche Cloud Shell aktivieren:

In einem Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet. In dieser Shell führen Sie gcloud- und kubectl-Befehle aus. Bevor Sie Befehle ausführen, legen Sie Ihr Standardprojekt in der Google Cloud CLI mit dem folgenden Befehl fest:

gcloud config set project PROJECT_ID

Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

GKE-Cluster erstellen

Ein Cluster besteht aus mindestens einer Maschine mit der Cluster-Steuerungsebene und mehreren Worker-Maschinen, die Knoten genannt werden. Knoten sind Compute Engine-VM-Instanzen, auf denen die erforderlichen Kubernetes-Prozesse ausgeführt werden, um die Knoten in den Cluster einzubinden. In diesem Fall stellen Sie Anwendungen für Cluster bereit und die Anwendungen werden auf den Knoten ausgeführt.

Erstellen Sie einen Autopilot-Cluster mit dem Namen hello-cluster:

gcloud container clusters create-auto hello-cluster \
    --location=us-central1

Authentifizierungsdaten für den Cluster abrufen

Nach dem Erstellen des Clusters müssen Sie Anmeldedaten für die Authentifizierung abrufen, damit Sie mit dem Cluster interagieren können.

gcloud container clusters get-credentials hello-cluster \
    --location us-central1

Mit diesem Befehl wird kubectl für die Verwendung des von Ihnen erstellten Clusters konfiguriert.

Anwendung im Cluster bereitstellen

Nachdem Sie einen Cluster erstellt haben, können Sie eine containerisierte Anwendung bereitstellen. Für diese Kurzanleitung können Sie unsere Beispielwebanwendung hello-app bereitstellen.

GKE verwendet Kubernetes-Objekte, um die Clusterressourcen zu erstellen und zu verwalten. Kubernetes stellt das Deployment für die Bereitstellung zustandsloser Anwendungen wie Webserver bereit. Über Dienstobjekte werden Regeln und das Load Balancing für den Zugriff auf Ihre Anwendung über das Internet festgelegt.

Deployment erstellen

Zum Ausführen von hello-app in Ihrem Cluster müssen Sie die Anwendung mit folgendem Befehl bereitstellen:

kubectl create deployment hello-server \
    --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Der Kubernetes-Befehl kubectl create deployment erstellt ein Deployment namens hello-server. Der Pod des Deployments führt das Container-Image hello-app aus.

Dabei gilt:

  • --image gibt das bereitzustellende Container-Image an. In diesem Fall ruft der Befehl das Beispiel-Image aus einem Artifact Registry-Repository (us-docker.pkg.dev/google-samples/containers/gke/hello-app) ab. :1.0 gibt die jeweils abzurufende Image-Version an. Wenn Sie keine Version angeben, wird das Image mit dem latestStandard-Tag verwendet.

Deployment freigeben

Nach dem Deployment der Anwendung müssen Sie sie für das Internet freigeben, damit Nutzer darauf zugreifen können. Sie können Ihre Anwendung bereitstellen, indem Sie einen Dienst erstellen, eine Kubernetes-Ressource, die Ihre Anwendung für externen Datenverkehr verfügbar macht.

Führen Sie den folgenden kubectl expose-Befehl aus, um die Anwendung freizugeben:

kubectl expose deployment hello-server \
    --type LoadBalancer \
    --port 80 \
    --target-port 8080

Wenn Sie das Flag --type LoadBalancer übergeben, wird ein Compute Engine-Load-Balancer für den Container erstellt. Das Flag --port initialisiert den öffentlichen Port 80 für das Internet und das Flag --target-port leitet den Traffic zu Port 8080 der Anwendung weiter.

Load-Balancer werden nach den Preisen für Load-Balancing von Compute Engine berechnet.

Anwendung prüfen und ansehen

  1. Sehen Sie sich die ausgeführten Pods mit kubectl get pods an:

    kubectl get pods
    

    Auf dem Cluster müsste ein hello-server-Pod ausgeführt werden.

  2. Sehen Sie sich den Dienst hello-server mit kubectl get service an:

    kubectl get service hello-server
    

    Kopieren Sie in der Ausgabe dieses Befehls die externe IP-Adresse aus der Spalte EXTERNAL-IP.

  3. Rufen Sie die Anwendung in Ihrem Webbrowser auf. Geben Sie dazu die externe IP-Adresse mit dem freigegebenen Port ein:

    http://EXTERNAL_IP
    

Sie haben gerade eine Container-Webanwendung in GKE bereitgestellt.

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

  1. Löschen Sie den Dienst der Anwendung mit kubectl delete:

    kubectl delete service hello-server
    

    Dieser Befehl löscht den Compute Engine-Load-Balancer, den Sie beim Freigeben des Deployments erstellt haben.

  2. Löschen Sie den Cluster mit gcloud container clusters delete:

    gcloud container clusters delete hello-cluster \
        --location us-central1
    

Optional: hello-app-Codeüberprüfung

hello-app ist eine einfache Webserveranwendung, die aus zwei Dateien besteht: main.go und einem Dockerfile.

hello-app ist als Docker-Container-Image verpackt. Container-Images werden in einer beliebigen Docker-Image-Registry wie Artifact Registry gespeichert. Wir hosten hello-app in einem Artifact Registry-Repository unter us-docker.pkg.dev/google-samples/containers/gke/hello-app.

main.go

main.go ist eine Webserverimplementierung, die in der Programmiersprache Go geschrieben wurde. Der Server antwortet auf jede HTTP-Anfrage mit der Nachricht "Hello, world!".

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// register hello function to handle all requests
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)

	// use PORT environment variable, or default to 8080
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Dockerfile

Dockerfile beschreibt das Image, das Docker erstellen soll, einschließlich aller seiner Ressourcen und Abhängigkeiten. Außerdem ist dort angegeben, welchen Netzwerkport die Anwendung freigeben soll. Weitere Informationen zur Funktionsweise dieser Datei finden Sie in der Docker-Dokumentation unter Dockerfile reference.

FROM golang:1.21.0 as builder
WORKDIR /app
RUN go mod init hello-app
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o /hello-app

FROM gcr.io/distroless/base-debian11
WORKDIR /
COPY --from=builder /hello-app /hello-app
ENV PORT 8080
USER nonroot:nonroot
CMD ["/hello-app"]

Nächste Schritte

Überzeugen Sie sich selbst

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit von GKE 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.

GKE kostenlos testen