Deployments: Ciclo de Vida Completo
Resumen de una línea
Deployment es el nivel superior: gestiona ReplicaSets, permite actualizaciones sin downtime (rolling updates), y es lo más usado en producción.
Información
- Fuente: Curso Kubernetes - Módulo 5
- URL GitHub: https://github.com/iesgn/curso_kubernetes_cep/tree/main/modulo5
Problema: Actualizar sin Downtime
Escenario
Versión en producción: nginx:1.20 (3 Pods)
Necesito: nginx:1.21 (sin interrumpir servicio)
Con ReplicaSet:
❌ No hay forma nativa
Solución: Deployment
Deployment = Gestor de ReplicaSets que permite:
- 🔄 Actualizaciones gradientes (rolling updates)
- ↩️ Rollback (volver a versión anterior)
- ⏸️ Pausar/reanudar despliegues
Concepto: Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20Ciclo de Vida: Rolling Update
Escenario
Estado actual: 3 Pods nginx:1.20
Objetivo: 3 Pods nginx:1.21
Estrategia RollingUpdate (maxSurge=1, maxUnavailable=1):
Paso 1: Crea 1 Pod nginx:1.21 (total: 4)
nginx:1.20 ×3
nginx:1.21 ×1 (nuevo)
Paso 2: Elimina 1 Pod nginx:1.20 (total: 3)
nginx:1.20 ×2
nginx:1.21 ×1
Paso 3: Crea 1 Pod nginx:1.21 (total: 4)
nginx:1.20 ×2
nginx:1.21 ×2 (nuevo)
Paso 4: Elimina 1 Pod nginx:1.20 (total: 3)
nginx:1.20 ×1
nginx:1.21 ×2
Paso 5: Crea 1 Pod nginx:1.21 (total: 4)
nginx:1.20 ×1
nginx:1.21 ×3 (nuevo)
Paso 6: Elimina 1 Pod nginx:1.20 (total: 3)
nginx:1.21 ×3
✅ Completado: Sin downtime, sin pérdida de tráfico
Estrategias de Actualización
RollingUpdate (Recomendado)
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Máximo 1 Pod extra
maxUnavailable: 1 # Máximo 1 Pod no disponibleVentajas:
- ✅ Sin downtime
- ✅ Bajo impacto
Desventajas:
- ❌ Más lento
- ❌ Momentáneamente 4 Pods en lugar de 3
Recreate
strategy:
type: RecreatePaso 1: Elimina todos los Pods (downtime)
Paso 2: Crea nuevos Pods
❌ Downtime significativo
Operaciones Comunes
Crear Deployment
# Declarativo
kubectl apply -f deployment.yaml
# Imperativo
kubectl create deployment web --image=nginx:1.20Ver Estado
# Listar deployments
kubectl get deployments
# Ver detalles
kubectl describe deployment web-app
# Ver ReplicaSets (automáticos)
kubectl get rs
# Ver Pods
kubectl get podsActualizar Versión
# Opción 1: Edit
kubectl edit deployment web-app
# (cambiar image a nginx:1.21)
# Opción 2: Set
kubectl set image deployment/web-app nginx=nginx:1.21
# Opción 3: Patch
kubectl patch deployment web-app -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.21"}]}}}}'Ver Historial de Despliegues
# Ver revisions
kubectl rollout history deployment/web-app
# Ver cambios de una revision
kubectl rollout history deployment/web-app --revision=2Rollback (Volver a Versión Anterior)
# Volver a revision anterior
kubectl rollout undo deployment/web-app
# Volver a revision específica
kubectl rollout undo deployment/web-app --to-revision=2
# Ver estado del rollback
kubectl rollout status deployment/web-appPausar/Reanudar Despliegue
# Pausar (útil para debugging)
kubectl rollout pause deployment/web-app
# Reanudar
kubectl rollout resume deployment/web-appEliminar
# Eliminar deployment (y Pods asociados)
kubectl delete deployment web-appParámetros Importantes
replicas
spec:
replicas: 3 # Cuántos Pods ejecutarselector
selector:
matchLabels:
app: web # Qué Pods gestiona este deploymenttemplate
template:
spec:
containers:
- name: nginx
image: nginx:1.20 # Qué versión ejecutarstrategy
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Cuántos extra durante actualización
maxUnavailable: 1 # Cuántos pueden estar sin servicioCasos de Uso
Actualización Simple
# Cambiar imagen
kubectl set image deployment/web app=myapp:v2
# Kubernetes automatiza rolling updateRollback por Error
# Nueva versión tiene bugs
kubectl rollout undo deployment/web-app
# Vuelve a versión anterior automáticamenteEscalado
# Aumentar réplicas
kubectl scale deployment web-app --replicas=5
# Disminuir
kubectl scale deployment web-app --replicas=2Relaciones
Conecta con
- ReplicaSets: Escalabilidad y Tolerancia a Fallos — Gestiona internamente
- Services: Acceso a Aplicaciones — Acceso a Deployments
Parte de
- Cargas de trabajo de Kubernetes — Principal carga de trabajo
Flujo de Aprendizaje
Pods (unidad mínima)
↓
ReplicaSets (escalabilidad)
↓
Deployments (ciclo de vida completo) ← Estás aquí
↓
Services (acceso externo)