2 puntos por GN⁺ 2025-05-06 | 1 comentarios | Compartir por WhatsApp
  • El autor comparte su experiencia al reemplazar la complejidad y el consumo de recursos de Kubernetes en la operación de un servidor personal con una combinación de systemd y Podman
  • Kubernetes resulta atractivo por GitOps y la automatización, pero en entornos pequeños es un sistema excesivamente pesado
  • Aprovechando la función de actualización automática de Podman y la generación de servicios systemd, es posible implementar de forma simple las funciones clave que antes ofrecía Kubernetes
  • También explica la ejecución automática de servicios a nivel de usuario combinando systemctl y loginctl, y destaca que el consumo de recursos del VPS se redujo de forma drástica
  • Sin embargo, menciona que la integración de Podman con systemd pronto será reemplazada por un nuevo método llamado "Quadlet"

Introducción: primer encuentro con Kubernetes

  • Presenta su experiencia de 2018, cuando experimentó con Kubernetes e intentó construir un clúster en un NUC personal
  • Kubernetes es complejo, pero en esencia funciona con una estructura de bucle repetitivo como la siguiente:
    • identificar el estado actual → calcular el estado deseado → calcular la diferencia → aplicar
  • Las capacidades de automatización usando varios componentes como cert-manager fueron muy impresionantes

Las excesivas demandas de recursos de Kubernetes

  • En un servidor personal (NUC), Kubernetes provocaba uso constante de CPU, ruido del ventilador y calor
  • Distintas distribuciones como Azure, MicroK8s y K3S también consumen recursos considerables
    • MicroK8s: 12% de uso de CPU (VPS de 2 vCPU)
    • K3S: 6% de uso de CPU (Ampere A1 de 2 vCPU)

La tentación de la automatización con GitOps

  • Con herramientas como Flux era muy conveniente habilitar la automatización de despliegues basada en Git
  • Bastaba con hacer push de la imagen del contenedor a GitHub para que el servidor desplegara automáticamente la versión más reciente de la app
  • Pero sin Kubernetes, implementar una automatización de este tipo era muy difícil

La llegada de Podman y systemd

  • Podman es una alternativa a Docker y tiene la capacidad de convertir contenedores en servicios systemd
  • Con podman generate systemd se pueden generar automáticamente archivos service
  • Mediante la etiqueta io.containers.autoupdate se puede habilitar la actualización automática de imágenes una vez al día
  • Tomando como referencia este método de Fedora Magazine, logró configurar con éxito un entorno alternativo a Kubernetes

Los tres componentes necesarios

  1. systemctl --user enable mycontainer.service

    • Configura el contenedor para que se ejecute automáticamente al iniciar sesión
  2. loginctl enable-linger

    • Configura la sesión del usuario para que se active al arrancar el servidor
  3. La función auto-update de Podman

  • Con estos tres elementos pudo reemplazar de forma más simple y ligera el 99% de las funciones que ofrecía Kubernetes

Resultado de la migración

  • Migró todos los servicios de un VPS existente a un VPS nuevo
  • Los recursos se redujeron a la mitad, pero el rendimiento incluso mejoró, aumentando la densidad de servicios y reduciendo costos

Próximo reto: Quadlet

  • Lamentablemente, la integración de Podman con systemd está próxima a ser descontinuada
  • En su lugar, se migrará a un nuevo formato de definición llamado archivos Quadlet
  • Concluye agregando que será necesario prepararse para aprender esta nueva tecnología

1 comentarios

 
GN⁺ 2025-05-06
Opiniones de Hacker News
  • Si Kubernetes se ve solo como una forma de ejecutar y actualizar imágenes de contenedores, puede ser excesivo

    • Kubernetes proporciona los recursos necesarios para que los contenedores compartan estado, se conecten entre sí y accedan a configuraciones o secretos
    • El costo de CPU y memoria proviene de la gestión de contenedores y de proporcionar los recursos necesarios
    • En sistemas distribuidos, no todos los sistemas funcionan como uno quiere, por lo que el administrador intenta continuamente alcanzar el estado deseado
  • Intentó operar algunos sitios web pequeños usando Docker, pero era difícil actualizar y probar imágenes

    • Reemplazó todo con un script que genera unidades de systemd en Debian y reinicia al cambiar servicios
    • Usa una VM de prueba para hacer rsync de los cambios al host de despliegue y ejecutar el script de despliegue
    • Todo el sistema corre en un VPS de 2 GB, y podría reducirse a 1 GB si Wordpress tuviera soporte oficial para SQLite
    • Usa Mariadb para minimizar los requisitos de soporte
  • No tiene problemas para administrar un clúster de Kubernetes, pero en proyectos personales es difícil usarlo por los requisitos de recursos

    • Kubernetes consume demasiados recursos para correr en un VPS de $10/mes
    • Usa manualmente comandos de docker compose y la detección de contenedores de Traefik en lugar de Ingress
    • Escribe scripts pequeños para administrar crontab en lugar de usar CronJobs
    • Está intentando resolver de forma menos eficiente problemas que Kubernetes ya resolvió
    • Quiere una alternativa ligera que ofrezca una API compatible con Kubernetes y funcione bien en instancias VPS baratas
  • Systemd resuelve muchos problemas y no debe ignorarse

    • Ofrece varias funciones como machinectl, nspawn, vmspawn e importctl
    • homed/homectl amplía la gestión de usuarios, mounts monta unidades automáticamente, boot controla el inicio y detención de servicios, y timers reemplaza a cron
    • Las unidades de servicio controlan tareas, y los archivos de configuración pueden editarse con systemctl edit
  • Opera su homelab con podman-systemd, y cada vez que investiga una nueva variante de Kubernetes no siente que haya trabajo extra

    • Usa playbooks de Ansible para descargar imágenes por adelantado y colocar los archivos de unidades en la ubicación adecuada
    • Opera el stack de una impresora 3D Voron con podman-systemd y está considerando cambiar a mkosi y systemd-sysupdate
    • Existe la molestia de tener que convertir archivos de Docker Compose en unidades de systemd
    • Podman reduce la complejidad de la configuración de usuarios/permisos
  • El siguiente paso es usar Quadlet para administrar contenedores dentro de systemd

    • Se pueden encontrar más detalles en el blog de Red Hat
  • Creó Skate para construir un sistema con soporte para multihost y manifiestos de Kubernetes

    • Internamente usa podman y systemd
  • Es posible usar comandos de Docker compose y Caddy para obtener certificados automáticamente

    • Se puede configurar de forma sencilla con el comando docker compose up -d --pull always
    • La configuración de CI usa scp y ssh
    • Es simple y también funciona en una máquina de desarrollo
  • Systemd ahora ofrece ParticleOS, una distribución de SO con soporte oficial para flujos de trabajo inmutables

  • Cree que desplegar en un solo servidor no debería ser complicado, y escribió una herramienta llamada Harbormaster

    • Usa archivos YAML para descubrir repositorios y ejecutar archivos de Docker Compose
    • Mantiene todo el estado en un solo directorio para facilitar los respaldos
    • Es la herramienta de orquestación de contenedores más sencilla necesaria para un solo servidor