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

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 para principiantes

\n\n

El desarrollo web moderno es impensable sin contenerización y orquestación. Si escribes en TypeScript y quieres que tu aplicación funcione de manera estable, se escale automáticamente y sea tolerante a fallos — Kubernetes (K8s) será tu mejor amigo. En esta guía, desglosaremos paso a paso cómo empaquetar una aplicación TypeScript en Docker y desplegarla en un clúster de Kubernetes. El material está pensado para principiantes: nada de magia, solo ejemplos claros y explicaciones.

\n\n

1. Preparación de la aplicación TypeScript

\n\n

Antes de pensar en Kubernetes, debemos asegurarnos de que tu aplicación esté lista para funcionar en un contenedor. Crearemos un servidor HTTP simple con Express y TypeScript.

\n\n

1.1. Inicialización del proyecto

\n

Crea una carpeta para el proyecto e inicialízalo:

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

1.2. Configuración de TypeScript

\n

Crea el archivo tsconfig.json:

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

1.3. Código de la aplicación

\n

Crea la carpeta src y el archivo index.ts:

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

1.4. Compilación y ejecución

\n

Añade los scripts en package.json:

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

Verifica la ejecución local: npm run dev y abre http://localhost:3000.

\n\n

2. Contenerización con Docker

\n\n

Kubernetes trabaja con contenedores. Necesitamos crear una imagen Docker de nuestra aplicación TypeScript.

\n\n

2.1. Dockerfile

\n

Crea el archivo Dockerfile en la raíz del proyecto:

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

Usamos una compilación multi-etapa: primero compilamos TypeScript, luego creamos una imagen final ligera.

\n\n

2.2. Compilación de la imagen

\n
docker build -t my-ts-app:latest .
\n

Verifica localmente:

\n
docker run -p 3000:3000 my-ts-app:latest
\n\n

2.3. .dockerignore

\n

Para no copiar archivos innecesarios, crea .dockerignore:

\n
node_modules\ndist\n.git\n*.md
\n\n

3. Despliegue en Kubernetes

\n\n

Ahora que tenemos la imagen Docker, podemos pasar a Kubernetes. Para pruebas locales recomiendo Minikube o Kind.

\n\n

3.1. Iniciar Minikube

\n
minikube start --driver=docker\nminikube status
\n\n

3.2. Cargar la imagen en Minikube

\n

Para que Kubernetes pueda encontrar nuestra imagen, cárgala en el entorno de Minikube:

\n
minikube image load my-ts-app:latest
\n\n

3.3. Crear el Deployment

\n

Crea el archivo deployment.yaml:

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-ts-app-deployment\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: my-ts                

Blogs

Book Recommendations