Despliegue de JavaScript (Node.js) en Kubernetes: guía paso a paso

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

Introducción: ¿por qué desplegar JavaScript en Kubernetes?

\n

El desarrollo web moderno en JavaScript (especialmente en Node.js) requiere cada vez más no solo ejecutar la aplicación en un solo servidor, sino organizar una infraestructura tolerante a fallos, escalable y fácil de gestionar. Kubernetes (K8s) es el estándar de facto para la orquestación de contenedores. Si programas en Node.js y quieres que tu aplicación soporte picos de carga, se recupere automáticamente de fallos y se actualice fácilmente sin tiempo de inactividad, necesitas Kubernetes.

\n

En esta guía, desglosaremos el proceso básico de despliegue de una aplicación simple de Node.js en un clúster de Kubernetes. Aprenderás cómo preparar una imagen Docker, escribir los manifiestos YAML necesarios (Deployment, Service, Ingress) y ejecutar la aplicación. El artículo está dirigido a desarrolladores que ya conocen los fundamentos de Node.js y Docker, pero que recién comienzan su camino en el mundo de Kubernetes.

\n
\n

1. Preparación de la aplicación Node.js y la imagen Docker

\n

Lo primero que necesitamos es una aplicación para desplegar. Crearemos un servidor HTTP simple con Express que responda a solicitudes GET.

\n

1.1. Creación de un servidor 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

Archivo package.json (dependencias):

\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 para Node.js

\n

Para que Kubernetes pueda ejecutar nuestra aplicación, debemos empaquetarla en un contenedor. Usaremos la imagen oficial de Node.js (versión 18 LTS).

\n
# Usamos la imagen oficial de Node.js\nFROM node:18-alpine\n\n# Establecemos el directorio de trabajo dentro del contenedor\nWORKDIR /usr/src/app\n\n# Copiamos package.json y package-lock.json\nCOPY package*.json ./\n\n# Instalamos las dependencias\nRUN npm install --production\n\n# Copiamos el código fuente de la aplicación\nCOPY . .\n\n# Indicamos el puerto que escuchará la aplicación\nEXPOSE 3000\n\n# Comando para ejecutar la aplicación\nCMD ["node", "app.js"]\n
\n

Construcción de la imagen y envío al registro:

\n
# Construimos la imagen\ndocker build -t my-registry/node-app:v1 .\n\n# Subimos a Docker Hub o a tu registro privado\ndocker push my-registry/node-app:v1\n
\n

Reemplaza my-registry por el nombre de tu registro (por ejemplo, docker.io/username/node-app).

\n
\n

2. Creación de manifiestos YAML para Kubernetes

\n

Kubernetes utiliza un enfoque declarativo: describimos el estado deseado del sistema en archivos YAML, y K8s se encarga de llevar todo a ese estado. Necesitaremos tres recursos principales: Deployment, Service e Ingress.

\n

2.1. Deployment (deployment.yaml)

\n

El Deployment se encarga de ejecutar y actualizar los pods (contenedores). Garantiza que el número necesario de réplicas esté siempre funcionando.

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: node-app-deployment\n  labels:\n    app: node-app\nspec:\n  replicas: 3  # Número de réplicas (copias) de la aplicación\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

Puntos clave:

\n
    \n
  • replicas: 3 — inicia

Blogs

Book Recommendations