Despliegue de JavaScript 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

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

\n\n

El desarrollo web moderno es impensable sin la contenerización. Si escribes en JavaScript (Node.js) y quieres que tu aplicación funcione de manera estable, se escale automáticamente y sea tolerante a fallos — Kubernetes (K8s) se convertirá en tu mejor amigo.

\n\n

Kubernetes es una plataforma de orquestación de contenedores. Gestiona el despliegue, el escalado y el funcionamiento de tus aplicaciones. En esta guía, analizaremos el despliegue básico de una aplicación simple de Node.js en Kubernetes. Aprenderás cómo empaquetar el código en una imagen Docker, crear un Pod, un Service y un Deployment.

\n\n

El artículo está dirigido a principiantes. Se asume que ya tienes instalados Docker y Minikube (o acceso a un clúster de K8s).

\n\n

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

\n\n

Para empezar, crearemos una aplicación web simple con Express. Responderá a las solicitudes HTTP.

\n\n

1.1. Código de la aplicación (app.js)

\n\n

Crea el archivo app.js:

\n\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.send('¡Hola desde Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Servidor iniciado en el puerto ${PORT}`);\n});\n
\n\n

1.2. Archivo package.json

\n\n

Crea el package.json:

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

1.3. Dockerfile

\n\n

Ahora crearemos el Dockerfile para construir la imagen:

\n\n
FROM node:18-alpine\n\nWORKDIR /usr/src/app\n\nCOPY package*.json ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 3000\n\nCMD ["node", "app.js"]\n
\n\n

1.4. Construcción y carga de la imagen

\n\n

Ejecuta los comandos:

\n\n
docker build -t my-node-app:v1 .\n
\n\n

Si usas Minikube, construye la imagen dentro de su entorno:

\n\n
minikube image build -t my-node-app:v1 .\n
\n\n

O sube la imagen a Docker Hub / cualquier registry e indícala en el manifiesto.

\n\n

Paso 2: Objetos básicos de Kubernetes (Pod, Deployment, Service)

\n\n

Kubernetes trabaja con objetos. Para el despliegue necesitaremos tres principales:

\n\n
    \n
  • Pod — la unidad mínima, uno o varios contenedores.
  • \n
  • Deployment — gestiona los Pods, proporciona escalado y actualizaciones.
  • \n
  • Service — un punto de acceso estable a los Pods (generalmente a través de ClusterIP o NodePort).
  • \n
\n\n

2.1. Creación del Deployment

\n\n

Crea el archivo deployment.yaml:

\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: node-app-deployment\nspec:\n  replicas: 3\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-node-app:v1\n        ports:\n        - containerPort: 3000\n        env:\n        - name: PORT\n          value: "3000"\n
\n\n

Explicación:

\n
    \n
  • replicas: 3 — ejecutaremos 3 copias de la aplicación para tolerancia a fallos.
  • \n
  • selector y labels — vinculan el Deployment con los Pods.
  • \n
  • image — el nombre de tu imagen Docker.
  • \n
\n\n

2.2. Creación del Service

\n\n

Crea el archivo service.yaml para acceder a la aplicación:

\n\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: node-app-service\nspec:\n  selector:\n    app: node-app\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 3000\n  type: NodePort\n
\n\n

¿Qué sucede aquí?

\n
    \n
  • El Service redirige el tráfico desde el puerto

Blogs

Book Recommendations