Kubernetes durch systemd ersetzen (2024)
(blog.yaakov.online)- Der Autor schildert, wie er beim Betrieb privater Server von der Komplexität und dem Ressourcenverbrauch von Kubernetes frustriert war und es durch eine Kombination aus systemd und Podman ersetzt hat
- Kubernetes wirkt durch GitOps und Automatisierung attraktiv, ist in kleinen Umgebungen jedoch ein übermäßig schwergewichtiges System
- Mit Podmans automatischer Update-Funktion und der Erzeugung von systemd-Services lassen sich die Kernfunktionen von Kubernetes auf einfache Weise nachbilden
- Außerdem wird erklärt, wie sich durch die Kombination von systemctl und loginctl Services auf Benutzerebene automatisch starten lassen, wobei betont wird, dass der Ressourcenverbrauch auf dem VPS deutlich gesunken ist
- Allerdings wird erwähnt, dass Podmans systemd-Integration bald durch einen neuen Ansatz namens „Quadlet“ ersetzt werden soll
Einleitung: Die erste Begegnung mit Kubernetes
- Der Autor berichtet von seinem Versuch, 2018 beim Experimentieren mit Kubernetes einen Cluster auf einem privaten NUC aufzubauen
- Kubernetes ist komplex, funktioniert im Kern aber nach folgender Schleifenlogik:
- Aktuellen Zustand erfassen → gewünschten Zustand berechnen → Unterschiede berechnen → anwenden
- Die Automatisierungsfunktionen mit verschiedenen Komponenten wie cert-manager waren äußerst beeindruckend
Die überzogenen Ressourcenanforderungen von Kubernetes
- Auf einem privaten Server (NUC) verursachte Kubernetes dauerhafte CPU-Auslastung, Lüftergeräusche und Hitzeentwicklung
- Auch verschiedene Distributionen wie Azure, MicroK8s und K3S verbrauchen erhebliche Ressourcen
- MicroK8s: 12 % CPU-Auslastung (2-vCPU-VPS)
- K3S: 6 % CPU-Auslastung (2-vCPU Ampere A1)
Die Verlockung von GitOps-Automatisierung
- Mit Tools wie Flux war Git-basierte Deployment-Automatisierung möglich und sehr komfortabel
- Wenn nur das Container-Image auf GitHub gepusht wurde, deployte der Server automatisch die neueste App-Version
- Ohne Kubernetes war eine solche Automatisierung jedoch sehr schwer umzusetzen
Podman und systemd treten auf den Plan
- Podman ist eine Alternative zu Docker und bietet die Funktion, Container in systemd-Services umzuwandeln
- Mit
podman generate systemdlassen sich Service-Dateien automatisch erzeugen - Über das Tag
io.containers.autoupdatesind automatische Image-Updates einmal täglich möglich - Mit Verweis auf Fedora Magazine gelang es dem Autor, auf diese Weise erfolgreich eine Kubernetes-Ersatzumgebung aufzubauen
Die drei nötigen Bausteine
-
systemctl --user enable mycontainer.service- Richtet ein, dass der Container beim Login automatisch startet
-
loginctl enable-linger- Richtet ein, dass die Benutzersitzung beim Serverstart aktiviert wird
-
Podmans Auto-Update-Funktion
- Mit diesen drei Bausteinen ließen sich 99 % der von Kubernetes bereitgestellten Funktionen einfacher und leichter ersetzen
Ergebnis der Migration
- Alle Services wurden vom bisherigen VPS auf einen neuen VPS migriert
- Der Ressourcenbedarf wurde halbiert, während sich die Leistung sogar verbesserte, die Service-Dichte stieg und Kosten konnten gesenkt werden
Nächste Aufgabe: Quadlet
- Leider soll Podmans systemd-Integration bald eingestellt werden
- Stattdessen soll auf eine neue Definitionsform in Gestalt von Quadlet-Dateien umgestellt werden
- Abschließend merkt der Autor an, dass man sich darauf vorbereiten müsse, diese neue Technik zu erlernen
1 Kommentare
Hacker-News-Kommentare
Wenn man Kubernetes nur dafür nutzt, Container-Images auszuführen und zu aktualisieren, ist das womöglich übertrieben
Es wurde versucht, mit Docker einige kleine Websites zu betreiben, aber das Aktualisieren und Testen von Images war schwierig
rsyncauf den Deployment-Host übertragen und das Deployment-Skript ausgeführtDas Verwalten eines Kubernetes-Clusters ist kein Problem, aber für Hobbyprojekte ist der Einsatz wegen des Ressourcenbedarfs schwierig
docker compose-Befehle verwendet und anstelle von Ingress die Container-Erkennung von Traefikcrontabzu verwaltensystemd löst viele Probleme und sollte nicht ignoriert werden
systemctl editlassen sich Konfigurationsdateien bearbeitenEin Homelab wird mit podman-systemd betrieben, und bei jeder Untersuchung neuer Kubernetes-Varianten entsteht kein zusätzlicher Aufwand
Die Verwaltung von Containern innerhalb von systemd mit Quadlet ist der nächste Schritt
Mit Skate wurde ein System gebaut, das Multihost und Kubernetes-Manifeste unterstützt
Mit
docker compose-Befehlen und Caddy lassen sich Zertifikate automatisch beziehendocker compose up -d --pull alwayslässt sich das einfach einrichtenscpundsshaufgebautsystemd bietet inzwischen mit ParticleOS eine offiziell unterstützte OS-Distribution für unveränderliche Workflows
Deployments auf einen einzelnen Server sollten nicht kompliziert sein; dafür wurde ein Tool namens Harbormaster geschrieben