Déploiement d'applications Java sur Kubernetes : guide étape par étape

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Déploiement d'applications Java sur Kubernetes : du Dockerfile au service opérationnel

\n\n

Le développement Java moderne est impensable sans conteneurisation et orchestration. Kubernetes (K8s) est devenu la norme pour la gestion des microservices, et savoir déployer des applications Java dans un cluster est une compétence obligatoire pour tout développeur backend. Dans cet article, nous allons parcourir en pratique le cycle complet de déploiement : de la construction de l'image Docker avec l'application Java à la configuration de l'équilibrage de charge via Ingress.

\n\n

1. Préparation de l'application Java et du Dockerfile

\n\n

Avant d'arriver dans Kubernetes, votre application Java doit être empaquetée dans une image Docker. Considérons le cas classique — une application Spring Boot, compilée en fichier JAR.

\n\n

Compilation du projet

\n

Supposons que nous ayons un projet qui se compile via Maven. Exécutez la commande à la racine du projet :

\n
mvn clean package -DskipTests
\n

En conséquence, le fichier my-app-1.0.0.jar apparaîtra dans le dossier target/.

\n\n

Création du Dockerfile

\n

Pour minimiser la taille de l'image et améliorer la sécurité, utilisons une construction multi-étapes (multi-stage build).

\n
# Étape 1 : compilation\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# Étape 2 : image finale\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

Construction et publication de l'image

\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. Création des manifestes Kubernetes

\n\n

Kubernetes utilise une approche déclarative. Nous allons décrire l'état souhaité du système dans des fichiers YAML.

\n\n

Deployment — gestion des pods

\n

Créez le fichier 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 — garantie d'accès

\n

Créez le fichier 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 — externalisation de la configuration

\n

Pour stocker les variables d'environnement, créez 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. Déploiement dans le cluster et vérification

\n\n

Appliquons maintenant tous les manifestes au cluster. Assurez-vous que kubectl est configuré et que vous êtes connecté au contexte approprié.

\n\n

Application des manifestes

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

Vérification de l'état

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

Vous devez

Blogs

Book Recommendations