Remplacer Kubernetes par systemd (2024)
(blog.yaakov.online)- L’auteur explique comment, frustré par la complexité et la consommation de ressources de Kubernetes pour faire tourner ses serveurs personnels, il l’a remplacé par une combinaison de systemd et Podman
- Kubernetes séduit par GitOps et l’automatisation, mais reste un système excessivement lourd pour les petits environnements
- En utilisant la mise à jour automatique de Podman et la génération de services systemd, il est possible de reproduire simplement les fonctions essentielles de Kubernetes
- Il décrit aussi l’exécution automatique de services au niveau utilisateur en combinant systemctl et loginctl, en soulignant une forte baisse de la consommation de ressources sur son VPS
- Il précise toutefois que l’intégration systemd de Podman sera bientôt remplacée par une nouvelle approche appelée "Quadlet"
Introduction : première rencontre avec Kubernetes
- Il revient sur son expérience de 2018, lorsqu’il a expérimenté Kubernetes en tentant de déployer un cluster sur un NUC personnel
- Kubernetes est complexe, mais son fonctionnement repose fondamentalement sur la boucle répétitive suivante :
- observation de l’état actuel → calcul de l’état souhaité → calcul de l’écart → application
- Les fonctions d’automatisation reposant sur divers composants comme cert-manager l’avaient fortement impressionné
Les exigences excessives de Kubernetes en ressources
- Sur un serveur personnel (NUC), Kubernetes entraînait une utilisation CPU continue, du bruit de ventilateur et de la chaleur
- Différentes distributions comme Azure, MicroK8s et K3S consommaient elles aussi des ressources importantes
- MicroK8s : 12 % de CPU utilisé (VPS 2 vCPU)
- K3S : 6 % de CPU utilisé (Ampere A1 2 vCPU)
La tentation de l’automatisation GitOps
- Des outils comme Flux rendaient l’automatisation des déploiements basée sur Git extrêmement pratique
- Il suffisait de pousser une image de conteneur sur GitHub pour que le serveur déploie automatiquement la dernière version de l’application
- Mais sans Kubernetes, mettre en place une telle automatisation était très difficile
L’arrivée de Podman et systemd
- Podman est une alternative à Docker et permet de transformer des conteneurs en services systemd
podman generate systemdpermet de générer automatiquement des fichiers de service- Le tag
io.containers.autoupdatepermet une mise à jour automatique des images une fois par jour - En s’appuyant sur cette méthode présentée dans Fedora Magazine, il a réussi à mettre en place un environnement remplaçant Kubernetes
Les trois éléments nécessaires
-
systemctl --user enable mycontainer.service- Configure le conteneur pour qu’il se lance automatiquement à la connexion
-
loginctl enable-linger- Configure l’activation de la session utilisateur au démarrage du serveur
-
La fonction d’auto-update de Podman
- Avec ces trois éléments, il a pu remplacer 99 % des fonctions fournies par Kubernetes de manière plus simple et plus légère
Résultat de la migration
- Il a migré l’ensemble de ses services d’un VPS existant vers un nouveau VPS
- Les ressources nécessaires ont été divisées par deux, tandis que les performances se sont au contraire améliorées, avec une densité de services plus élevée et des coûts réduits
Prochaine étape : Quadlet
- Malheureusement, l’intégration systemd de Podman devrait bientôt être abandonnée
- À la place, elle migrera vers un nouveau mode de définition reposant sur les fichiers Quadlet
- L’article se conclut en soulignant qu’il faudra se préparer à apprendre cette nouvelle technologie
1 commentaires
Avis sur Hacker News
Si l’on considère Kubernetes uniquement comme un moyen d’exécuter et de mettre à jour des images de conteneurs, cela peut être excessif
J’ai essayé d’exploiter quelques petits sites web avec Docker, mais il était difficile de mettre à jour les images et de les tester
Je n’ai pas de problème à gérer un cluster Kubernetes, mais pour des projets perso, son utilisation est difficile à cause des besoins en ressources
Systemd résout beaucoup de problèmes et ne doit pas être ignoré
systemctl editpermet de modifier les fichiers de configurationJ’exploite mon homelab avec podman-systemd, et chaque fois que j’étudie une nouvelle variante de Kubernetes, cela n’ajoute pas de contrainte supplémentaire
Utiliser Quadlet pour gérer les conteneurs dans systemd est l’étape suivante
J’ai créé Skate pour construire un système prenant en charge le multi-hôte et les manifestes Kubernetes
Il est possible d’utiliser les commandes Docker compose et Caddy pour obtenir automatiquement des certificats
docker compose up -d --pull alwaysSystemd propose désormais ParticleOS, une distribution d’OS officiellement prise en charge pour les workflows immuables
Je pense que déployer sur un seul serveur ne devrait pas être compliqué, et j’ai écrit un outil appelé Harbormaster