Deployment: la declaración de tu aplicación
Un Deployment es el recurso de Kubernetes que gestiona el ciclo de vida de tus aplicaciones stateless. Define la imagen del contenedor, el número de réplicas, la estrategia de actualización (rolling update o recreate) y los health checks.
A diferencia de crear Pods directamente, un Deployment garantiza que el número deseado de réplicas se mantenga incluso si un nodo cae. Además, facilita el escalado horizontal y los rollbacks.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
labels:
app: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Guardamos este YAML como deployment.yaml y lo aplicamos con kubectl apply -f deployment.yaml. Kubernetes leerá el manifiesto y creará los 3 Pods con la imagen de NGINX.
Service: exponer tu aplicación
Los Pods en Kubernetes tienen IPs efímeras que cambian al reiniciarse. Un Service provee una IP y nombre DNS estables, además de balancear el tráfico entre los Pods que coinciden con su selector.
apiVersion: v1
kind: Service
metadata:
name: mi-app-svc
spec:
type: NodePort
selector:
app: mi-app
ports:
- port: 80
targetPort: 80
nodePort: 30080
Los tipos de Service más comunes son:
- ClusterIP (default): solo accesible dentro del clúster.
- NodePort: expone el servicio en un puerto estático (>30000) de cada nodo.
- LoadBalancer: crea un balanceador en cloud providers (AWS, GCP, Azure).
- ExternalName: mapea a un DNS externo.
# Aplicar Deployment + Service
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# Verificar
kubectl get pods
kubectl get svc
kubectl get deployment
# Escalar a 5 réplicas
kubectl scale deployment mi-app --replicas=5
# Actualizar imagen
kubectl set image deployment/mi-app nginx=nginx:1.26
# Ver historial de rollouts
kubectl rollout history deployment/mi-app
# Deshacer el último rollout
kubectl rollout undo deployment/mi-app
El comando rollout undo es tu salvavidas en producción. Si la nueva imagen falla (por ejemplo, no responde health checks), Kubernetes automáticamente detiene el rollout y puedes revertir con un solo comando. Siempre revisa el historial antes de hacer undo para saber a qué revisión quieres volver.
