Kurzanleitung

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. 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.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Artifact Registry and Google Kubernetes Engine APIs aktivieren.

    Aktivieren Sie die APIs

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  7. Artifact Registry and Google Kubernetes Engine APIs aktivieren.

    Aktivieren Sie die APIs

Achten Sie darauf, dass verfügbares Kontingent vorhanden ist für:

  • 1 Compute Engine-CPU in der Region Ihres Clusters
  • 1 IP-Adresse in Verwendung

In der Cloud Console können Sie Ihr verfügbares Kontingent prüfen.

Cloud Shell aufrufen

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

Die gcloud- und kubectl-Befehlszeilentools sind in Cloud Shell vorinstalliert. Das gcloud-Tool 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.

Standardeinstellungen für das gcloud-Tool festlegen

Konfigurieren Sie mit dem gcloud-Tool folgende Standardeinstellungen: Ihr Standardprojekt, die Compute-Zone und die Compute-Region.

Ihr Projekt hat eine Projekt-ID, die dessen eindeutige ID ist. Wenn Sie ein Projekt erstellen, können Sie die automatisch generierte Projekt-ID verwenden oder eine eigene erstellen.

Die Compute-Zone ist ein Standort in der Region, in der sich Ihre Cluster und deren Ressourcen befinden. Beispielsweise ist us-west1-a eine Zone in der Region us-west. Die Compute-Region ist die Region, in der sich Ihre Cluster und deren Ressourcen befinden (z. B. us-west).

Wenn Sie diese Standardeinstellungen konfigurieren, erleichtert dies die Ausführung von gcloud-Befehlen, da Sie für gcloud das Projekt und den Speicherort angeben müssen, in denen Sie arbeiten möchten. Sie können diese Einstellungen auch angeben oder Standardeinstellungen mit Flags wie --project, --zone, --region und --clusterin Ihren gcloud-Befehlen überschreiben.

Wenn Sie nach dem Konfigurieren des Standardprojekts, der Zone und der Region GKE-Ressourcen erstellen, werden die Ressourcen automatisch in diesem Projekt, dieser Zone und dieser Region erstellt.

Führen Sie in Cloud Shell folgende Schritte aus:

  1. Legen Sie das Standardprojekt fest:

    gcloud config set project PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  2. Legen Sie die Standardzone fest:

    gcloud config set compute/zone COMPUTE_ZONE
    

    Ersetzen Sie COMPUTE_ZONE durch Ihre Compute-Zone, z. B. us-west1-a.

  3. Sie müssen auch die Standardregion festlegen:

    gcloud config set compute/region COMPUTE_REGION
    

    Ersetzen Sie COMPUTE_REGION durch Ihre Compute-Region, z. B. us-west1.

GKE-Cluster erstellen

Ein Cluster besteht aus mindestens einer 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 zu einem Teil des Clusters zu machen. In diesem Fall stellen Sie Anwendungen für Cluster bereit und die Anwendungen werden auf den Knoten ausgeführt.

Um Cluster in GKE zu erstellen, müssen Sie einen Betriebsmodus auswählen: "Standard" oder "Autopilot". Wenn Sie den Standardmodus verwenden, ist der Cluster zonal (in dieser Anleitung). Wenn Sie den Autopilot-Modus verwenden, ist der Cluster regional.

Standard

Erstellen Sie einen Standardcluster mit einem Knoten mit dem Namen hello-cluster:

gcloud container clusters create hello-cluster --num-nodes=1

Autopilot

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

 gcloud container clusters create-auto hello-cluster

Es kann einige Minuten dauern, bis der Cluster erstellt ist.

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

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 enthält das Deployment-Objekt, mit dem Sie zustandslose Anwendungen wie Webserver bereitstellen können. Mit Dienstobjekten werden Regeln und das Load-Balancing für den Zugriff auf Ihre Anwendung aus dem 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 Standard-Tag latest 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
    

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.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

Weitere Informationen

Jetzt testen

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach 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