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.
- Comparten Red: Se pueden hablar gritando de un cuarto a otro (
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 📦
- Main (Node.js App): Escribe logs en
/var/log/app.log. No sabe qué es S3, solo sabe escribir en disco. - Sidecar (Log Agent): Lee
/var/log/app.log(vía volumen compartido) y lo sube a un bucket de S3. - 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:5432y el Ambassador se encarga de la conexión compleja y segura a la base de datos real en la nube.
- Ejemplo: Tu App conecta a
- 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.