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.

Sie können die Schritte auf dieser Seite ausführen oder diese Kurzanleitung als Google Cloud-Schulungs-Lab ausprobieren.

Mit Lab loslegen

Hinweise

Führen Sie folgende Schritte aus, um die Kubernetes Engine API zu aktivieren:
  1. Rufen Sie in der Google Cloud Console die Seite Kubernetes Engine auf.
  2. Erstellen Sie ein Projekt oder wählen Sie eines aus.
  3. Warten Sie, bis die API und die zugehörigen Dienste aktiviert worden sind. Dieser Vorgang kann einige Minuten dauern.
  4. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

Kontingentanforderungen

Für diese Kurzanleitung benötigen Sie ein verfügbares Kontingent 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.

Shell auswählen

Sie können diese Kurzanleitung entweder in Cloud Shell oder in Ihrer lokalen Shell ausführen.

Cloud Shell ist 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.

Wenn Sie lieber Ihre lokale Shell verwenden möchten, müssen Sie die gcloud- und kubectl-Tools in Ihrer Umgebung installieren.

Cloud Shell

So starten Sie Cloud Shell:

  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.

Lokale Shell

Führen Sie die folgenden Schritte aus, um gcloud und kubectl zu installieren:

  1. Installieren Sie das Cloud SDK. Das gcloud-Befehlszeilentool ist dort enthalten.
  2. Installieren Sie nach der Installation des Cloud SDK das kubectl-Befehlszeilentool mit folgendem Befehl:

    gcloud components install kubectl

Standardeinstellungen für das gcloud-Tool konfigurieren

Mit dem gcloud-Tool können Sie zwei Standardeinstellungen konfigurieren: Ihr Standardprojekt und die Computing-Zone.

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 Computing-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.

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

Wenn Sie nach dem Konfigurieren des Standardprojekts und der Computing-Zone GKE-Ressourcen erstellen, werden diese automatisch im konfigurierten Projekt und in der konfigurierten Zone erstellt.

Standardprojekt festlegen

Führen Sie den folgenden Befehl aus und ersetzen Sie dabei project-id durch Ihre Projekt-ID:

gcloud config set project project-id

Standard-Computing-Zone festlegen

Führen Sie den folgenden Befehl aus und ersetzen Sie dabei compute-zone durch die Computing-Zone, z. B. us-west1-a:

gcloud config set compute/zone compute-zone

GKE-Cluster erstellen

Ein Cluster besteht aus mindestens einer Clustermaster-Maschine 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.

Mit dem folgenden Befehl wird ein Cluster mit einem einzelnen Knoten erstellt. Ersetzen Sie cluster-name durch den Namen Ihres Clusters:

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

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 cluster-name

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

Anwendung für den 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

Führen Sie den folgenden Befehl aus, um hello-app im Cluster auszuführen:

kubectl create deployment hello-server --image=gcr.io/google-samples/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 Container Registry-Bucket namens gcr.io/google-samples/hello-app ab. :1.0 gibt die jeweils abzurufende Image-Version an. Wenn Sie keine Version angeben, wird die neueste Version verwendet.

Bereitstellungen verfügbar machen

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. Dies ist 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.

Anwendungen prüfen und anzeigen

  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 Kurzanleitung 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 cluster-name

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 Container Registry gespeichert. Wir hosten hello-app in einem Container Registry-Bucket namens gcr.io/google-samples/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