Déploiement JavaScript (Node.js) 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

Introduction : Pourquoi Kubernetes pour Node.js ?

Les applications web modernes en JavaScript (Node.js) nécessitent une haute disponibilité, une scalabilité et une tolérance aux pannes. Lorsque votre application dépasse le cadre d'un seul serveur, la gestion manuelle devient un cauchemar. C'est là qu'intervient Kubernetes (K8s) — un système d'orchestration de conteneurs qui automatise le déploiement, la mise à l'échelle et la gestion des applications.

Dans ce guide, nous allons parcourir le chemin complet : d'une simple application Node.js à son exécution dans un environnement de type production sur Kubernetes. Vous apprendrez à empaqueter le code dans une image Docker, à créer les ressources K8s nécessaires (Pod, Deployment, Service) et à configurer l'accès depuis l'extérieur.



1. Préparation de l'application Node.js

Pour commencer, créons une simple application Express. Elle répondra aux requêtes HTTP et affichera le nom d'hôte du conteneur (utile pour vérifier l'équilibrage de charge).



1.1. Fichier app.js

const express = require('express');const os = require('os');

const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!', hostname: os.hostname(), timestamp: new Date().toISOString() });});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


1.2. Fichier package.json

{  "name": "k8s-node-app",  "version": "1.0.0",  "dependencies": {    "express": "^4.18.2"  },  "scripts": {    "start": "node app.js"  }}


2. Conteneurisation : Image Docker

Kubernetes fonctionne avec des conteneurs. Créons un Dockerfile minimal pour notre application Node.js. Nous utilisons l'image officielle Node.js et une construction multi-étapes pour optimiser la taille.



2.1. Dockerfile

FROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ci --only=production

FROM node:18-alpineWORKDIR /appCOPY --from=builder /app/node_modules ./node_modulesCOPY . .EXPOSE 3000CMD ["node", "app.js"]


Construisez l'image et envoyez-la sur Docker Hub ou un autre registre :

docker build -t your-dockerhub/k8s-node-app:v1 .docker push your-dockerhub/k8s-node-app:v1


3. Déploiement sur Kubernetes

Passons maintenant à l'essentiel — la création des ressources Kubernetes. Nous utiliserons un Deployment (pour gérer les Pods) et un Service (pour l'accès réseau).



3.1. Création du Deployment

Le Deployment garantit que le nombre requis de Pods avec votre application est toujours en cours d'exécution. 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: your-dockerhub/k8s-node-app:v1        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        resources:          requests:            memory: "64Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "200m"


3.2. Création du Service

Le Service fournit une adresse IP stable et un nom DNS pour accéder aux Pods. Créez service.yaml :

apiVersion: v1kind: Servicemetadata:  name: node-app-servicespec:  selector:    app: node-app  ports:    - protocol: TCP      port: 80      targetPort: 3000  type: ClusterIP


3.3. Lancement sur le cluster

Exécutez les commandes (assurez-vous au préalable que kubectl est configuré et que vous avez accès au cluster) :

kubectl apply -f deployment.yamlkubectl app                

Blogs

Book Recommendations