Java-Bereitstellung auf Kubernetes: Ein praktischer Grundlagenleitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Kubernetes für Java-Entwickler?

Die moderne Java-Entwicklung geht immer häufiger über das einfache Ausführen von JAR-Dateien auf einem Server hinaus. Die Microservices-Architektur, die Notwendigkeit der horizontalen Skalierung und Ausfallsicherheit führen zum Einsatz von Containern und Orchestratoren. Kubernetes (K8s) ist zum De-facto-Standard für die Verwaltung containerisierter Anwendungen geworden. In diesem Leitfaden werden wir durchgehen, wie man eine typische Java-Anwendung (z. B. auf Spring Boot) in einem Kubernetes-Cluster bereitstellt. Sie erfahren, wie Sie die Anwendung in ein Docker-Image packen, die erforderlichen Manifeste erstellen und sie ausführen.



1. Vorbereitung der Java-Anwendung und Erstellung des Docker-Images

Bevor sie in Kubernetes gelangt, muss die Java-Anwendung in einen Container verpackt werden. Betrachten wir ein einfaches Beispiel mit Spring Boot.



1.1. Beispiel einer Java-Anwendung

Wir erstellen einen minimalen REST-Controller, der die Version der Anwendung zurückgibt:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication@RestControllerpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }

@GetMapping("/") public String home() { return "Java App running on Kubernetes v1.0"; }}


1.2. Erstellung des Dockerfile

Für Java-Anwendungen ist es optimal, einen Multi-Stage-Build zu verwenden, um die Größe des endgültigen Images zu reduzieren:

FROM maven:3.8.6-eclipse-temurin-17 AS builderWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offline -BCOPY src ./srcRUN mvn package -DskipTests

FROM eclipse-temurin:17-jre-alpineWORKDIR /appCOPY --from=builder /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


1.3. Erstellung und Veröffentlichung des Images

Erstellen Sie das Image und senden Sie es an eine Registry (z. B. Docker Hub):

docker build -t yourusername/java-k8s-demo:1.0 .docker push yourusername/java-k8s-demo:1.0


2. Wichtige Kubernetes-Objekte für die Java-Bereitstellung

Für die Bereitstellung einer Java-Anwendung werden mindestens zwei Ressourcen benötigt: Deployment (verwaltet Replikate und Updates) und Service (stellt den Netzwerkzugriff sicher).



2.1. Deployment-Manifest

Erstellen Sie die Datei deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: java-app  labels:    app: java-appspec:  replicas: 2  selector:    matchLabels:      app: java-app  template:    metadata:      labels:        app: java-app    spec:      containers:      - name: java-app        image: yourusername/java-k8s-demo:1.0        ports:        - containerPort: 8080        resources:          requests:            memory: "256Mi"            cpu: "250m"          limits:            memory: "512Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /actuator/health            port: 8080          initialDelaySeconds: 30          periodSeconds: 10        readinessProbe:          httpGet:            path: /actuator/health            port: 8080          initialDelaySeconds: 20          periodSeconds: 5

Wichtig: Verwenden Sie für Spring Boot Actuator für Health Checks. Geben Sie requests und limits an, damit Kubernetes die Ressourcen richtig verteilt.



2.2. Service-Manifest

Erstellen Sie service.yaml für den internen Zugriff auf die Pods:

apiVersion: v1kind: Servicemetadata:  name: java-app-servicespec:  selector:    app: java-app  ports:    - protocol: TCP      port                

Blogs

Buchempfehlungen