Contenerización con Podman y Kubernetes sin Docker en servidores de producción
La industria del alojamiento web y la administración de servidores está experimentando un cambio de paradigma silencioso pero profundo. Durante años, Docker fue sinónimo de contenedores, pero su modelo monolítico y la dependencia de un demonio central (dockerd) han comenzado a mostrar costuras en entornos de producción críticos. La alternativa que está ganando tracción real en 2025 es la combinación de Podman Kubernetes sin Docker, un stack que promete mayor seguridad, menor superficie de ataque y una arquitectura verdaderamente nativa de la nube.
En este artículo, exploraremos cómo implementar y gestionar contenedores en servidores de producción utilizando Podman como motor de ejecución y Kubernetes como orquestador, eliminando por completo la dependencia de Docker. Analizaremos las ventajas de los contenedores daemonless, las implicaciones de seguridad, la compatibilidad con el estándar OCI y cómo esta configuración se posiciona como la opción más robusta para 2025.
El fin de la era Docker: Por qué migrar a Podman
Docker popularizó los contenedores, pero su arquitectura presenta limitaciones en producción. El demonio dockerd se ejecuta como root, tiene acceso total al sistema y representa un punto único de fallo. Si el demonio se cuelga o es comprometido, todos los contenedores del host se ven afectados. Además, el modelo cliente-servidor de Docker introduce latencia y complejidad innecesarias en entornos donde cada milisegundo cuenta.
Podman (Pod Manager) fue diseñado desde cero para superar estas limitaciones. Es un motor de contenedores daemonless, lo que significa que no requiere un proceso en segundo plano para funcionar. Cada contenedor se ejecuta como un proceso hijo directo del usuario que lo lanza, lo que permite una integración más estrecha con systemd y un control granular de recursos.
[INFO] Podman es 100% compatible con el estándar OCI (Open Container Initiative), lo que garantiza que las imágenes y los contenedores creados con Docker funcionen sin modificaciones en Podman. La migración es transparente.
Arquitectura daemonless: Seguridad y rendimiento
La principal diferencia entre Docker y Podman radica en la arquitectura. Mientras Docker utiliza un demonio centralizado que gestiona todas las operaciones, Podman elimina esta capa intermedia. Esto tiene implicaciones directas en la seguridad contenedores:
- Menos superficie de ataque: Sin demonio, no hay proceso que escuche en un socket Unix o TCP que pueda ser explotado. Cada contenedor es un proceso aislado.
- Ejecución rootless: Podman permite ejecutar contenedores sin privilegios de root de forma nativa. Esto significa que incluso si un atacante compromete un contenedor, no puede escalar privilegios al host.
- Integración con systemd: Podman puede generar unidades systemd para cada contenedor o pod, permitiendo que el sistema operativo gestione el ciclo de vida de los contenedores como si fueran servicios tradicionales.
En términos de rendimiento, al eliminar el demonio, la latencia de creación y gestión de contenedores se reduce drásticamente. Los benchmarks de 2025 muestran que Podman puede iniciar contenedores hasta un 30% más rápido que Docker en cargas de trabajo intensivas.
Podman Kubernetes: El matrimonio perfecto para producción
Kubernetes es el estándar de facto para orquestación, pero su integración con Docker siempre ha sido problemática. Docker no implementa el estándar CRI (Container Runtime Interface) de Kubernetes de forma nativa, lo que obliga a usar un adaptador como dockershim (ya obsoleto desde Kubernetes 1.24). Podman, en cambio, se integra perfectamente con Kubernetes a través de CRI-O, un runtime ligero y optimizado.
La combinación Podman Kubernetes permite:
- Crear pods directamente: Podman puede generar manifiestos YAML de Kubernetes a partir de pods locales con el comando
podman generate kube. Esto facilita el desarrollo local y el despliegue en producción. - Gestión unificada: Los pods de Podman son equivalentes a los pods de Kubernetes, lo que permite probar configuraciones complejas localmente y luego desplegarlas sin cambios.
- Red nativa: Podman utiliza CNI (Container Network Interface) para la gestión de redes, el mismo estándar que Kubernetes, lo que elimina problemas de compatibilidad.
Cómo desplegar un clúster Kubernetes sin Docker
Para montar un clúster de producción sin Docker, necesitas configurar CRI-O como runtime. Aquí tienes un ejemplo de instalación en un nodo worker de Kubernetes usando Podman como base:
# Instalar CRI-O (runtime compatible con Podman)
sudo dnf install -y cri-o cri-tools
# Configurar CRI-O para usar Podman como backend
sudo sed -i 's|runtime_type = "oci"|runtime_type = "podman"|g' /etc/crio/crio.conf
# Habilitar e iniciar CRI-O
sudo systemctl enable crio
sudo systemctl start crio
# Verificar que Kubernetes reconoce el runtime
kubectl get nodes -o wide
[TIP] Si ya tienes un clúster funcionando con Docker, puedes migrar los nodos uno por uno. Kubernetes permite drenar los pods de un nodo, cambiar el runtime y volver a ponerlo en servicio sin downtime.
Contenedores daemonless en producción: Casos de uso reales
La arquitectura daemonless no es solo una teoría; tiene aplicaciones prácticas que mejoran la operativa diaria. Por ejemplo, en servidores de hosting compartido, donde varios usuarios necesitan ejecutar contenedores aislados, Podman permite que cada usuario gestione sus propios contenedores sin interferir con los demás.
Ejemplo: Despliegue de una aplicación web con Podman
Supongamos que queremos desplegar un stack LEMP (Linux, Nginx, MariaDB, PHP) en un servidor de producción sin Docker. Con Podman, podemos crear un pod que contenga todos los servicios:
# Crear un pod con puertos expuestos
podman pod create --name webapp -p 80:80 -p 443:443
# Añadir contenedores al pod
podman run -d --pod webapp --name nginx nginx:alpine
podman run -d --pod webapp --name mariadb -e MYSQL_ROOT_PASSWORD=secret mariadb:10
podman run -d --pod webapp --name php-fpm php:8.2-fpm
# Generar manifiesto Kubernetes para despliegue
podman generate kube webapp > webapp.yaml
Este manifiesto YAML se puede desplegar directamente en un clúster Kubernetes sin modificaciones. La ventaja es que el desarrollo local y la producción comparten exactamente la misma configuración.
Seguridad contenedores: Más allá del aislamiento
La seguridad contenedores es una de las principales preocupaciones en producción. Podman ofrece varias características que Docker no puede igualar:
- SELinux y AppArmor: Podman se integra nativamente con estos módulos de seguridad del kernel, aplicando políticas de control de acceso obligatorio (MAC) a cada contenedor.
- Capabilities: Podman permite eliminar todas las capabilities de Linux por defecto y solo añadir las necesarias, siguiendo el principio de mínimo privilegio.
- Rootless: Como mencionamos, ejecutar contenedores sin root es la opción más segura. Podman lo hace posible sin necesidad de configuraciones complejas.
- Firmado de imágenes: Podman soporta firmado y verificación de imágenes mediante GPG, lo que garantiza que solo se ejecuten imágenes verificadas.
[WARNING] Aunque Podman es más seguro por diseño, no es inmune a vulnerabilidades. Mantén actualizado el runtime y aplica las mismas buenas prácticas que usarías con cualquier tecnología de contenedores.
OCI compatible 2025: El estándar que unifica el ecosistema
El año 2025 marca un hito en la madurez del estándar OCI. Todas las herramientas modernas de contenedores, incluyendo Podman, Docker, containerd y CRI-O, son OCI compatible 2025. Esto significa que las imágenes, los runtimes y los formatos de distribución son intercambiables.
Para los administradores de sistemas, esto implica:
- Portabilidad total: Puedes construir una imagen con Podman, almacenarla en un registro compatible con OCI (como Harbor o Quay) y ejecutarla en cualquier runtime OCI.
- Herramientas unificadas: Comandos como
skopeo(para manipular imágenes) ybuildah(para construir imágenes sin Dockerfile) se convierten en estándares de facto. - Menos vendor lock-in: No estás atado a un solo proveedor. Puedes migrar de Docker a Podman y viceversa sin cambios en tus pipelines.
Migración práctica: De Docker a Podman en servidores de producción
Migrar un servidor de producción de Docker a Podman es un proceso gradual, pero bien definido. Aquí tienes los pasos clave:
- Auditar dependencias: Identifica si usas docker-compose (Podman lo reemplaza con
podman-composeopodman play kube) o plugins de Docker. - Instalar Podman: En distribuciones como RHEL 9, Fedora o CentOS Stream, Podman viene preinstalado. En Ubuntu/Debian, instálalo desde los repositorios oficiales.
- Alias para compatibilidad: Crea alias para que los comandos de Docker funcionen con Podman:
alias docker=podman - Migrar volúmenes y redes: Podman usa el mismo formato de volúmenes que Docker. Puedes montar volúmenes existentes sin problemas.
- Probar en staging: Despliega una copia de tu stack en un entorno de pruebas con Podman antes de tocar producción.
- Migrar gradualmente: Si usas Kubernetes, cambia el runtime de los nodos uno por uno.
Ejemplo de migración de docker-compose a Podman
Si tienes un archivo docker-compose.yml, puedes ejecutarlo directamente con Podman:
# Instalar podman-compose
pip install podman-compose
# Ejecutar el stack
podman-compose up -d
O, mejor aún, convertirlo a un pod de Kubernetes:
# Generar manifiesto YAML a partir del compose
podman-compose --podman-pod-args="--name mystack" up -d
podman generate kube mystack > kube-deployment.yaml
# Desplegar en Kubernetes
kubectl apply -f kube-deployment.yaml
Conclusión: El futuro es daemonless
La contenerización sin Docker no es una moda pasajera; es una evolución lógica hacia sistemas más seguros, eficientes y estándar. La combinación de Podman Kubernetes ofrece una plataforma de producción robusta que cumple con los estándares OCI compatible 2025 y elimina las vulnerabilidades inherentes a los demonios centralizados.
Para los administradores de sistemas, el mensaje es claro: si aún no has probado Podman en producción, 2025 es el año para hacerlo. La migración es sencilla, los beneficios en seguridad son tangibles y la comunidad está creciendo a un ritmo acelerado. Los contenedores daemonless no solo son el futuro; son el presente de la infraestructura moderna.
[TIP] Empieza por migrar servicios no críticos a Podman en un entorno de staging. Una vez que domines la herramienta, la transición a producción será natural y sin sobresaltos.
