Java-Bereitstellung auf Kubernetes: Ein grundlegender Leitfaden für Anfänger

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

Java-Bereitstellung auf Kubernetes: Ein grundlegender Leitfaden für Anfänger

\n\n

Moderne 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\n

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

\n\n

Beginnen wir mit einer einfachen Spring Boot-Anwendung. Erstellen Sie eine Datei Dockerfile im Stammverzeichnis des Projekts:

\n\n
FROM openjdk:17-jdk-alpine\nWORKDIR /app\nCOPY target/my-app.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

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

\n\n
mvn clean package -DskipTests\ndocker build -t myregistry/my-java-app:v1 .\ndocker push myregistry/my-java-app:v1
\n\n

Stellen Sie sicher, dass das Image lokal funktioniert:

\n\n
docker run -p 8080:8080 myregistry/my-java-app:v1
\n\n

2. Wichtige Kubernetes-Objekte

\n\n

Fü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
\n\n

Erstellen des Deployments (deployment.yaml)

\n\n
apiVersion: 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\n

Erstellen des Services (service.yaml)

\n\n
apiVersion: 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\n

3. Bereitstellung auf dem Kubernetes-Cluster

\n\n

Wenden Sie die Manifeste auf Ihren Cluster an (stellen Sie sicher, dass kubectl konfiguriert ist):

\n\n
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml
\n\n

Überprüfen Sie den Status der Pods und des Services:

\n\n
kubectl get pods\nkubectl get svc java-app-service
\n\n

Für den externen Zugriff (z. B. zum Testen) verwenden Sie port-forward:

\n\n
kubectl port-forward service/java-app-service 8080:80
\n\n

Die Anwendung ist nun unter http://localhost:8080 erreichbar.

\n\n

4. Skalierung und Aktualisierung

\n\n

Kubernetes ermöglicht eine einfache Skalierung der Anwendung:

\n\n
kubectl scale deployment java-app-deployment --replicas=5
\n\n

Um das Image zu aktualisieren (Rolling Update), ändern Sie den Tag im Deployment und wenden Sie es an:

\n\n
kubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2\nkubectl rollout status deployment/java-app-deployment
\n\n

Falls nötig, machen Sie die Änderungen rückgängig:

\n\n
kubectl rollout undo deployment/java-app-deployment
\n\n

Fazit

\n\n

Wir haben den grundlegenden Prozess der Bereitstellung einer Java-Anwendung auf Kubernetes betrachtet.

Blogs

Buchempfehlungen