Java-Deployment auf Kubernetes: Grundlagenleitfaden für Entwickler

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

Deploy von Java auf Kubernetes: Ein grundlegendes Handbuch



Kubernetes (K8s) hat sich zum De-facto-Standard für die Orchestrierung containerisierter Anwendungen entwickelt. Wenn Sie ein Java-Entwickler sind, ist die Fähigkeit, Ihre Anwendungen in Kubernetes bereitzustellen, nicht nur ein Plus, sondern eine Notwendigkeit in der modernen DevOps-Kultur. In diesem Handbuch gehen wir den gesamten Weg von der Erstellung einer einfachen Java-Anwendung bis zu ihrem Deploy in einem Kubernetes-Cluster. Sie erfahren, wie Sie die Anwendung in ein Docker-Image packen, die erforderlichen Manifeste schreiben und sie in einer produktionsähnlichen Umgebung ausführen.



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



Bevor Sie die Anwendung in Kubernetes deployen, muss sie containerisiert werden. Docker ist die Standardmethode zum Verpacken von Java-Anwendungen mit ihren Abhängigkeiten. Betrachten wir einen einfachen REST-Service auf Spring Boot.



Wir erstellen die Klasse HelloController.java:



package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;

@RestControllerpublic class HelloController {

@GetMapping("/") public String hello() { return "Hello from Java on Kubernetes!"; }}


Jetzt erstellen wir ein Dockerfile zum Bauen des Images. Wir verwenden einen Multi-Stage-Build, um die Größe des endgültigen Images zu minimieren:



FROM maven:3.8.5-openjdk-17 AS buildWORKDIR /appCOPY pom.xml .COPY src ./srcRUN mvn clean package -DskipTests

FROM openjdk:17-jdk-slimWORKDIR /appCOPY --from=build /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


Bauen Sie das Image mit dem Befehl docker build -t my-java-app:latest . und führen Sie es lokal zum Testen aus: docker run -p 8080:8080 my-java-app. Wenn alles funktioniert, können Sie das Image in eine Registry (z. B. Docker Hub) hochladen:



docker tag my-java-app:latest yourusername/my-java-app:latestdocker push yourusername/my-java-app:latest


2. Grundlegende Kubernetes-Manifeste



Für den Deploy in Kubernetes werden mindestens zwei Ressourcen benötigt: Deployment (zuständig für die Verwaltung der Pods) und Service (stellt den Netzwerkzugriff sicher).



Erstellen Sie die Datei deployment.yaml:



apiVersion: apps/v1kind: Deploymentmetadata:  name: java-app-deployment  labels:    app: java-appspec:  replicas: 2  selector:    matchLabels:      app: java-app  template:    metadata:      labels:        app: java-app    spec:      containers:      - name: java-app        image: yourusername/my-java-app:latest        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


Erstellen Sie nun service.yaml, um die Anwendung innerhalb des Clusters verfügbar zu machen:



apiVersion: v1kind: Servicemetadata:  name: java-app-servicespec:  selector:    app: java-app  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: ClusterIP


Wenn Sie den Zugriff von außen öffnen müssen (z. B. zum Testen), ändern Sie den Typ auf LoadBalancer oder verwenden Sie NodePort.



3. Bereitstellung im Cluster



Stellen Sie sicher, dass Sie Zugriff auf den Kubernetes-Cluster haben (z. B. lokales Minikube oder ein Cloud-Dienst). Wenden Sie die Manifeste an:



kubectl apply -f deployment.yamlkubectl apply -f service.yaml

Blogs

Buchempfehlungen