Introduction : Pourquoi déployer JavaScript sur Kubernetes ?
\n\nLe développement web moderne est impensable sans la conteneurisation. Si vous codez en JavaScript (Node.js) et souhaitez que votre application fonctionne de manière stable, évolue automatiquement et soit tolérante aux pannes, Kubernetes (K8s) deviendra votre meilleur allié.
\n\nKubernetes est une plateforme d'orchestration de conteneurs. Elle gère le déploiement, la mise à l'échelle et le fonctionnement de vos applications. Dans ce guide, nous allons aborder le déploiement de base d'une application Node.js simple sur Kubernetes. Vous apprendrez à empaqueter votre code dans une image Docker, à créer un Pod, un Service et un Deployment.
\n\nCet article est destiné aux débutants. Il est supposé que vous avez déjà installé Docker et Minikube (ou que vous avez accès à un cluster K8s).
\n\nÉtape 1 : Préparation de l'application Node.js et de l'image Docker
\n\nPour commencer, créons une application web simple avec Express. Elle répondra aux requêtes HTTP.
\n\n1.1. Code de l'application (app.js)
\n\nCréez le fichier app.js :
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n res.send('Bonjour depuis Kubernetes !');\n});\n\napp.listen(PORT, () => {\n console.log(`Serveur démarré sur le port ${PORT}`);\n});\n\n\n1.2. Fichier package.json
\n\nCréez le fichier package.json :
{\n "name": "k8s-node-app",\n "version": "1.0.0",\n "main": "app.js",\n "scripts": {\n "start": "node app.js"\n },\n "dependencies": {\n "express": "^4.18.2"\n }\n}\n\n\n1.3. Dockerfile
\n\nCréons maintenant le Dockerfile pour construire l'image :
FROM node:18-alpine\n\nWORKDIR /usr/src/app\n\nCOPY package*.json ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 3000\n\nCMD ["node", "app.js"]\n\n\n1.4. Construction et chargement de l'image
\n\nExécutez les commandes :
\n\ndocker build -t my-node-app:v1 .\n\n\nSi vous utilisez Minikube, construisez l'image dans son environnement :
\n\nminikube image build -t my-node-app:v1 .\n\n\nOu chargez l'image sur Docker Hub / n'importe quel registre et spécifiez-la dans le manifeste.
\n\nÉtape 2 : Objets Kubernetes de base (Pod, Deployment, Service)
\n\nKubernetes fonctionne avec des objets. Pour le déploiement, nous aurons besoin de trois principaux :
\n\n- \n
- Pod — l'unité minimale, un ou plusieurs conteneurs. \n
- Deployment — gère les Pods, assure la mise à l'échelle et les mises à jour. \n
- Service — point d'accès stable aux Pods (généralement via ClusterIP ou NodePort). \n
2.1. Création du Deployment
\n\nCréez le fichier deployment.yaml :
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: node-app-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: node-app\n template:\n metadata:\n labels:\n app: node-app\n spec:\n containers:\n - name: node-app\n image: my-node-app:v1\n ports:\n - containerPort: 3000\n env:\n - name: PORT\n value: "3000"\n\n\nExplication :
\n- \n
replicas: 3— nous lançons 3 copies de l'application pour la tolérance aux pannes. \n selectoretlabels— lient le Deployment aux Pods. \n image— le nom de votre image Docker. \n
2.2. Création du Service
\n\nCréez le fichier service.yaml pour accéder à l'application :
apiVersion: v1\nkind: Service\nmetadata:\n name: node-app-service\nspec:\n selector:\n app: node-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 3000\n type: NodePort\n\n\nCe qui se passe ici :
\n- \n
- Le Service redirige le trafic du port