Despliegue de TypeScript en Kubernetes: guía básica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Despliegue de TypeScript en Kubernetes: guía básica



El desarrollo web moderno cada vez requiere no solo escribir código de calidad, sino también un despliegue adecuado de las aplicaciones. TypeScript, gracias a su tipado estricto y potentes herramientas, se ha convertido en una opción popular para servicios backend en Node.js. Sin embargo, sin un despliegue correcto, incluso el código perfecto permanecerá en la máquina local. Kubernetes — el estándar de orquestación de contenedores — permite automatizar el despliegue, escalado y gestión de aplicaciones. En esta guía, analizaremos el proceso paso a paso para desplegar una aplicación TypeScript en Kubernetes.



1. Preparación de la aplicación TypeScript para contenerización

Antes de enviar el código al clúster, es necesario asegurarse de que la aplicación esté lista para funcionar en un contenedor. Consideremos un proyecto típico con Express.js y TypeScript.



Estructura del proyecto

my-ts-app/├── src/│   ├── index.ts│   └── routes/├── dist/├── package.json├── tsconfig.json└── Dockerfile


Configuración de tsconfig.json

Asegúrese de que el compilador de TypeScript compile el proyecto en la carpeta dist:

{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true  },  "include": ["src/**/*"]}


Servidor 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}`);});


Agregue scripts en package.json:

"scripts": {  "build": "tsc",  "start": "node dist/index.js",  "dev": "ts-node src/index.ts"}


2. Construcción de la imagen Docker para TypeScript

La contenerización es un paso clave antes del despliegue en Kubernetes. Usamos compilación en múltiples etapas (multi-stage build) para reducir el tamaño de la imagen.



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"]


Construya la imagen y envíela al registro (por ejemplo, Docker Hub):

docker build -t yourusername/my-ts-app:v1 .docker push yourusername/my-ts-app:v1


3. Escritura de manifiestos de Kubernetes

Para el despliegue en Kubernetes se necesitan al menos dos recursos: Deployment (gestión de pods) y Service (acceso a la aplicación).



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: 5


service.yaml

apiVersion: v1kind: Servicemetadata:  name: my-ts-app-servicespec:  selector:    app: my-ts-app  ports:  - protocol: T                

Blogs

Book Recommendations