Reemplazar Kubernetes con systemd (2024)
(blog.yaakov.online)- 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 systemdse pueden generar automáticamente archivos service - Mediante la etiqueta
io.containers.autoupdatese 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
-
systemctl --user enable mycontainer.service- Configura el contenedor para que se ejecute automáticamente al iniciar sesión
-
loginctl enable-linger- Configura la sesión del usuario para que se active al arrancar el servidor
-
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
Opiniones de Hacker News
Si Kubernetes se ve solo como una forma de ejecutar y actualizar imágenes de contenedores, puede ser excesivo
Intentó operar algunos sitios web pequeños usando Docker, pero era difícil actualizar y probar imágenes
rsyncde los cambios al host de despliegue y ejecutar el script de despliegueNo tiene problemas para administrar un clúster de Kubernetes, pero en proyectos personales es difícil usarlo por los requisitos de recursos
crontaben lugar de usar CronJobsSystemd resuelve muchos problemas y no debe ignorarse
systemctl editOpera su homelab con podman-systemd, y cada vez que investiga una nueva variante de Kubernetes no siente que haya trabajo extra
El siguiente paso es usar Quadlet para administrar contenedores dentro de systemd
Creó Skate para construir un sistema con soporte para multihost y manifiestos de Kubernetes
Es posible usar comandos de Docker compose y Caddy para obtener certificados automáticamente
docker compose up -d --pull alwaysSystemd 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