Bereitstellung von Java-Anwendungen auf Kubernetes: Schritt-für-Schritt-Anleitung

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

Bereitstellung von Java-Anwendungen auf Kubernetes: Vom Dockerfile zum laufenden Service

\n\n

Moderne Java-Entwicklung ist ohne Containerisierung und Orchestrierung undenkbar. Kubernetes (K8s) ist zum Standard für die Verwaltung von Mikroservices geworden, und die Fähigkeit, Java-Anwendungen in einem Cluster bereitzustellen, ist eine unverzichtbare Fähigkeit für Backend-Entwickler. In diesem Artikel gehen wir den gesamten Bereitstellungszyklus praktisch durch: vom Bau des Docker-Images mit der Java-Anwendung bis zur Konfiguration des Lastenausgleichs über Ingress.

\n\n

1. Vorbereitung der Java-Anwendung und des Dockerfile

\n\n

Bevor Ihre Java-Anwendung in Kubernetes gelangt, muss sie in ein Docker-Image verpackt werden. Betrachten wir den klassischen Fall – eine Spring Boot-Anwendung, die als JAR-Datei gebaut wird.

\n\n

Projekt-Build

\n

Angenommen, wir haben ein Projekt, das über Maven gebaut wird. Führen Sie den folgenden Befehl im Projektstammverzeichnis aus:

\n
mvn clean package -DskipTests
\n

Als Ergebnis erscheint im Ordner target/ die Datei my-app-1.0.0.jar.

\n\n

Erstellung des Dockerfile

\n

Um die Image-Größe zu minimieren und die Sicherheit zu erhöhen, verwenden wir einen Multi-Stage-Build.

\n
# Stage 1: Build\nFROM maven:3.8.6-openjdk-17 AS builder\nWORKDIR /app\nCOPY pom.xml .\nRUN mvn dependency:go-offline -B\nCOPY src ./src\nRUN mvn package -DskipTests\n\n# Stage 2: Finales Image\nFROM openjdk:17-jdk-slim\nWORKDIR /app\nCOPY --from=builder /app/target/my-app-1.0.0.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

Image bauen und veröffentlichen

\n
docker build -t my-java-app:1.0.0 .\ndocker tag my-java-app:1.0.0 your-dockerhub/my-java-app:1.0.0\ndocker push your-dockerhub/my-java-app:1.0.0
\n\n

2. Erstellung von Kubernetes-Manifesten

\n\n

Kubernetes verwendet einen deklarativen Ansatz. Wir beschreiben den gewünschten Zustand des Systems in YAML-Dateien.

\n\n

Deployment – Pod-Verwaltung

\n

Erstellen Sie die Datei deployment.yaml:

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: java-app-deployment\n  labels:\n    app: java-app\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: your-dockerhub/my-java-app:1.0.0\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

Service – Zugriff ermöglichen

\n

Erstellen Sie die Datei service.yaml:

\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

ConfigMap – Auslagerung der Konfiguration

\n

Zur Speicherung von Umgebungsvariablen erstellen Sie configmap.yaml:

\n
apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: app-config\ndata:\n  SPRING_PROFILES_ACTIVE: "prod"\n  DB_URL: "jdbc:postgresql://postgres-service:5432/mydb"
\n\n

3. Bereitstellung im Cluster und Überprüfung

\n\n

Wenden wir nun alle Manifeste auf den Cluster an. Stellen Sie sicher, dass kubectl konfiguriert ist und Sie mit dem richtigen Kontext verbunden sind.

\n\n

Anwenden der Manifeste

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

Status überprüfen

\n
kubectl get pods\nkubectl get deployments\nkubectl get services
\n

Sie sollten

Blogs

Buchempfehlungen