Configurar un Cluster Local con Minikube o Kind

Video
25 min~4 min lectura

Reproductor de video

Concepto clave

Un cluster de Kubernetes es un conjunto de nodos (máquinas) que ejecutan aplicaciones contenerizadas. Imagina una orquesta sinfónica: cada músico es un nodo, el director es el plano de control, y las partituras son los manifiestos de Kubernetes. Para practicar sin costos en la nube, usamos herramientas locales como Minikube (una VM ligera) o Kind (Kubernetes en Docker).

Minikube es ideal para principiantes porque simula un cluster completo con una sola máquina virtual. Kind, en cambio, usa contenedores Docker para crear nodos, siendo más rápido y ligero. Ambos permiten desarrollar y probar despliegues de modelos de ML antes de llevarlos a producción. Como científico de datos, dominar esto te da control total sobre tu entorno de inferencia.

Cómo funciona en la práctica

Vamos a configurar un cluster local paso a paso. Primero, instala Docker si no lo tienes (requisito para ambos). Luego, elige Minikube o Kind según tu necesidad: Minikube para un entorno más parecido a producción, Kind para rapidez en desarrollo.

Ejemplo con Minikube: 1) Descarga e instala Minikube desde su sitio oficial. 2) Inicia el cluster con minikube start. 3) Verifica con kubectl get nodes. Para Kind: 1) Instala Kind via package manager. 2) Crea un cluster con kind create cluster. 3) Usa kubectl cluster-info para confirmar. Ambos te darán un cluster listo en minutos.

Código en acción

Aquí un ejemplo real de configuración con Kind, incluyendo un archivo de configuración para personalizar el cluster:

# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

Luego, crea el cluster con este archivo:

# Crear cluster con configuración personalizada
kind create cluster --name ml-cluster --config kind-config.yaml

# Verificar nodos
kubectl get nodes

# Salida esperada:
# NAME                 STATUS   ROLES           AGE   VERSION
# ml-cluster-control-plane   Ready    control-plane   30s   v1.27.3
# ml-cluster-worker          Ready    <none>          28s   v1.27.3
# ml-cluster-worker2         Ready    <none>          28s   v1.27.3

Errores comunes

  • No tener suficiente recursos: Minikube requiere al menos 2GB de RAM. Si falla, ajusta con minikube start --memory=4096.
  • Conflicto de puertos: Kubernetes usa puertos como 6443. Si hay conflictos, cambia el puerto en Kind con configuración o usa minikube start --apiserver-port=6444.
  • Olvidar el contexto de kubectl: Al tener múltiples clusters, kubectl puede apuntar al incorrecto. Usa kubectl config use-context nombre-del-cluster para cambiar.
  • No limpiar clusters viejos: Acumular clusters consume recursos. Borra con kind delete cluster --name ml-cluster o minikube delete.

Checklist de dominio

  1. Instalar Docker y verificar con docker --version.
  2. Elegir entre Minikube o Kind basado en necesidades de proyecto.
  3. Crear un cluster local y verificar con kubectl get nodes.
  4. Configurar kubectl para usar el contexto correcto.
  5. Desplegar una aplicación de prueba (e.g., nginx) en el cluster.
  6. Acceder a logs y pods usando comandos kubectl básicos.
  7. Limpiar recursos después de pruebas con comandos de eliminación.

Desplegar un Modelo de ML Simple en tu Cluster Local

En este ejercicio, crearás un cluster local con Kind y desplegarás un modelo de ML básico usando un Deployment de Kubernetes. Sigue estos pasos:

  1. Instala Kind si no lo tienes: curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64 && chmod +x ./kind && sudo mv ./kind /usr/local/bin/ (ajusta para tu OS).
  2. Crea un cluster llamado ml-practice con un nodo worker: kind create cluster --name ml-practice --config <(echo 'kind: Cluster\napiVersion: kind.x-k8s.io/v1alpha4\nnodes:\n- role: control-plane\n- role: worker').
  3. Verifica que el cluster esté listo: kubectl get nodes.
  4. Crea un archivo model-deployment.yaml con este contenido:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ml-model
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: ml-model
      template:
        metadata:
          labels:
            app: ml-model
        spec:
          containers:
          - name: model-container
            image: scikit-learn-model:latest  # Usa una imagen pre-construida o construye la tuya
            ports:
            - containerPort: 5000
  5. Aplica el deployment: kubectl apply -f model-deployment.yaml.
  6. Expón el deployment con un servicio: kubectl expose deployment ml-model --type=NodePort --port=5000.
  7. Accede al modelo: kubectl get svc ml-model para ver el puerto y prueba con curl o navegador.
  8. Limpia: kind delete cluster --name ml-practice.
Pistas
  • Si la imagen scikit-learn-model:latest no existe, construye una simple con Docker usando un Dockerfile que ejecute un servidor Flask.
  • Usa kubectl describe pod <pod-name> si los pods no se inician para ver errores.
  • Para acceder al servicio, usa minikube service ml-model si estás en Minikube, o obtén la IP con Kind.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.