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: workerLuego, 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.3Errores 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-clusterpara cambiar. - No limpiar clusters viejos: Acumular clusters consume recursos. Borra con
kind delete cluster --name ml-clusterominikube delete.
Checklist de dominio
- Instalar Docker y verificar con
docker --version. - Elegir entre Minikube o Kind basado en necesidades de proyecto.
- Crear un cluster local y verificar con
kubectl get nodes. - Configurar kubectl para usar el contexto correcto.
- Desplegar una aplicación de prueba (e.g., nginx) en el cluster.
- Acceder a logs y pods usando comandos kubectl básicos.
- 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:
- 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). - Crea un cluster llamado
ml-practicecon 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'). - Verifica que el cluster esté listo:
kubectl get nodes. - Crea un archivo
model-deployment.yamlcon 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 - Aplica el deployment:
kubectl apply -f model-deployment.yaml. - Expón el deployment con un servicio:
kubectl expose deployment ml-model --type=NodePort --port=5000. - Accede al modelo:
kubectl get svc ml-modelpara ver el puerto y prueba concurlo navegador. - Limpia:
kind delete cluster --name ml-practice.
- 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-modelsi estás en Minikube, o obtén la IP con Kind.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.