Déploiement JavaScript (Node.js) sur Kubernetes : guide pratique de base
Le développement web moderne est impensable sans conteneurisation et orchestration. Si vous écrivez en JavaScript (Node.js), tôt ou tard se posera la question : comment exécuter de manière fiable une application en production, assurer sa mise à l'échelle et sa tolérance aux pannes ? La réponse — Kubernetes. Ce n'est pas seulement un outil à la mode, mais un standard de facto pour la gestion des applications conteneurisées.
Dans ce guide, nous allons parcourir le cycle complet de déploiement d'une application Node.js simple sur Kubernetes. Vous apprendrez comment empaqueter le code dans une image Docker, créer les manifestes nécessaires et tout exécuter dans un cluster. Le contenu est destiné aux développeurs qui connaissent déjà les bases de Node.js et souhaitent maîtriser les pratiques DevOps.
1. Préparation de l'application Node.js à la conteneurisation
Avant de déployer l'application sur Kubernetes, il faut l'empaqueter dans un conteneur. Pour cela, créons une simple application Express. Assurez-vous d'avoir installé Node.js et npm.
Créez le fichier app.js :
const express = require('express');const app = express();const port = process.env.PORT || 3000;
app.get('/', (req, res) => { res.json({ message: 'Bonjour depuis Node.js sur Kubernetes !' });});
app.get('/health', (req, res) => { res.status(200).send('OK');});
app.listen(port, () => { console.log(`Serveur en écoute sur le port ${port}`);});Il est important d'ajouter un endpoint /health — Kubernetes l'utilisera pour vérifier le bon fonctionnement (liveness probe).
Créez maintenant un Dockerfile à la racine du projet :
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]Construisez l'image et testez-la localement :
docker build -t my-node-app:latest .docker run -p 3000:3000 my-node-app:latestOuvrez http://localhost:3000 — vous devriez voir une réponse JSON.
2. Manifestes Kubernetes de base pour Node.js
Kubernetes fonctionne avec des configurations déclaratives (YAML). Pour déployer une application Node.js, nous aurons besoin d'au moins deux ressources principales : Deployment et Service.
2.1. Deployment
Le Deployment gère les répliques de votre application. Créez le fichier deployment.yaml :
apiVersion: apps/v1kind: Deploymentmetadata: name: node-app-deployment labels: app: node-appspec: replicas: 3 selector: matchLabels: app: node-app template: metadata: labels: app: node-app spec: containers: - name: node-app image: my-node-app:latest ports: - containerPort: 3000 env: - name: PORT value: "3000" livenessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 3 periodSeconds: 5Points importants :
replicas: 3— Kubernetes créera 3 copies de votre application pour la tolérance aux pannes.livenessProbe— vérifie si l'application est vivante. Si aucune réponse, Kubernetes redémarrera le conteneur.readinessProbe— vérifie si l'application est prête à recevoir du trafic. Tant que la vérification n'est pas réussie, le pod ne reçoit pas de requêtes.
2.2. Service
Le Service assure l'accès réseau aux pods. Créez service.yaml :
apiVersion: v1kind: Servicemetadata: name: node-app-servicespec: selector: app: node-app ports: - protocol: TCP