Introduction : Pourquoi Kubernetes pour un développeur Java ?
Le développement Java moderne dépasse de plus en plus le simple lancement de fichiers JAR sur un serveur. L'architecture microservices, la nécessité de mise à l'échelle horizontale et de tolérance aux pannes conduisent à l'utilisation de conteneurs et d'orchestrateurs. Kubernetes (K8s) est devenu le standard de facto pour la gestion des applications conteneurisées. Dans ce guide, nous allons voir comment déployer une application Java typique (par exemple, sur Spring Boot) dans un cluster Kubernetes. Vous apprendrez à empaqueter l'application dans une image Docker, à créer les manifestes nécessaires et à l'exécuter.
1. Préparation de l'application Java et construction de l'image Docker
Avant d'arriver dans Kubernetes, l'application Java doit être empaquetée dans un conteneur. Prenons un exemple simple avec Spring Boot.
1.1. Exemple d'application Java
Créons un contrôleur REST minimal qui retournera la version de l'application :
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. Création du Dockerfile
Pour les applications Java, il est optimal d'utiliser une construction multi-étapes (multi-stage build) afin de réduire la taille de l'image finale :
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. Construction et publication de l'image
Construisez l'image et envoyez-la dans un registre (par exemple, Docker Hub) :
docker build -t yourusername/java-k8s-demo:1.0 .docker push yourusername/java-k8s-demo:1.02. Objets Kubernetes principaux pour le déploiement Java
Pour déployer une application Java, vous aurez besoin d'au moins deux ressources : Deployment (gère les répliques et les mises à jour) et Service (assure l'accès réseau).
2.1. Manifeste Deployment
Créez un fichier 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: 5Important : Pour Spring Boot, utilisez Actuator pour les health checks. Spécifiez requests et limits pour que Kubernetes répartisse correctement les ressources.
2.2. Manifeste Service
Créez service.yaml pour l'accès interne aux pods :
apiVersion: v1kind: Servicemetadata: name: java-app-servicespec: selector: app: java-app ports: - protocol: TCP port