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 déployer JavaScript sur Kubernetes ?

\n

Le développement web moderne en JavaScript (notamment avec Node.js) nécessite de plus en plus non seulement d'exécuter une application sur un seul serveur, mais aussi d'organiser une infrastructure tolérante aux pannes, évolutive et facile à gérer. Kubernetes (K8s) est le standard de facto pour l'orchestration de conteneurs. Si vous développez en Node.js et souhaitez que votre application survive aux pics de charge, se rétablisse automatiquement après des pannes et se mette à jour facilement sans temps d'arrêt, vous avez besoin de Kubernetes.

\n

Dans ce guide, nous allons détailler le processus de base de déploiement d'une application Node.js simple dans un cluster Kubernetes. Vous apprendrez à préparer une image Docker, à rédiger les manifestes YAML nécessaires (Deployment, Service, Ingress) et à lancer l'application. Cet article est destiné aux développeurs qui connaissent déjà les bases de Node.js et Docker, mais qui débutent dans le monde de Kubernetes.

\n
\n

1. Préparation de l'application Node.js et de l'image Docker

\n

La première étape consiste à créer l'application que nous allons déployer. Créons un serveur HTTP simple avec Express qui répond aux requêtes GET.

\n

1.1. Création d'un serveur simple (app.js)

\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.send('Hello from Node.js on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});\n
\n

Fichier package.json (dépendances) :

\n
{\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

1.2. Dockerfile pour Node.js

\n

Pour que Kubernetes puisse exécuter notre application, celle-ci doit être empaquetée dans un conteneur. Utilisons l'image officielle Node.js (version 18 LTS).

\n
# Utilisation de l'image officielle Node.js\nFROM node:18-alpine\n\n# Définition du répertoire de travail dans le conteneur\nWORKDIR /usr/src/app\n\n# Copie de package.json et package-lock.json\nCOPY package*.json ./\n\n# Installation des dépendances\nRUN npm install --production\n\n# Copie du code source de l'application\nCOPY . .\n\n# Indication du port d'écoute de l'application\nEXPOSE 3000\n\n# Commande de démarrage de l'application\nCMD ["node", "app.js"]\n
\n

Construction de l'image et envoi vers le registre :

\n
# Construction de l'image\ndocker build -t my-registry/node-app:v1 .\n\n# Envoi vers Docker Hub ou votre registre privé\ndocker push my-registry/node-app:v1\n
\n

Remplacez my-registry par le nom de votre registre (par exemple, docker.io/username/node-app).

\n
\n

2. Création des manifestes YAML pour Kubernetes

\n

Kubernetes utilise une approche déclarative : nous décrivons l'état souhaité du système dans des fichiers YAML, et K8s se charge d'atteindre cet état. Nous aurons besoin de trois ressources principales : Deployment, Service et Ingress.

\n

2.1. Deployment (deployment.yaml)

\n

Le Deployment est responsable du lancement et de la mise à jour des pods (conteneurs). Il garantit que le nombre requis de réplicas est toujours en fonctionnement.

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: node-app-deployment\n  labels:\n    app: node-app\nspec:\n  replicas: 3  # Nombre de réplicas (copies) de l'application\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-registry/node-app:v1\n        ports:\n        - containerPort: 3000\n        env:\n        - name: PORT\n          value: "3000"\n        resources:\n          requests:\n            memory: "64Mi"\n            cpu: "250m"\n          limits:\n            memory: "128Mi"\n            cpu: "500m"\n
\n

Points clés :

\n
    \n
  • replicas: 3 — lance

Blogs

Book Recommendations