Pods: Contenedores en Kubernetes

Resumen de una línea

Pod es la unidad mínima en Kubernetes: envoltura que contiene uno o varios contenedores, efímera pero central en k8s.

Información

Concepto: Pod

¿Qué es un Pod?

Pod = contenedor Docker + capa k8s con:

  • Política de reinicio
  • Health checks (readiness, liveness)
  • Abstracción sobre runtime (Docker, containerd, CRI-O)

Características Fundamentales

Pod = Envoltura de 1+ contenedores que:
  ✓ Comparten IP (dirección única)
  ✓ Comparten almacenamiento (volúmenes)
  ✓ Se crean/destruyen juntos
  ✓ Son efímeros (no persistentes)

Comparación: Pod vs Contenedor

Aspecto Contenedor Pod

Runtime Docker, containerd Abstracción k8s IP Privada del host Propia única Almacenamiento Volúmenes Docker Volúmenes k8s Health checks Docker health Readiness/Liveness Reinicio Política Docker Política k8s

Características Clave

1. Efímeros (No Persistentes)

Los Pods se crean, ejecutan y se destruyen:

  • Cambios → nuevo Pod
  • Error → nuevo Pod
  • Sin datos persistentes → se pierden

Solución: Usar volúmenes para datos que deben persistir

2. Una IP por Pod

Pod = 172.17.10.5
  ├─ Contenedor 1: localhost:8080
  ├─ Contenedor 2: localhost:3306
  └─ Contenedor 3: localhost:6379

Acceso interno:
  - Pod 1 → Pod 2: 172.17.10.5:3306

3. Abstracción de Runtime

Pod:
  spec:
    containers:
      - name: app
        image: nginx:latest
        # Funciona con Docker, containerd, CRI-O, etc.
        # Sin cambios en la definición

Tipos de Pods

Pod Single-Container (95% de casos)

apiVersion: v1
kind: Pod
metadata:
  name: mi-pod
spec:
  containers:
  - name: app
    image: nginx:latest
    ports:
    - Port: 80

Uso típico:

  • Servidores web (nginx, Apache)
  • Servidores de aplicación (Python, Node)
  • Bases de datos (MySQL, PostgreSQL)
  • Cachés (Redis)

Pod Multi-Container (Casos especiales)

apiVersion: v1
kind: Pod
metadata:
  name: pod-multicontenedor
spec:
  containers:
  - name: web
    image: nginx:latest
  - name: app
    image: myapp:latest

Cuándo usar:

  • Procesos fuertemente acoplados
  • Servidor web + aplicación (nginx + PHP-FPM)
  • Sidecar containers (logging, monitoring)
  • Nota: Curso se enfoca en single-container

Ciclo de Vida de un Pod

1. Pending     → Pod creado, esperando recursos
2. Running     → Contenedores ejecutándose
3. Succeeded   → Completado exitosamente
4. Failed      → Error durante ejecución
5. Unknown     → Estado desconocido

Conceptos: Health Checks

Readiness Probe

¿Está listo el Pod para recibir tráfico?

readinessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

Caso: Aplicación que tarda en iniciar

Liveness Probe

¿Sigue vivo el contenedor?

livenessProbe:
  httpGet:
    path: /ping
    port: 8080
  periodSeconds: 10
  failureThreshold: 3

Caso: Detectar deadlocks, aplicación colgada

Gestión Básica de Pods

Crear Pod (imperative)

# Crear simple
kubectl run mi-pod --image=nginx
 
# Con exposición
kubectl run web --image=nginx --port=80

Ver Pods

# Listar todos
kubectl get pods
 
# Ver detalles
kubectl describe pod mi-pod
 
# Ver logs
kubectl logs mi-pod
 
# Logs en vivo
kubectl logs -f mi-pod

Ejecutar Comandos en Pod

# Ejecutar comando
kubectl exec mi-pod -- ls /app
 
# Shell interactivo
kubectl exec -it mi-pod -- /bin/bash

Eliminar Pod

# Eliminar
kubectl delete pod mi-pod
 
# Forzado
kubectl delete pod mi-pod --grace-period=0 --force

Manifest YAML: Definición Declarativa

Estructura Básica

apiVersion: v1
kind: Pod
metadata:
  name: web-app
  labels:
    app: web
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - Port: 80
  - name: app
    image: myapp:1.0

Campos Comunes

CampoDescripción
apiVersionv1 para Pods
kindPod
metadata.nameNombre único en namespace
metadata.labelsEtiquetas para seleccionar
spec.containers[]Array de contenedores
containers[].imageImagen a usar
containers[].ports[]Puertos expuestos
containers[].env[]Variables de entorno
containers[].volumeMounts[]Volúmenes montados

Limitaciones de Pods

⚠️ Problemas Clave

  1. Efímeros: Sin persistencia de datos
  2. Manual: Hay que crearlos manualmente
  3. Sin escalado: No escalan automáticamente
  4. Sin actualización: No hay rolling updates

Solución: Usar ReplicaSets: Escalabilidad y Tolerancia a Fallos y Deployments: Ciclo de Vida Completo

Relaciones

Conecta con

Parte de

  • Cargas de trabajo de Kubernetes — Tipos de carga de trabajo

Próximo Paso

Pods son poderosos pero limitados. Siguiente: ReplicaSets: Escalabilidad y Tolerancia a Fallos.

Fuentes