Déploiement Java sur Kubernetes : guide de base pour débutants
\n\nLe développement Java moderne est impensable sans conteneurisation et orchestration. Kubernetes (K8s) est devenu le standard de facto pour la gestion des applications conteneurisées. Dans ce guide, nous allons étape par étape décomposer le processus de déploiement d'une application Java simple sur un cluster Kubernetes. Vous apprendrez à empaqueter le code dans une image Docker, à créer les manifestes nécessaires et à exécuter l'application dans un environnement de type production.
\n\n1. Préparation de l'application Java et de l'image Docker
\n\nCommençons par une application Spring Boot simple. Créez un fichier Dockerfile dans le répertoire racine du projet :
FROM openjdk:17-jdk-alpine\nWORKDIR /app\nCOPY target/my-app.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]\n\nConstruisez l'image et envoyez-la dans un registre (par exemple, Docker Hub) :
\n\nmvn clean package -DskipTests\ndocker build -t myregistry/my-java-app:v1 .\ndocker push myregistry/my-java-app:v1\n\nAssurez-vous que l'image fonctionne localement :
\n\ndocker run -p 8080:8080 myregistry/my-java-app:v1\n\n2. Objets Kubernetes principaux
\n\nPour déployer une application Java, nous aurons besoin de trois ressources clés :
\n\n- \n
- Deployment — gère les réplicas et les mises à jour \n
- Service — assure l'accès réseau aux pods \n
- Ingress — (optionnel) routage du trafic externe \n
Création du Deployment (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\nCréation du Service (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. Déploiement sur le cluster Kubernetes
\n\nAppliquez les manifestes à votre cluster (assurez-vous que kubectl est configuré) :
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\nVérifiez le statut des pods et du service :
\n\nkubectl get pods\nkubectl get svc java-app-service\n\nPour un accès externe (par exemple, pour les tests), utilisez port-forward :
\n\nkubectl port-forward service/java-app-service 8080:80\n\nMaintenant, l'application est accessible à l'adresse http://localhost:8080.
4. Mise à l'échelle et mise à jour
\n\nKubernetes permet de mettre facilement à l'échelle l'application :
\n\nkubectl scale deployment java-app-deployment --replicas=5\n\nPour mettre à jour l'image (rolling update), modifiez le tag dans le Deployment et appliquez :
\n\nkubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2\nkubectl rollout status deployment/java-app-deployment\n\nSi nécessaire, annulez les modifications :
\n\nkubectl rollout undo deployment/java-app-deployment\n\nConclusion
\n\nNous avons examiné le processus de base de déploiement d'une application Java sur Kubernetes