Déploiement de TypeScript sur Kubernetes : guide de base pour débutants
\n\nLe développement web moderne est impensable sans conteneurisation et orchestration. Si vous écrivez en TypeScript et souhaitez que votre application fonctionne de manière stable, évolue automatiquement et soit tolérante aux pannes — Kubernetes (K8s) deviendra votre meilleur ami. Dans ce guide, nous allons étape par étape voir comment empaqueter une application TypeScript dans Docker et la déployer dans un cluster Kubernetes. Le contenu est conçu pour les débutants : pas de magie, seulement des exemples et des explications clairs.
\n\n1. Préparation de l'application TypeScript
\n\nAvant de penser à Kubernetes, il faut s'assurer que votre application est prête à fonctionner dans un conteneur. Créons un simple serveur HTTP avec Express et TypeScript.
\n\n1.1. Initialisation du projet
\nCréez un dossier de projet et effectuez l'initialisation :
\nmkdir my-ts-app && cd my-ts-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon\n\n1.2. Configuration de TypeScript
\nCréez le fichier tsconfig.json :
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\n1.3. Code de l'application
\nCréez le dossier src et le fichier index.ts :
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req: Request, res: Response) => {\n res.json({ message: 'Hello from TypeScript on Kubernetes!' });\n});\n\napp.listen(PORT, () => {\n console.log(`Server running on port ${PORT}`);\n});\n\n1.4. Compilation et exécution
\nAjoutez les scripts dans package.json :
"scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node src/index.ts"\n}\nVérifiez l'exécution locale : npm run dev et ouvrez http://localhost:3000.
2. Conteneurisation avec Docker
\n\nKubernetes fonctionne avec des conteneurs. Nous devons créer une image Docker de notre application TypeScript.
\n\n2.1. Dockerfile
\nCréez le fichier Dockerfile à la racine du projet :
FROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\nFROM node:18-alpine AS production\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/package*.json ./\nRUN npm ci --only=production\nEXPOSE 3000\nCMD ["node", "dist/index.js"]\nNous utilisons une construction multi-étapes : d'abord compiler TypeScript, puis créer une image finale légère.
\n\n2.2. Construction de l'image
\ndocker build -t my-ts-app:latest .\nVérifiez localement :
\ndocker run -p 3000:3000 my-ts-app:latest\n\n2.3. .dockerignore
\nPour ne pas copier les fichiers inutiles, créez .dockerignore :
node_modules\ndist\n.git\n*.md\n\n3. Déploiement dans Kubernetes
\n\nMaintenant que nous avons une image Docker, nous pouvons passer à Kubernetes. Pour les tests locaux, je recommande Minikube ou Kind.
\n\n3.1. Lancement de Minikube
\nminikube start --driver=docker\nminikube status\n\n3.2. Chargement de l'image dans Minikube
\nPour que Kubernetes puisse trouver notre image, chargeons-la dans l'environnement Minikube :
\nminikube image load my-ts-app:latest\n\n3.3. Création du Deployment
\nCréez le fichier deployment.yaml :
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-ts-app-deployment\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: my-ts