Pods y Deployments en profundidad
Un Pod es la unidad minima desplegable en Kubernetes. Puede contener uno o mas contenedores que comparten red y almacenamiento.
Ciclo de vida de un Pod: • Pending: Esperando ser asignado a un nodo • Running: Al menos un contenedor esta ejecutandose • Succeeded: Todos los contenedores terminaron exitosamente • Failed: Al menos un contenedor termino con error • Unknown: No se puede determinar el estado
Nunca creas Pods directamente en produccion. Usas un Deployment que gestiona Pods por ti, asegurando el numero deseado de replicas y manejando actualizaciones.
# pod-basico.yaml — solo para entender la estructura
apiVersion: v1
kind: Pod
metadata:
name: mi-app-pod
labels:
app: mi-app
spec:
containers:
- name: api
image: mi-app:1.0
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
# deployment.yaml — lo que realmente usas en produccion
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # max pods extra durante update
maxUnavailable: 0 # 0 downtime
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: api
image: mi-app:2.0
ports:
- containerPort: 3000
readinessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 15
periodSeconds: 20
# Comandos esenciales para Pods y Deployments
# Aplicar un manifest
kubectl apply -f deployment.yaml
# Ver pods corriendo
kubectl get pods
kubectl get pods -o wide # mas detalle (nodo, IP)
# Ver deployments
kubectl get deployments
# Escalar replicas
kubectl scale deployment mi-app --replicas=5
# Ver el estado de un rollout
kubectl rollout status deployment/mi-app
# Historial de rollouts
kubectl rollout history deployment/mi-app
# Rollback a la version anterior
kubectl rollout undo deployment/mi-app
# Ver logs de un pod
kubectl logs mi-app-pod-abc123
kubectl logs -f mi-app-pod-abc123 # follow en tiempo real
# Entrar a un pod
kubectl exec -it mi-app-pod-abc123 -- sh
# Describir un pod (eventos, errores)
kubectl describe pod mi-app-pod-abc123
Estrategias de Deployment:
• RollingUpdate (default): Reemplaza pods gradualmente. Configuras maxSurge (cuantos pods extra se pueden crear) y maxUnavailable (cuantos pueden estar caidos). Cero downtime.
• Recreate: Elimina TODOS los pods viejos y luego crea los nuevos. Hay downtime pero es util cuando no puedes tener dos versiones corriendo a la vez (ej: migracion de base de datos).
Readiness vs Liveness Probes: • readinessProbe: Verifica si el pod puede recibir trafico. Si falla, K8s deja de enviarle requests. • livenessProbe: Verifica si el pod esta vivo. Si falla, K8s lo reinicia.
Practica esta lección
Resuelve los ejercicios del curso de Docker & Kubernetes en la app, gratis y con corrección automática.
Empezar a practicar