Kubernetes para principiantes: arquitectura y conceptos clave
Si ya tienes claro Docker y los contenedores, el siguiente paso natural es Kubernetes. Es la herramienta de orquestacion de contenedores mas usada en el mundo: gestiona automaticamente el despliegue, escalado y disponibilidad de tus aplicaciones. En este post te explico la arquitectura y los conceptos clave para entender Kubernetes desde cero. Consulta la documentacion oficial de Kubernetes para profundizar.
Que es Kubernetes y por que usarlo
Kubernetes (K8s) es un orquestador de contenedores de codigo abierto desarrollado originalmente por Google. Resuelve el problema de gestionar muchos contenedores en produccion: cuando tienes 10, 100 o 1000 contenedores, no puedes gestionarlos manualmente. Kubernetes lo hace por ti.
| Docker solo | Kubernetes |
|---|---|
| Gestiona contenedores en un host | Gestiona contenedores en multiples hosts |
| Escalado manual | Escalado automatico |
| Sin recuperacion automatica | Reinicia contenedores caidos automaticamente |
| Actualizaciones manuales | Rolling updates sin downtime |
| Sin balanceo de carga nativo | Load balancing integrado |
Arquitectura de Kubernetes
Un cluster de Kubernetes tiene dos tipos de maquinas: el Control Plane (cerebro del cluster) y los Nodes (donde corren las aplicaciones).
Control Plane: el cerebro de Kubernetes
- API Server: punto de entrada para todas las operaciones. Cuando ejecutas kubectl, hablas con el API Server.
- etcd: base de datos distribuida donde se guarda todo el estado del cluster.
- Scheduler: decide en que nodo se ejecuta cada Pod.
- Controller Manager: mantiene el estado deseado del cluster. Si un Pod muere, lo recrea.
Nodes: donde corren tus aplicaciones
- kubelet: agente que comunica el nodo con el Control Plane.
- kube-proxy: gestiona las reglas de red del nodo.
- Container Runtime: el motor de contenedores (containerd, CRI-O).
Conceptos clave de Kubernetes
Pod: la unidad minima de Kubernetes
Un Pod es el objeto mas basico de Kubernetes. Contiene uno o varios contenedores que comparten red y almacenamiento. En la practica, un Pod suele tener un solo contenedor.
# Ver todos los pods
kubectl get pods
# Ver pods en todos los namespaces
kubectl get pods -A
# Ver detalles de un pod
kubectl describe pod mi-pod
# Ver logs de un pod
kubectl logs mi-pod
# Acceder al shell de un pod
kubectl exec -it mi-pod -- bash
Deployment: gestiona el ciclo de vida de tus Pods
Un Deployment define cuantas replicas de un Pod quieres tener. Si un Pod muere, el Deployment lo recrea automaticamente.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: mi-app
image: nginx:1.25
ports:
- containerPort: 80
# Aplicar el manifiesto
kubectl apply -f deployment.yaml
# Ver deployments
kubectl get deployments
# Escalar a 5 replicas
kubectl scale deployment mi-app --replicas=5
# Deshacer un rollout
kubectl rollout undo deployment mi-app
Service: como exponer tus Pods
Los Pods tienen IPs efimeras que cambian cuando se recrean. Un Service proporciona una IP y DNS estables para acceder a un grupo de Pods.
| Tipo de Service | Para que sirve |
|---|---|
| ClusterIP | Solo accesible dentro del cluster (por defecto) |
| NodePort | Expone el servicio en un puerto de cada nodo |
| LoadBalancer | Crea un balanceador externo (cloud providers) |
| ExternalName | Mapea a un DNS externo |
Namespace: organizacion del cluster
# Ver namespaces
kubectl get namespaces
# Crear namespace
kubectl create namespace produccion
# Trabajar en un namespace especifico
kubectl get pods -n produccion
Instalar Kubernetes en local con minikube
Para practicar en local sin necesidad de un cluster en la nube, la opcion mas sencilla es minikube:
# Instalar minikube en Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Arrancar el cluster
minikube start
# Ver el estado
minikube status
# Acceder al dashboard web
minikube dashboard
kubectl: comandos esenciales
kubectl get nodes # ver nodos del cluster
kubectl get pods # ver pods
kubectl get services # ver services
kubectl get deployments # ver deployments
kubectl apply -f archivo.yaml # aplicar manifiesto
kubectl delete -f archivo.yaml # eliminar recurso
kubectl describe pod mi-pod # detalles de un pod
kubectl logs mi-pod # logs de un pod
kubectl exec -it mi-pod -- sh # acceder al pod
Conclusion
Kubernetes puede parecer complejo al principio, pero una vez entiendes los conceptos basicos (Pod, Deployment, Service) todo lo demas encaja. La clave es practicar con minikube en local antes de tocar un cluster en produccion. Si vienes del mundo Docker, repasa el post de Introduccion a Docker para tener clara la base.
En el proximo post veremos CrashLoopBackOff en Kubernetes: causas y soluciones. Tienes preguntas sobre Kubernetes? Dejame un comentario.
