Los pods son el concepto más pequeño y fundamental dentro del ecosistema Kubernetes, pero con Podman puedes crearlos, administrarlos y usarlos sin necesidad de un clúster completo. En este artículo exploraremos qué es un pod en el contexto de Podman, cómo crearlo, inspeccionarlo y cómo añadir contenedores que compartan el mismo namespace de red.
¿Qué es un Pod en Podman?
Un pod en Podman es un grupo de uno o más contenedores que comparten el mismo namespace de red, PID y, opcionalmente, otros namespaces como IPC o UTS. Esto replica exactamente el comportamiento de un pod en Kubernetes: los contenedores dentro del pod pueden comunicarse entre sí vía localhost y comparten la misma IP y puertos.
La gran ventaja es que puedes desarrollar y probar configuraciones multi-contenedor localmente con Podman y luego desplegar exactamente la misma lógica en Kubernetes sin cambios.
# Crear un pod vacío
podman pod create --name mi-pod -p 8080:80
# Listar pods disponibles
podman pod ls
# Ver detalles del pod
podman pod inspect mi-pod
Agregar contenedores al Pod y compartir network namespace
Una vez creado el pod, puedes añadir contenedores que automáticamente hereden su network namespace. Esto significa que todos los contenedores dentro del pod ven localhost de forma compartida, ideal para aplicaciones como un frontend y backend que se comunican por HTTP interno.
# Crear contenedor dentro del pod (hereda network namespace)
podman run -d --pod mi-pod --name api nginx:alpine
# Segundo contenedor en el mismo pod
podman run -d --pod mi-pod --name backend python:3.12-slim python -m http.server 5000
# Desde el contenedor api, el backend responde en localhost:5000
podman exec api curl -s localhost:5000
Como ves, --pod mi-pod vincula el contenedor al pod existente. No necesitas exponer puertos individualmente porque el pod ya mapea -p 8080:80; todos los contenedores comparten esa misma interfaz. Si quieres que dos contenedores compartan también el namespace PID (para que puedan verse procesos entre sí), añade --share pid al crear el pod.
# Pod con namespaces compartidos: network + pid + ipc
podman pod create --name pod-compartido --share net,pid,ipc -p 3000:3000
# Ambos contenedores comparten red y PID namespace
podman run -d --pod pod-compartido --name app node:20 node server.js
podman run -d --pod pod-compartido --name sidecar alpine:latest sh -c "while true; do sleep 10; done"
# Verificar que app ve el PID del sidecar
podman exec app ps aux
Ejemplo multi-contenedor real: App web + Redis
Un caso clásico de uso de pods es una aplicación web con una base de datos en memoria. Con Podman y pods, ambos servicios corren en el mismo pod, comparten red y el contenedor web accede a Redis por localhost:6379, exactamente como ocurriría en un pod de Kubernetes.
# 1. Crear el pod exponiendo el puerto 8080
podman pod create --name webapp-pod -p 8080:8080
# 2. Agregar Redis
podman run -d --pod webapp-pod --name redis --rm redis:7-alpine
# 3. Agregar la aplicación web
podman run -d --pod webapp-pod --name webapp --rm \
-e REDIS_URL=redis://localhost:6379 \
your-registry/webapp:latest
# 4. Ver la estructura del pod
podman pod inspect webapp-pod | jq '.Containers'
Este patrón es idéntico a lo que harías en un manifiesto de Kubernetes: un Pod con dos containers compartiendo red. La diferencia es que aquí lo pruebas en tu máquina local sin minikube ni kind. Cuando estés listo para producción, exportas la misma lógica y la despliegas en Kubernetes sin sobresaltos.