Java-Bereitstellung auf Kubernetes: Ein grundlegender Leitfaden für Anfänger
\n\nModerne Java-Entwicklung ist ohne Containerisierung und Orchestrierung undenkbar. Kubernetes (K8s) ist zum De-facto-Standard für die Verwaltung containerisierter Anwendungen geworden. In diesem Leitfaden werden wir Schritt für Schritt den Prozess der Bereitstellung einer einfachen Java-Anwendung auf einem Kubernetes-Cluster durchgehen. Sie erfahren, wie Sie den Code in ein Docker-Image packen, die erforderlichen Manifeste erstellen und die Anwendung in einer produktionsähnlichen Umgebung starten.
\n\n1. Vorbereitung der Java-Anwendung und des Docker-Images
\n\nBeginnen wir mit einer einfachen Spring Boot-Anwendung. Erstellen Sie eine Datei Dockerfile im Stammverzeichnis des Projekts:
FROM openjdk:17-jdk-alpine\nWORKDIR /app\nCOPY target/my-app.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]\n\nErstellen Sie das Image und senden Sie es an eine Registry (z. B. Docker Hub):
\n\nmvn clean package -DskipTests\ndocker build -t myregistry/my-java-app:v1 .\ndocker push myregistry/my-java-app:v1\n\nStellen Sie sicher, dass das Image lokal funktioniert:
\n\ndocker run -p 8080:8080 myregistry/my-java-app:v1\n\n2. Wichtige Kubernetes-Objekte
\n\nFür die Bereitstellung einer Java-Anwendung benötigen wir drei wichtige Ressourcen:
\n\n- \n
- Deployment — verwaltet Replikate und Updates \n
- Service — stellt den Netzwerkzugriff auf die Pods sicher \n
- Ingress — (optional) Routing des externen Datenverkehrs \n
Erstellen des Deployments (deployment.yaml)
\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: java-app-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: java-app\n template:\n metadata:\n labels:\n app: java-app\n spec:\n containers:\n - name: java-app\n image: myregistry/my-java-app:v1\n ports:\n - containerPort: 8080\n resources:\n requests:\n memory: "256Mi"\n cpu: "250m"\n limits:\n memory: "512Mi"\n cpu: "500m"\n livenessProbe:\n httpGet:\n path: /actuator/health\n port: 8080\n initialDelaySeconds: 30\n periodSeconds: 10\n readinessProbe:\n httpGet:\n path: /actuator/health\n port: 8080\n initialDelaySeconds: 20\n periodSeconds: 5\n\nErstellen des Services (service.yaml)
\n\napiVersion: v1\nkind: Service\nmetadata:\n name: java-app-service\nspec:\n selector:\n app: java-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n\n3. Bereitstellung auf dem Kubernetes-Cluster
\n\nWenden Sie die Manifeste auf Ihren Cluster an (stellen Sie sicher, dass kubectl konfiguriert ist):
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\nÜberprüfen Sie den Status der Pods und des Services:
\n\nkubectl get pods\nkubectl get svc java-app-service\n\nFür den externen Zugriff (z. B. zum Testen) verwenden Sie port-forward:
\n\nkubectl port-forward service/java-app-service 8080:80\n\nDie Anwendung ist nun unter http://localhost:8080 erreichbar.
4. Skalierung und Aktualisierung
\n\nKubernetes ermöglicht eine einfache Skalierung der Anwendung:
\n\nkubectl scale deployment java-app-deployment --replicas=5\n\nUm das Image zu aktualisieren (Rolling Update), ändern Sie den Tag im Deployment und wenden Sie es an:
\n\nkubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2\nkubectl rollout status deployment/java-app-deployment\n\nFalls nötig, machen Sie die Änderungen rückgängig:
\n\nkubectl rollout undo deployment/java-app-deployment\n\nFazit
\n\nWir haben den grundlegenden Prozess der Bereitstellung einer Java-Anwendung auf Kubernetes betrachtet.