Introducción Práctica a Kubernetes con Minikube y Node.js

 Este artículo te guiará a través de los conceptos básicos de Kubernetes utilizando Minikube para un entorno local y Node.js para el desarrollo de aplicaciones. El objetivo es que puedas desplegar una aplicación simple en Kubernetes y entender los componentes clave.

Kubernetes: Orquestración de Contenedores

Kubernetes es un sistema de orquestación de contenedores de código abierto diseñado para automatizar la implementación, escalado y gestión de aplicaciones containerizadas. Su principal objetivo es simplificar la gestión de aplicaciones, permitiendo a los desarrolladores definir el estado deseado de sus aplicaciones y a Kubernetes garantizar que el estado actual coincida con el deseado. Ofrece beneficios como despliegues y reversiones automatizados, capacidades de auto-reparación, escalado horizontal, balanceo de carga y descubrimiento de servicios y networking.

Prerrequisitos:

  • Docker: Instalado y funcionando.
  • Minikube: Instalado y configurado. Puedes descargarlo desde https://minikube.sigs.k8s.io/.
  • kubectl: La herramienta de línea de comandos de Kubernetes. Minikube generalmente lo instala automáticamente.
  • Node.js y npm: Instalados.

1. Configuración del Entorno:

Primero, inicia Minikube:

minikube start 

Esto descargará y configurará una instancia de Kubernetes en tu máquina. Espera a que el proceso se complete.

2. Creando una Aplicación Node.js Simple:

Crea un directorio para tu proyecto:

mkdir kubernetes-demo cd kubernetes-demo 

Crea un archivo index.js con el siguiente contenido:

const express = require('express'); const app = express(); const port = 3000;  app.get('/', (req, res) => {   res.send('¡Hola desde Kubernetes!'); });  app.listen(port, () => {   console.log(`Aplicación escuchando en el puerto ${port}`); }); 

Instala las dependencias:

npm install express 

3. Creando un Dockerfile:

Crea un archivo Dockerfile en el mismo directorio con el siguiente contenido:

FROM node:16-alpine  WORKDIR /app  COPY package*.json ./  RUN npm install  COPY . .  EXPOSE 3000  CMD ["node", "index.js"] 

Este Dockerfile construye una imagen de Docker que contiene tu aplicación Node.js.

4. Construyendo y Empujando la Imagen de Docker:

Construye la imagen de Docker:

docker build -t my-kubernetes-app . 

Etiqueta la imagen con un nombre y una versión:

docker tag my-kubernetes-app:latest your-dockerhub-username/my-kubernetes-app:latest 

(Reemplaza your-dockerhub-username con tu nombre de usuario de Docker Hub).

Empuja la imagen a Docker Hub (o tu registro de contenedores preferido):

docker push your-dockerhub-username/my-kubernetes-app:latest 

5. Desplegando la Aplicación en Kubernetes:

Crea un archivo deployment.yaml con el siguiente contenido:

apiVersion: apps/v1 kind: Deployment metadata:   name: my-kubernetes-app-deployment spec:   replicas: 3  # Ejecuta 3 réplicas de tu aplicación   selector:     matchLabels:       app: my-kubernetes-app   template:     metadata:       labels:         app: my-kubernetes-app     spec:       containers:       - name: my-kubernetes-app-container         image: your-dockerhub-username/my-kubernetes-app:latest         ports:         - containerPort: 3000 

(Reemplaza your-dockerhub-username con tu nombre de usuario de Docker Hub).

Aplica la configuración de despliegue:

kubectl apply -f deployment.yaml 

Esto crea un Deployment que gestiona las réplicas de tu aplicación.

6. Exponiendo la Aplicación con un Servicio:

Crea un archivo service.yaml con el siguiente contenido:

apiVersion: v1 kind: Service metadata:   name: my-kubernetes-app-service spec:   selector:     app: my-kubernetes-app   ports:     - protocol: TCP       port: 80       targetPort: 3000   type: LoadBalancer  # Utiliza un LoadBalancer para exponer el servicio externamente 

Aplica la configuración del servicio:

kubectl apply -f service.yaml 

Esto crea un Servicio que expone tu aplicación a través de un LoadBalancer. En Minikube, esto asignará una dirección IP externa a tu servicio.

7. Accediendo a la Aplicación:

Obtén la dirección IP externa del servicio:

minikube service my-kubernetes-app-service --url 

Esto te dará la URL a la que puedes acceder para ver tu aplicación en ejecución en Kubernetes.

8. Limpieza:

Para eliminar los recursos que creaste:

kubectl delete -f deployment.yaml kubectl delete -f service.yaml minikube stop 

Conceptos Clave de Kubernetes

Kubernetes clusters están compuestos de nodos de control y nodos de trabajador. El nodo de control es el "cerebro" del cluster, responsable de la gestión de los recursos y la garantía de que las aplicaciones se ejecuten según lo esperado. Los nodos de trabajador son las máquinas que ejecutan las aplicaciones containerizadas. Las unidades de despliegue más pequeñas en Kubernetes son los "Pods", que representan una instancia única de una aplicación y pueden contener uno o más contenedores. El API de Kubernetes es la interfaz principal para interactuar con el cluster, y kubectl es la herramienta de línea de comandos para interactuar con el API.

Buenas Prácticas:

  • Versiona tus archivos YAML: Utiliza un sistema de control de versiones (como Git) para rastrear los cambios en tus archivos de configuración de Kubernetes.
  • Utiliza Namespaces: Organiza tus recursos en Namespaces para evitar conflictos y mejorar la gestión.
  • Automatiza el despliegue: Considera utilizar herramientas de CI/CD (como Jenkins, GitLab CI, o GitHub Actions) para automatizar el proceso de construcción, prueba y despliegue de tus aplicaciones.
  • Monitoriza tus aplicaciones: Implementa herramientas de monitorización para rastrear el rendimiento y la salud de tus aplicaciones en Kubernetes.
  • Aprende sobre Helm: Helm es un gestor de paquetes para Kubernetes que simplifica la instalación y gestión de aplicaciones complejas.


Comentarios