Qué es Kubernetes y cómo hacer tu primer despliegue con Minikube
Si ya tienes experiencia con Docker y Docker Compose, en algún momento te habrás preguntado cómo gestionan sus contenedores las empresas cuando tienen decenas de servicios corriendo en varios servidores. La respuesta casi siempre es Kubernetes. En esta guía verás qué es, por qué existe y cómo instalar un clúster local con Minikube para hacer tu primer despliegue real.
Por qué Docker Compose no es suficiente
Docker Compose es una herramienta excelente para gestionar múltiples contenedores en un solo servidor. Pero cuando la aplicación crece y necesitas:
- Repartir la carga entre varios servidores
- Reiniciar automáticamente contenedores que fallan
- Desplegar nuevas versiones sin tiempo de caída
- Escalar un servicio de 2 a 20 instancias según la demanda
...Docker Compose se queda corto. No está diseñado para eso. Ahí es donde entra Kubernetes.
Qué es Kubernetes
Kubernetes (abreviado K8s) es un orquestador de contenedores de código abierto desarrollado originalmente por Google y donado a la Cloud Native Computing Foundation en 2014. Su función es gestionar contenedores a escala: desplegándolos, monitorizándolos, reiniciándolos si fallan y distribuyéndolos entre múltiples máquinas de forma automática.
En términos simples: si Docker es el motor que corre tus contenedores, Kubernetes es el director de orquesta que decide dónde, cuándo y cuántos contenedores corren.
Conceptos clave antes de empezar
Kubernetes tiene su propio vocabulario. Estos son los términos que aparecerán constantemente:
Clúster: el conjunto de máquinas (nodos) donde corre Kubernetes. Tiene un nodo maestro (control plane) que toma las decisiones y uno o varios nodos trabajadores (workers) que ejecutan los contenedores.
Nodo: cada una de las máquinas del clúster, físicas o virtuales.
Pod: la unidad mínima de despliegue en Kubernetes. Un Pod contiene uno o varios contenedores que comparten red y almacenamiento. Normalmente un Pod = un contenedor.
Deployment: un objeto que define cómo desplegar y mantener un conjunto de Pods. Le dices a Kubernetes "quiero 3 réplicas de este contenedor" y él se encarga de que siempre haya 3 corriendo.
Service: expone un Deployment hacia el exterior o hacia otros servicios dentro del clúster. Los Pods tienen IPs que cambian constantemente — el Service actúa como punto de acceso estable.
Namespace: mecanismo para organizar y aislar recursos dentro del mismo clúster. Útil para separar entornos (desarrollo, producción) en el mismo Kubernetes.
kubectl: la herramienta de línea de comandos para interactuar con el clúster. Es el equivalente al comando docker pero para Kubernetes.
Qué es Minikube
Minikube crea un clúster de Kubernetes de un solo nodo en tu máquina local, dentro de una máquina virtual o contenedor. Es la forma más sencilla de aprender y practicar Kubernetes sin necesitar infraestructura en la nube ni varios servidores.
No está pensado para producción, pero es perfecto para entender cómo funciona todo antes de trabajar con un clúster real.
Requisitos previos
- Ubuntu 22.04 o 24.04
- Docker instalado y funcionando (consulta esta guía si no lo tienes)
- Al menos 2 CPUs y 4 GB de RAM libres
- Conexión a internet para descargar las imágenes
1. Instalar kubectl
kubectl es la herramienta de línea de comandos para gestionar Kubernetes. Instálala primero:
curl -LO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Verifica la instalación:
kubectl version --client
2. Instalar Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Verifica:
minikube version
3. Arrancar el clúster
Minikube puede usar varios drivers para crear el entorno. Como ya tienes Docker instalado, úsalo como driver — es la opción más ligera:
minikube start --driver=docker
La primera vez tardará varios minutos porque descarga la imagen base del nodo de Kubernetes. Cuando termine verás algo como:
✅ Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Comprueba que el clúster está corriendo:
minikube status
Y verifica que kubectl apunta al clúster de Minikube:
kubectl get nodes
Deberías ver un nodo con estado Ready:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 1m v1.29.0
4. Tu primer Deployment
Vamos a desplegar Nginx en el clúster. En Kubernetes no ejecutas contenedores directamente — los defines en ficheros YAML y se los pasas a kubectl.
Crea el fichero del Deployment:
nano nginx-deployment.yaml
Pega este contenido:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Aplica el Deployment:
kubectl apply -f nginx-deployment.yaml
Comprueba que los Pods están arrancando:
kubectl get pods
Verás los tres Pods (definidos en replicas: 3) con estado Running en unos segundos:
NAME READY STATUS RESTARTS AGE
nginx-deployment-7d6b8c9f5-4xk2p 1/1 Running 0 30s
nginx-deployment-7d6b8c9f5-9mntq 1/1 Running 0 30s
nginx-deployment-7d6b8c9f5-vw8lj 1/1 Running 0 30s
5. Exponer el Deployment con un Service
Los Pods tienen IPs internas que cambian cada vez que se reinician. Para acceder al Nginx desde fuera necesitas un Service.
Crea el fichero del Service:
nano nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Aplica el Service:
kubectl apply -f nginx-service.yaml
Con Minikube, para acceder al servicio usa:
minikube service nginx-service --url
Te devolverá una URL como http://192.168.49.2:30080. Ábrela en el navegador y verás la página de bienvenida de Nginx.
6. Comandos kubectl que usarás siempre
# Ver todos los recursos de un tipo
kubectl get pods
kubectl get deployments
kubectl get services
kubectl get nodes
# Ver detalles de un recurso específico
kubectl describe pod nombre-del-pod
kubectl describe deployment nginx-deployment
# Ver los logs de un Pod
kubectl logs nombre-del-pod
# Seguir logs en tiempo real
kubectl logs -f nombre-del-pod
# Entrar dentro de un Pod
kubectl exec -it nombre-del-pod -- bash
# Eliminar un recurso
kubectl delete -f nginx-deployment.yaml
kubectl delete pod nombre-del-pod
# Ver todos los recursos de todos los namespaces
kubectl get all -A
7. Escalar el Deployment
Una de las ventajas de Kubernetes es poder escalar con un solo comando. Si quieres pasar de 3 a 5 réplicas de Nginx:
kubectl scale deployment nginx-deployment --replicas=5
Comprueba cómo aparecen los nuevos Pods:
kubectl get pods
Y para volver a 2:
kubectl scale deployment nginx-deployment --replicas=2
Kubernetes terminará automáticamente los Pods sobrantes y mantendrá exactamente los que le indiques.
8. Qué pasa cuando un Pod falla
Una de las funciones más importantes de Kubernetes es la autoreparación. Si un Pod muere, Kubernetes lo detecta y levanta uno nuevo automáticamente para mantener el número de réplicas definido.
Pruébalo: elimina uno de los Pods manualmente:
kubectl delete pod nombre-del-pod
Inmediatamente ejecuta:
kubectl get pods
Verás cómo el Pod eliminado desaparece y en su lugar aparece uno nuevo arrancando. Kubernetes ha detectado que el estado actual (2 Pods) no coincide con el deseado (3 réplicas) y ha corregido la situación solo.
9. Parar y limpiar
Cuando termines de practicar, para el clúster para liberar recursos:
minikube stop
Si quieres eliminar el clúster completamente:
minikube delete
Diferencias clave entre Docker Compose y Kubernetes
| Docker Compose | Kubernetes | |
|---|---|---|
| Número de servidores | Uno | Múltiples |
| Escalado | Manual | Automático |
| Autoreparación | No | Sí |
| Curva de aprendizaje | Baja | Alta |
| Uso ideal | Desarrollo / proyectos pequeños | Producción a escala |
No son tecnologías competidoras — son herramientas para contextos diferentes. Docker Compose es perfecto para lo que hacemos en las otras guías de este blog. Kubernetes entra cuando la escala o los requisitos de disponibilidad lo exigen.
Conclusión
Has instalado Minikube, desplegado tu primera aplicación en Kubernetes, la has expuesto con un Service y has visto cómo funciona el escalado y la autoreparación. Esos son los pilares sobre los que se construye todo lo demás en K8s.
A partir de aquí el camino natural es profundizar en ConfigMaps y Secrets para gestionar configuración, Ingress para exponer servicios con dominios y HTTPS, y Helm para desplegar aplicaciones complejas con un solo comando — pero cada uno de esos temas da para su propia guía.