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é Kubernetes para Node.js?

Las aplicaciones web modernas en JavaScript (Node.js) requieren alta disponibilidad, escalabilidad y tolerancia a fallos. Cuando tu aplicación supera los límites de un solo servidor, la gestión manual se convierte en una pesadilla. Aquí es donde Kubernetes (K8s) viene al rescate: un sistema de orquestación de contenedores que automatiza el despliegue, escalado y gestión de aplicaciones.

En esta guía, recorreremos el camino completo: desde una aplicación simple de Node.js hasta su ejecución en un entorno similar a producción en Kubernetes. Aprenderás cómo empaquetar el código en una imagen Docker, crear los recursos necesarios de K8s (Pod, Deployment, Service) y configurar el acceso desde el exterior.



1. Preparación de la aplicación en Node.js

Para empezar, crearemos una aplicación Express simple. Responderá a solicitudes HTTP y mostrará el nombre del host del contenedor (útil para verificar el balanceo de carga).



1.1. Archivo app.js

const express = require('express');const os = require('os');

const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!', hostname: os.hostname(), timestamp: new Date().toISOString() });});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


1.2. Archivo package.json

{  "name": "k8s-node-app",  "version": "1.0.0",  "dependencies": {    "express": "^4.18.2"  },  "scripts": {    "start": "node app.js"  }}


2. Contenerización: Imagen Docker

Kubernetes trabaja con contenedores. Crearemos un Dockerfile mínimo para nuestra aplicación Node.js. Usaremos la imagen oficial de Node.js y una compilación multi-etapa para optimizar el tamaño.



2.1. Dockerfile

FROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ci --only=production

FROM node:18-alpineWORKDIR /appCOPY --from=builder /app/node_modules ./node_modulesCOPY . .EXPOSE 3000CMD ["node", "app.js"]


Construye la imagen y envíala a Docker Hub u otro registro:

docker build -t your-dockerhub/k8s-node-app:v1 .docker push your-dockerhub/k8s-node-app:v1


3. Despliegue en Kubernetes

Ahora pasemos a lo más importante: la creación de recursos de Kubernetes. Usaremos un Deployment (para gestionar los Pods) y un Service (para el acceso a la red).



3.1. Creación del Deployment

El Deployment garantiza que la cantidad deseada de Pods con tu aplicación esté siempre en ejecución. Crea el archivo deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: node-app-deployment  labels:    app: node-appspec:  replicas: 3  selector:    matchLabels:      app: node-app  template:    metadata:      labels:        app: node-app    spec:      containers:      - name: node-app        image: your-dockerhub/k8s-node-app:v1        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        resources:          requests:            memory: "64Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "200m"


3.2. Creación del Service

El Service proporciona una dirección IP estable y un nombre DNS para acceder a los Pods. Crea service.yaml:

apiVersion: v1kind: Servicemetadata:  name: node-app-servicespec:  selector:    app: node-app  ports:    - protocol: TCP      port: 80      targetPort: 3000  type: ClusterIP


3.3. Ejecución en el clúster

Ejecuta los comandos (asegúrate de tener kubectl configurado y acceso al clúster):

kubectl apply -f deployment.yamlkubectl app                

Blogs

Book Recommendations