Mit Jib containerisierte Micronaut-Anwendung in Google Kubernetes Engine bereitstellen

1. Übersicht

Über Micronaut

Micronaut ist ein modernes, JVM-basiertes Full-Stack-Framework zum Erstellen modularer, leicht testbarer Mikrodienste und serverloser Anwendungen. Micronaut hat sich zum Ziel gesetzt, eine hervorragende Startzeit und einen schnellen Durchsatz bei minimalem Arbeitsspeicherbedarf zu bieten. Entwickler können Anwendungen mit Micronaut in Java, Groovy oder Kotlin entwickeln.

Micronaut bietet:

  • Schnelle Startzeit und Geringer Arbeitsspeicherverbrauch: Reflexionsbasierte IoC-Frameworks laden und speichern Reflexionsdaten für jedes Feld, jede Methode und jeden Konstruktor in Ihrem Code und speichern sie im Cache. Bei Micronaut hingegen sind die Startzeit Ihrer Anwendung und der Arbeitsspeicherverbrauch nicht an die Größe Ihrer Codebasis gebunden.
  • Deklarativer, reaktiver HTTP-Client mit Kompilierungszeit: Erstellen Sie deklarativ reaktive HTTP-Clients, die bei der Kompilierung implementiert werden, wodurch der Arbeitsspeicherverbrauch reduziert wird.
  • Nicht blockierender HTTP-Server auf Basis von Netty – Dank der reibungslosen Lernkurve des HTTP-Servers von Micronaut ist es so einfach wie möglich, APIs bereitzustellen, die von HTTP-Clients genutzt werden können.
  • Schnelle und einfache Tests – Sie können ganz einfach Server und Clients in Ihren Einheitentests einrichten und sofort ausführen.
  • Effiziente Injektion bei der Kompilierungszeit und AOP – Micronaut bietet eine einfache, aspektorientierte Programmier-API zur Kompilierungszeit, die keine Reflexion verwendet.
  • Vollständig reaktive und nicht blockierende Apps erstellen: Micronaut unterstützt jedes Framework, das reaktive Streams implementiert, einschließlich RxJava und Reactor.

Weitere Informationen finden Sie auf der Micronaut-Website.

Informationen zu Kubernetes

Kubernetes ist ein Open-Source-Projekt, das sich in vielen verschiedenen Umgebungen ausführen lässt – ob Laptop oder hochverfügbarer Cluster mit mehreren Knoten, ob öffentliche Cloud oder lokales Deployment, ob virtuelle Maschine oder Bare-Metal-Server.

In diesem Lab stellen Sie einen einfachen Groovy-basierten Micronaut-Mikrodienst in Kubernetes bereit, der auf Kubernetes Engine ausgeführt wird.

In diesem Codelab erfahren Sie, wie Sie Ihren Mikrodienst als replizierten Dienst auf Kubernetes ausführen. Sie verwenden Code, den Sie auf Ihrem Computer entwickelt haben, wandeln ihn in ein Docker-Container-Image um und führen dieses Image dann in Kubernetes Engine aus.

Im Folgenden finden Sie ein Diagramm der verschiedenen Teile in diesem Codelab, damit Sie besser verstehen, wie die einzelnen Teile zusammenpassen. Verwenden Sie es als Referenz, während Sie das Codelab durcharbeiten. Am Ende sollte alles einen Sinn ergeben (aber fürs Erste können Sie dies ignorieren).

Kubernetes-Codelab-Diagramm 1 (2).png

In diesem Codelab können Sie sich mit einer verwalteten Umgebung wie Kubernetes Engine (einer von Google gehosteten Version von Kubernetes, die auf Compute Engine ausgeführt wird) mehr auf die Arbeit mit Kubernetes konzentrieren, anstatt die zugrunde liegende Infrastruktur einzurichten.

Wenn Sie wissen möchten, wie Sie Kubernetes auf Ihrem lokalen Computer ausführen, z. B. auf einem Entwicklerlaptop, sollten Sie sich Minikube ansehen. Damit lässt sich ein Kubernetes-Cluster mit einem einzelnen Knoten zu Entwicklungs- und Testzwecken ganz einfach einrichten. Wenn Sie möchten, können Sie dieses Codelab mit Minikube durchgehen.

Über Jib

Jib ist ein Open-Source-Tool, mit dem Sie Docker- und OCI-Images für Ihre Java-Anwendungen erstellen können. Sie ist als Plug-ins für Maven und Gradle sowie als Java-Bibliothek verfügbar.

Jib möchte:

  • Schnell: Sie können Änderungen schnell bereitstellen. Jib trennt Ihre Anwendung in mehrere Schichten und teilt Abhängigkeiten von Klassen auf. Sie müssen jetzt nicht mehr darauf warten, dass Docker Ihre gesamte Java-Anwendung neu erstellt hat – stellen Sie einfach die geänderten Schichten bereit.
  • Reproduzierbar: Wenn Sie ein Container-Image mit demselben Inhalt neu erstellen, wird immer dasselbe Image generiert. Lösen Sie nie wieder ein unnötiges Update aus.
  • Daemonless: Reduzieren Sie die Befehlszeilenabhängigkeiten. Erstellen Sie das Docker-Image in Maven oder Gradle und übertragen Sie es per Push in eine Registry Ihrer Wahl. Es ist nicht mehr notwendig, Dockerfiles zu schreiben und Docker build/push aufzurufen.

Weitere Informationen zu Jib finden Sie auf der GitHub-Projektseite.

Informationen zu dieser Anleitung

In dieser Anleitung wird der Beispielcode aus dem Jib-Tool verwendet, um Container für Java-Anwendungen zu erstellen.

Das Beispiel ist ein einfacher Hello World-Dienst, der das Micronaut-Framework und die Programmiersprache Apache Groovy verwendet.

Lerninhalte

  • Einfache Java-Anwendung mit Jib als Docker-Container verpacken
  • So erstellen Sie einen Kubernetes-Cluster in Kubernetes Engine.
  • Micronaut-Dienst in Kubernetes in Kubernetes Engine bereitstellen
  • Den Dienst skalieren und ein Upgrade bereitstellen
  • So greifen Sie auf das Kubernetes Graphical-Dashboard zu.

Voraussetzungen

  • Google Cloud Platform-Projekt
  • Browser, z. B. Chrome oder Firefox
  • Erfahrung mit standardmäßigen Linux-Texteditoren wie Vim, EMACs oder Nano

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Nur bis zum Ende lesen Lies sie dir durch und absolviere die Übungen

Wie würden Sie Ihre Erfahrung mit der Erstellung von HTML/CSS-Web-Apps bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

Wie würden Sie Ihre Erfahrungen im Umgang mit Google Cloud Platform-Diensten bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie ein Konto erstellen.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird in diesem Codelab später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an einem kostenlosen Testzeitraum mit 300$Guthaben teilnehmen.

3. Micronaut-Beispielquellcode abrufen

Nach dem Start von Cloud Shell können Sie mit der Befehlszeile den Beispielquellcode in das Basisverzeichnis klonen und mit „cd“ in das Verzeichnis einfügen, das unseren Beispieldienst enthält:

$ git clone https://github.com/GoogleContainerTools/jib.git
$ cd jib/examples/micronaut/

4. Ein kurzer Blick auf den Code

Unser einfacher Mikronaut-Dienst besteht aus einem Controller, der die berüchtigte Hello World-Nachricht ausgibt:

@Controller("/hello")
class HelloController {
    @Get("/")
    String index() {
        "Hello World"
    }
}

Der HelloController-Controller antwortet auf Anfragen unter dem Pfad /hello und die Methode index() akzeptiert die HTTP GET-Anfragen.

Mithilfe der Spock lässt sich außerdem prüfen, ob die richtige Nachricht ausgegeben wird.

class HelloControllerSpec extends Specification {
    @Shared
    @AutoCleanup
    EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer)

    @Shared
    @AutoCleanup
    RxHttpClient client = embeddedServer.applicationContext.createBean(RxHttpClient, embeddedServer.getURL()) 

    void "test hello world response"() {
        when:
        HttpRequest request = HttpRequest.GET('/hello')
        String rsp  = client.toBlocking().retrieve(request)

        then:
        rsp == "Hello World"
    }
}

Dieser Test führt nicht nur einen einfachen Einheitentest, sondern auch denselben Micronaut-Serverstack aus (basierend auf dem Netty-Framework), der auch in der Produktion ausgeführt wird. Ihr Code verhält sich also im Produkt genauso wie in Ihren Tests.

Um die Tests auszuführen, können Sie den folgenden Befehl ausführen, um zu prüfen, ob alles in Ordnung ist:

./gradlew test

5. Anwendung lokal ausführen

Sie können den Micronaut-Dienst ganz normal mit dem folgenden Gradle-Befehl starten:

$ ./gradlew run

Nachdem die Anwendung gestartet wurde, können Sie über das kleine Pluszeichen eine weitere Cloud Shell-Instanz öffnen und mit curl prüfen, ob Sie die erwartete Ausgabe erhalten:

$ curl localhost:8080/hello

Nun sollte eine einfache "Hallo Welt"- angezeigt.

6. Anwendung als Docker-Container mit Jib verpacken

Als Nächstes bereiten Sie die App darauf vor, auf Kubernetes ausgeführt zu werden. Dafür nutzen wir Jib, um die harte Arbeit für uns zu erledigen, da wir Dockerfile nicht selbst bearbeiten müssen.

Führen Sie den folgenden Befehl aus, um den Container zu erstellen:

$ ./gradlew jibDockerBuild

Hier ist die Ausgabe, die Sie sehen sollten:

Tagging image with generated image reference micronaut-jib:0.1. If you'd like to specify a different tag, you can set the jib.to.image parameter in your build.gradle, or use the --im
age=<MY IMAGE> commandline flag.

Containerizing application to Docker daemon as micronaut-jib:0.1...
warning: Base image 'gcr.io/distroless/java' does not use a specific image digest - build may not be reproducible
Getting base image gcr.io/distroless/java...
Building dependencies layer...
Building resources layer...
Building classes layer...
Finalizing...

Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, example.micronaut.Application]
Loading to Docker daemon...

Built image to Docker daemon as micronaut-jib:0.1

Nachdem das Image erstellt wurde, prüfen wir, ob die Willkommensnachricht angezeigt wird. Führen Sie dazu unser Docker-Image im ersten Tab von Cloud Shell aus:

$ docker run -it -p 8080:8080 micronaut-jib:0.1
16:57:20.255 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [cloud, gcp]
16:57:23.203 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 2926ms. Server Running: http://97b7d76ccf3f:8080

Da unser Dienst ausgeführt wird, können wir nun den curl-Befehl in unserem zweiten Cloud Shell-Tab starten, um zu sehen, ob er wie erwartet funktioniert:

$ curl localhost:8080/hello
Hello World

Sie können den Container beenden, indem Sie in Cloud Shell Ctrl+C drücken.

7. Containerdienst in die Registry übertragen

Wenn das Image nun wie vorgesehen funktioniert, können Sie es in die Google Container Registry übertragen. Dies ist ein privates Repository für Ihre Docker-Images, auf die von jedem Google Cloud-Projekt aus (aber auch von außerhalb der Google Cloud Platform) zugegriffen werden kann.

Bevor Sie Daten in die Registry hochladen können, sollten Sie überprüfen, ob Container Registry für Ihr Projekt aktiviert ist. Rufen Sie dazu Tools > Container Registry Wenn sie nicht aktiviert ist, sollte das folgende Dialogfeld angezeigt werden. Klicken Sie darin auf Container Registry API aktivieren. um sie zu aktivieren:

ac812e6260ac7dfb.png

Sobald die Registry bereit ist, führen Sie die folgenden Befehle aus, um das Image in die Registry hochzuladen:

$ gcloud auth configure-docker
$ docker tag micronaut-jib:0.1 \
         gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1
$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1

Mit den obigen Befehlen kann das gcloud SDK Docker konfigurieren und autorisieren, Images per Push-Befehl an Ihre Container Registry-Instanz zu übertragen, das Image so zu taggen, dass es auf seinen Speicherort in der Registry verweist, und es dann per Push in die Registry zu übertragen.

Wenn alles in Ordnung ist, sollte das Container-Image nach kurzer Zeit in der Konsole angezeigt werden: Tools > Container Registry Ihnen steht nun ein Docker-Image für das gesamte Projekt zur Verfügung, das sich mit Kubernetes aufrufen und orchestrieren lässt, wie Sie gleich sehen werden.

12224c4e42183b4e.png

8. Cluster erstellen

Sie können jetzt Ihren Kubernetes Engine-Cluster erstellen. Gehen Sie vorher in der Webkonsole zum Abschnitt „Google Kubernetes Engine“ und warten Sie, bis das System initialisiert wurde. Das sollte nur wenige Sekunden dauern.

20c0587c0108b8ba.png

Ein Cluster besteht aus einem von Google verwalteten Kubernetes Master API-Server und einer Reihe von Worker-Knoten. Bei den Worker-Knoten handelt es sich um virtuelle Compute Engine-Maschinen. Erstellen Sie nun mit der gcloud-Befehlszeile aus Ihrer Cloud Shell-Sitzung einen Cluster mit zwei n1-standard-1-Knoten. Das kann einige Minuten dauern:

$ gcloud container clusters create hello-cluster \
  --num-nodes 2 \
  --machine-type n1-standard-1 \
  --zone us-central1-c

Am Ende sollten Sie den erstellten Cluster sehen.

Creating cluster hello-cluster in us-central1-c...done.
Created [https://container.googleapis.com/v1/projects/mn-gke-test/zones/us-central1-c/clusters/hello-cluster].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-c/hello-cluster?project=mn-gke-test
kubeconfig entry generated for hello-cluster.
NAME           LOCATION       MASTER_VERSION  MASTER_IP       MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
hello-cluster  us-central1-c  1.9.7-gke.7     35.239.224.115  n1-standard-1  1.9.7-gke.7   2          RUNNING

Sie sollten jetzt einen voll funktionsfähigen Kubernetes-Cluster haben, der von Google Kubernetes Engine bereitgestellt wird:

d9e1e314769753e7.png

Und nun stellen Sie Ihre eigene containerisierte Anwendung auf den Kubernetes-Clustern bereit. Ab jetzt verwenden Sie die kubectl-Befehlszeile, die bereits in Ihrer Cloud Shell-Umgebung eingerichtet ist. Für den Rest dieses Codelabs müssen sowohl der Kubernetes-Client als auch die Serverversion 1.2 oder höher sein. kubectl version zeigt Ihnen die aktuelle Version des Befehls an.

9. Anwendung in Kubernetes bereitstellen

Mit einem Kubernetes-Deployment können Sie mithilfe des gerade erstellten Container-Images mehrere Instanzen Ihrer Anwendung erstellen, verwalten und skalieren. Lassen Sie uns mit dem Befehl kubectl create deployment ein Deployment Ihrer Anwendung in Kubernetes erstellen:

$ kubectl create deployment hello-micronaut \
  --image=gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1

Führen Sie einfach den folgenden Befehl aus, um die soeben erstellte Bereitstellung anzuzeigen:

$ kubectl get deployments
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-micronaut   1         1         1            1           5m

Führen Sie den folgenden Befehl aus, um die von der Bereitstellung erstellten Anwendungsinstanzen aufzurufen:

$ kubectl get pods
NAME                               READY     STATUS    RESTARTS   AGE
hello-micronaut-5647fb98c5-lh5h7   1/1       Running   0          5m

Zu diesem Zeitpunkt sollte Ihr Container unter der Kontrolle von Kubernetes ausgeführt werden, Sie müssen ihn aber noch für die Außenwelt zugänglich machen.

10. Externen Traffic zulassen

Standardmäßig kann nur die interne IP innerhalb des Clusters auf den Pod zugreifen. Damit der hello-micronaut-Container von außerhalb des virtuellen Kubernetes-Netzwerks zugänglich ist, muss der Pod als Kubernetes-Dienst verfügbar gemacht werden.

Über Cloud Shell können Sie den Pod mit dem Befehl kubectl expose und dem Flag --type=LoadBalancer für das öffentliche Internet freigeben. Dieses Flag wird für die Erstellung einer extern zugänglichen IP benötigt:

$ kubectl expose deployment hello-micronaut --type=LoadBalancer --port=8080

Das in diesem Befehl verwendete Flag gibt an, dass Sie das Lastenausgleichsmodul verwenden, das von der zugrunde liegenden Infrastruktur bereitgestellt wird (in diesem Fall das Lastenausgleichsmodul von Compute Engine). Hinweis: Sie machen das Deployment und nicht den Pod direkt verfügbar. Als Folge führt der resultierende Dienst den Traffic-Lastenausgleich für alle vom Deployment verwalteten Pods durch (in diesem Fall nur für einen Pod, später werden jedoch weitere Replikate hinzugefügt).

Der Kubernetes-Master erstellt den Lastenausgleich und die zugehörigen Compute Engine-Weiterleitungsregeln, Zielpools und Firewallregeln, um den Dienst von außerhalb der Google Cloud Platform vollständig zugänglich zu machen.

Wenn Sie die öffentlich zugängliche IP-Adresse des Dienstes ermitteln möchten, fordern Sie einfach kubectl an, um alle Clusterdienste aufzulisten:

$ kubectl get services
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
hello-micronaut   LoadBalancer   10.39.243.251   aaa.bbb.ccc.ddd 8080:30354/TCP   1m
kubernetes        ClusterIP      10.39.240.1     <none>          443/TCP          31m

Beachten Sie, dass für Ihren Dienst zwei IP-Adressen aufgeführt sind, die beide Port 8080 bedienen. Eine davon ist die interne IP, die nur in Ihrem virtuellen Cloudnetzwerk sichtbar ist. Die andere ist die externe Load-Balancer-IP. In diesem Beispiel lautet die externe IP-Adresse aaa.bbb.ccc.ddd.

Sie sollten den Dienst jetzt erreichen können, indem Sie Ihren Browser auf diese Adresse verweisen: http://<EXTERNAL_IP>:8080/hello

11. Dienst skalieren

Eine der leistungsstarken Funktionen von Kubernetes ist die einfache Skalierbarkeit Ihrer Anwendung. Angenommen, Sie benötigen plötzlich mehr Kapazität für Ihre Anwendung. können Sie den Replikations-Controller einfach anweisen, eine neue Anzahl von Replikaten für Ihre Anwendungsinstanzen zu verwalten:

$ kubectl scale deployment hello-micronaut --replicas=3
deployment.extensions "hello-micronaut" scaled

$ kubectl get deployment
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-micronaut   3         3         3            3           16m

Beachten Sie hier den deklarativen Ansatz. Anstatt neue Instanzen zu starten oder zu beenden, geben Sie an, wie viele Instanzen gleichzeitig ausgeführt werden sollen. Die Abgleichsschleifen von Kubernetes sorgen einfach dafür, dass die Realität Ihren Anforderungen entspricht, und ergreifen bei Bedarf Maßnahmen.

12. Upgrade für Ihren Dienst bereitstellen

Früher oder später sind für die Anwendung, die Sie für die Produktion bereitgestellt haben, Fehlerbehebungen oder zusätzliche Funktionen erforderlich. Kubernetes unterstützt Sie bei dem Deployment einer neuen Version für die Produktion, ohne Ihre Nutzer zu beeinträchtigen.

Ändern wir zuerst die Anwendung. Öffnen Sie den Code-Editor von Cloud Shell.

5aee8f3d1e003571.png

Rufen Sie /jib/examples/micronaut/src/main/groovy/example/micronaut/HelloController.groovy auf und aktualisieren Sie den Wert der Antwort:

@Controller("/hello")
class HelloController {
    @Get("/")
    String index() {
        "Hello Kubernetes World"
    }
}

In /jib/examples/micronaut/build.gradle aktualisieren wir die Image-Version von 0.1 auf 0.2, indem wir diese Zeile aktualisieren:

version '0.2'

Erstellen Sie dann die Anwendung neu und verpacken Sie sie mit den neuesten Änderungen:

$ ./gradlew jibDockerBuild

Fügen Sie das Image mit Tags hinzu und übertragen Sie es in die Container-Image-Registry:

$ docker tag micronaut-jib:0.2 \
         gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2
$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2

Sie können nun mit Kubernetes den Replikations-Controller problemlos auf die neue App-Version aktualisieren. Wenn Sie das Image-Label für Ihren laufenden Container ändern möchten, müssen Sie das vorhandene hello-micronaut deployment bearbeiten und das Image von gcr.io/PROJECT_ID/micronaut-jib:0.1 in gcr.io/PROJECT_ID/micronaut-jib:0.2 ändern.

Mit dem Befehl kubectl set image können Sie Kubernetes anweisen, die neue Version Ihrer Anwendung instanzisch im gesamten Cluster mit Rolling Update bereitzustellen:

$ kubectl set image deployment/hello-micronaut \
          micronaut-jib=gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2

deployment.apps "hello-micronaut" image updated

Prüfen Sie http://EXTERNAL_IP:8080 noch einmal, um festzustellen, ob die neue Antwort zurückgegeben wird.

13. Rollback durchführen

Hoppla! Ist Ihnen bei der neuen Version der Anwendung ein Fehler unterlaufen? Möglicherweise ist in der neuen Version ein Fehler aufgetreten und Sie müssen schnell ein Rollback durchführen. Mit Kubernetes können Sie ganz einfach ein Rollback zum vorherigen Status durchführen. Lassen Sie uns mit dem folgenden Befehl ein Rollback der Anwendung durchführen:

$ kubectl rollout undo deployment/hello-micronaut

Wenn Sie sich die Ausgabe des Dienstes ansehen, sind wir wieder zu unserem ursprünglichen "Hello World"- angezeigt.

14. Zusammenfassung

In diesem Schritt haben Sie einen einfachen Apache Groovy-basierten Micronaut-Hello World-Dienst von Micronaut direkt in Cloud Shell eingerichtet, als Container mit Jib verpackt und in Google Kubernetes Engine bereitgestellt.

15. Glückwunsch!

Sie haben gelernt, wie Sie in Google Kubernetes Engine einen neuen webbasierten Mikrodienst Apache Groovy / Micronaut in Kubernetes erstellen und bereitstellen.

Weitere Informationen

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.