Inicio > Cursos > Docker & Kubernetes > Pods y Deployments en profundidad
Docker & KubernetesKubernetes FundamentosLección 7 de 12

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.

ConsejoSiempre define readinessProbe en tus Deployments. Sin ella, K8s envia trafico a pods que aun no estan listos, causando errores 503 durante los deploys.
← Que es Kubernetes y cuando usarloServices y Networking en Kubernetes →

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