© Enkel/Shutterstock.com
Schmerzfrei Java-Applikationen auf Kubernetes betreiben

Von Null auf Kubernetes


Kubernetes ist in aller Munde, aber wie bringe ich als Java-Entwickler meine Anwendungen am besten auf diese Cloud-Plattform? In diesem Beispiel starten wir mit einer Greenfield-Anwendung und bringen einen Microservice über Docker zu Kubernetes. Dabei lernen wir auch einen neuen Entwicklungsworkflow für Cloud-Native-Java-Applikationen kennen.

Nachdem der Artikel „Java im Zeitalter von Kubernetes“ auf Seite 44 in dieser Ausgabe des Java Magazins einen Überblick über das Zusammenspiel des Java-Ökosystems mit Kubernetes präsentiert hat, wollen wir uns nun die vorgestellten Konzepte und Tools an einem konkreten Beispiel anschauen. Dazu werden wir einen einfachen Spring Boot Microservice zunächst in einen Docker-Container packen und diesen dann auf Kubernetes deployen. Wir nehmen uns einen Microservice vor, der über eine REST-Schnittstelle Zufallszahlen zurückliefert. Auch wenn so ein Service tatsächlich im Zusammenspiel mit einem Hardwaregenerator Sinn ergeben könnte, liegt der Fokus hier nicht so sehr auf der Implementierung, sondern vielmehr auf der Paketierung und dem Betrieb dieses Service (Kasten: „Voraussetzungen“).

Voraussetzungen

Für unser Beispiel brauchen wir folgende Software:

  • Ein Kubernetes-Cluster. Am einfachsten ist es, entweder Minikube [1] oder die Kubernetes-Unterstützung einer moderneren Docker-Installation zu nutzen [2]

  • Einen Docker Daemon zum Bauen von Images. Bei Minikube erhalten wir über eval $(minikube docker-env) Zugriff auf den internen Docker Daemon

  • Maven und Java

  • curl und jq [3] für den CLI-Zugriff auf unseren Service

  • Eine IDE zum remote Debugging

Welch ein Zufall: Ein Microservice

Über start.spring.io [4] wollen wir uns zunächst ein Grundgerüst für unseren Service erzeugen lassen. Das geht entweder über die Weboberfläche oder direkt mit curl (Listing 1).

Listing 1

$ mkdir random-generator $ cd random-generator $ curl https://start.spring.io/starter.tgz \ -d dependencies=web,actuator,devtools \ -d name=random-generator \ -d groupId=demo \ -d artifactId=random-generator | tar zvx

Als Nächstes implementieren wir unseren hochintelligenten Zufallszahlengenerator in der vorgegebenen Klasse RandomGeneratorApplication. Dabei ersetzen wir diese durch den in Listing 2 gezeigten Code.

Listing 2

package demo.randomgenerator; import java.util.*; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import ...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang