Arquitecturas de Despliegue (Patrones de Pods) 🏗️

Cuando hablamos de Pods en Kubernetes, a veces olvidamos que un Pod puede tener múltiples contenedores. Aquí exploramos cómo y por qué hacer esto.

La Analogía del Roommate 🏠

Para entender un Pod multi-contenedor, imagina un Departamento (Pod) dentro de un Edificio (Nodo).

  • El Pod es el Departamento: Tiene una dirección única (IP), recursos compartidos (luz, agua) y aislamiento de los vecinos.
  • Los Contenedores son los Roommates: Viven juntos dentro del mismo departamento.
    • Comparten Red: Se pueden hablar gritando de un cuarto a otro (localhost). No necesitan salir a la calle (Internet/Service Mesh) para comunicarse.
    • Comparten Disco (Volúmenes): Pueden dejar notas en el refrigerador (archivos compartidos) que ambos pueden leer.
    • Mueren Juntos: Si el departamento se incendia (Pod delete/crash), todos los roommates se quedan sin casa.

1. Patrón Sidecar (El Ayudante) 🏍️

Concepto: Tienes un contenedor “Principal” (tu aplicación) y un “Sidecar” que le ayuda con tareas periféricas sin tocar el código principal.

Ejemplo Práctico: Logs a S3 📦

  1. Main (Node.js App): Escribe logs en /var/log/app.log. No sabe qué es S3, solo sabe escribir en disco.
  2. Sidecar (Log Agent): Lee /var/log/app.log (vía volumen compartido) y lo sube a un bucket de S3.
  3. Beneficio: Si cambias de S3 a Azure Blob, solo actualizas el Sidecar. Tu App principal no se entera.
apiVersion: v1
kind: Pod
metadata:
  name: sidecar-pattern
spec:
  containers:
  # 1. Main App
  - name: app
    image: my-app:v1
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log
 
  # 2. Sidecar
  - name: log-agent
    image: agent:latest
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log
  
  volumes:
  - name: shared-logs
    emptyDir: {}

2. Otros Patrones Comunes

  • Ambassador (El Embajador): Un sidecar que actúa como proxy para conectar la aplicación con el mundo exterior.
    • Ejemplo: Tu App conecta a localhost:5432 y el Ambassador se encarga de la conexión compleja y segura a la base de datos real en la nube.
  • Adapter (El Traductor): Un sidecar que estandariza la salida.
    • Ejemplo: Tu App escupe logs en formato feo y antiguo. El Adapter los lee y los reformatea a JSON bonito para que Prometheus los entienda.