Déploiement de TypeScript sur Kubernetes : guide de base
Le développement web moderne nécessite de plus en plus non seulement l'écriture de code de qualité, mais aussi un déploiement compétent des applications. TypeScript, grâce à son typage strict et ses outils puissants, est devenu un choix populaire pour les services backend sur Node.js. Cependant, sans un déploiement approprié, même un code parfait reste sur la machine locale. Kubernetes — le standard d'orchestration de conteneurs — permet d'automatiser le déploiement, la mise à l'échelle et la gestion des applications. Dans ce guide, nous allons parcourir étape par étape le processus de déploiement d'une application TypeScript sur Kubernetes.
1. Préparation de l'application TypeScript pour la conteneurisation
Avant d'envoyer le code dans le cluster, il faut s'assurer que l'application est prête à fonctionner dans un conteneur. Examinons un projet typique avec Express.js et TypeScript.
Structure du projet
my-ts-app/├── src/│ ├── index.ts│ └── routes/├── dist/├── package.json├── tsconfig.json└── DockerfileConfiguration de tsconfig.json
Assurez-vous que le compilateur TypeScript compile le projet dans le dossier dist :
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true }, "include": ["src/**/*"]}Serveur simple (src/index.ts)
import express, { Request, Response } from 'express';
const app = express();const PORT = process.env.PORT || 3000;
app.get('/health', (_req: Request, res: Response) => { res.json({ status: 'ok', timestamp: new Date().toISOString() });});
app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});Ajoutez les scripts dans package.json :
"scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "ts-node src/index.ts"}2. Construction de l'image Docker pour TypeScript
La conteneurisation est une étape clé avant le déploiement sur Kubernetes. Utilisons une construction multi-étapes (multi-stage build) pour réduire la taille de l'image.
Dockerfile
# Stage 1: BuildFROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ciCOPY tsconfig.json ./COPY src/ ./src/RUN npm run build
# Stage 2: ProductionFROM node:18-alpine AS productionWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/package*.json ./RUN npm ci --only=productionEXPOSE 3000CMD ["node", "dist/index.js"]Construisez l'image et envoyez-la dans un registre (par exemple, Docker Hub) :
docker build -t yourusername/my-ts-app:v1 .docker push yourusername/my-ts-app:v13. Rédaction des manifestes Kubernetes
Pour le déploiement sur Kubernetes, vous aurez besoin d'au moins deux ressources : un Deployment (gestion des pods) et un Service (accès à l'application).
deployment.yaml
apiVersion: apps/v1kind: Deploymentmetadata: name: my-ts-app labels: app: my-ts-appspec: replicas: 2 selector: matchLabels: app: my-ts-app template: metadata: labels: app: my-ts-app spec: containers: - name: app image: yourusername/my-ts-app:v1 ports: - containerPort: 3000 env: - name: PORT value: "3000" livenessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 3 periodSeconds: 5service.yaml
apiVersion: v1kind: Servicemetadata: name: my-ts-app-servicespec: selector: app: my-ts-app ports: - protocol: T