DEV Community

Uhltak Therestismysecret
Uhltak Therestismysecret

Posted on

k3s vs Kubernetes: Warum das leichte K3s‑Cluster in Produktion punktet

Hook: Warum Ihr nächstes Projekt ein leichtes Cluster braucht

Stellen Sie sich vor, Sie müssten ein komplettes Baukastensystem für ein Haus in ein Taxi packen – das ist das wahre Gefühl, wenn Sie ein klassisches Kubernetes‑Cluster auf einem kleinen Edge‑Server betreiben wollen. Der Aufwand, die Ressourcen und die Komplexität sind oft größer als das eigentliche Ziel. Hier kommt k3s ins Spiel: ein minimalistisches, aber vollständig CNC‑kompatibles Kubernetes‑Distribution, das in 40 MB Platz findet und bereits nach wenigen Sekunden hochfährt. In diesem Beitrag zeige ich Ihnen, warum k3s nicht nur ein Test‑Spielzeug ist, sondern in Produktion — auf Edge‑Devices, kleinen VM‑Hosts und sogar Bare‑Metal‑Servern — hervorragend funktioniert.


1. Was ist k3s und wie unterscheidet es sich von „klassischem" Kubernetes?

Erklärung

k3s wurde 2019 von Rancher Labs (jetzt Teil von SUSE) als k3s‑light veröffentlicht. Es ist ein vollständig CNC‑konformes Kubernetes, das jedoch:

  • Komponenten verschlankt: Der API‑Server, Scheduler und Controller‑Manager laufen in einem einzigen Binärpaket.
  • SQLite als Standard‑Datenspeicher nutzt (optional MySQL/PostgreSQL). Das eliminiert die Notwendigkeit eines separaten etcd‑Clusters.
  • Container‑Runtime auf containerd setzt, ohne Docker‑Abhängigkeit.
  • Automatisches TLS‑Zertifikats‑Management liefert, sodass keine manuellen Cert‑Generierung nötig ist.

Beispiel‑Installation

# Installiere k3s mit einem Einzeiler – das ist das "Schlüsselloch"-Erlebnis
curl -sfL https://get.k3s.io | sh -
# Prüfe den Status
sudo k3s kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

Meine Einschätzung: Der ganze Installationsaufwand lässt sich in den Zeitraum eines Kaffees zusammenfassen. Für mich war das der Moment, an dem ich realisierte, dass k3s nicht nur ein Hobby‑Projekt, sondern ein ernstzunehmender Produktions‑Stack ist.


2. Grundlegende Architektur und Ressourcenbedarf

Erklärung

Ein klassisches Kubernetes‑Cluster besteht aus mindestens drei Maschinen: Master (etcd, API‑Server) und zwei Worker. k3s fasst alles in einen Master‑Node zusammen, der gleichzeitig Worker‑Rollen übernehmen kann. Dadurch sinkt der Ressourcen‑Footprint dramatisch:

  • CPU: 200 mCPU (0,2 vCPU) für den Master‑Prozess.
  • RAM: ~512 MiB für den gesamten Stack.
  • Speicher: SQLite‑DB ≈ 25 MiB, oder 200 MiB für eine kleine MySQL‑Instanz.

Praxis‑Beispiel: Ressourcen‑Profil

# Zeige den Ressourcenverbrauch eines frisch gestarteten k3s‑Agents
sudo systemd-cgtop
# Ausgabe (Beispiel)
# Name                     CPU     Memory
# k3s                       5%     150MiB
# systemd-journald          1%     30MiB
Enter fullscreen mode Exit fullscreen mode

Meine Einschätzung: Auf einem Raspberry Pi 4 (8 GiB) laufen problemlos 30‑40 Pods, was für Edge‑Anwendungen völlig ausreicht. Das gibt mir den Spielraum, für Monitoring‑Sidecars und Service‑Meshes wie Linkerd oder Istio zu reservieren.


3. Production‑Ready Features – Netzwerk, Storage & Sicherheit

Erklärung

k3s liefert out‑of‑the‑box viele Features, die bei einem Minimal‑K8s‑Setup sonst extra konfiguriert werden müssten:

  1. Flannel CNI (oder alternative CNI‑Plugins über --flannel-iface).
  2. Helm‑Controller integriert, sodass Helm‑Charts per API deployt werden können.
  3. Embedded Service‑LB (klipper‑lb) für Load‑Balancing auf dem Host‑Interface.
  4. PodSecurityPolicies über den integrierten OPA‑Gatekeeper.

Beispiel‑Deploy eines einfachen Nginx‑Ingress mit Helm

# 1. Helm‑Repo hinzufügen (k3s übernimmt das automatisch, aber wir zeigen es explizit)
sudo k3s kubectl helm repo add bitnami https://charts.bitnami.com/bitnami
# 2. Installiere ein Nginx‑Ingress‑Controller
sudo k3s kubectl helm install my-nginx bitnami/nginx-ingress-controller \
    --set service.type=LoadBalancer \
    --set replicaCount=2
# 3. Prüfe den LoadBalancer-Endpoint
sudo k3s kubectl get svc my-nginx-nginx-ingress-controller
Enter fullscreen mode Exit fullscreen mode

Meine Einschätzung: Der Helm‑Controller macht das Deployment fast skriptfrei, gleichzeitig behält ich die volle Kontrolle über die Release‑Historie. Für kundennahe Edge‑Deployments spart das wertvolle Zeit.


4. Edge‑Use‑Cases: Warum k3s im Edge‑Umfeld brilliert

Erklärung

Im Edge‑Computing sind drei Faktoren kritisch: geringe Latency, geringe Ressourcennutzung, und einfache Wartung. k3s passt perfekt, weil es:

  • offline‑fähig ist (lokale Registry, keine Cloud‑Abhängigkeit).
  • Auto‑Upgrade via k3s update ohne Downtime.
  • K3s‑Agent kann per K3S_URL und K3S_TOKEN zu einem entfernten Master joinen, ideal für „Hub‑and‑Spoke“-Topologien.

Beispiel‑Setup eines Hub‑and‑Spoke mit zwei Agents

# Auf dem Master (Hub) erzeugen wir ein Token
sudo cat /var/lib/rancher/k3s/server/node-token
# Auf jedem Edge‑Device (Spoke) starten wir den Agenten
curl -sfL https://get.k3s.io | K3S_URL=https://<MASTER_IP>:6443 \
    K3S_TOKEN=<TOKEN> sh -
# Prüfe, ob der Agent im Cluster erscheint
sudo k3s kubectl get nodes -o wide
Enter fullscreen mode Exit fullscreen mode

Meine Einschätzung: Das Konzept ist so simpel wie ein SSH‑Login. Ich habe in meinem Homelab bereits ein zentrales k3s‑Hub auf einem vCPU‑t2‑small‑Instance und drei Raspberry Pi‑Spokes. Der gesamte Stack wird per Ansible provisioniert und lässt sich mit einem Klick aktualisieren.


5. Häufige Fehler und Stolperfallen bei k3s‑Deployments

Fehler Ursache Abhilfe
1️⃣ Netzwerk‑Isolierung fehlt --flannel-iface nicht gesetzt, wenn mehrere NICs vorhanden sind. Beim Installieren INSTALL_K3S_EXEC='--flannel-iface=eth1' nutzen.
2️⃣ SQLite‑Datenbankkorruption Unsachgemäßes Herunterfahren (Power‑Loss) bei aktiven Schreibvorgängen. Setzen Sie --datastore-endpoint=mysql://user:pw@host/db für produktive Umgebungen.
3️⃣ Ressourcen‑Engpässe Zu viele Pods auf einem 1‑CPU‑Node. Nutzen Sie resources.limits und requests in Pod‑Spec, evtl. k3s server --disable-agent für dedizierte Master‑Nodes.
4️⃣ Helm‑Release‑Drift Manuelle Änderungen an Deployments außerhalb von Helm. helm diff oder helm rollback verwenden, und GitOps‑Workflow einführen.
5️⃣ Fehlende TLS‑Rotation Zertifikate laufen ab, weil --no-deploy=servicelb deaktiviert wurde. Aktivieren Sie das eingebaute cert‑manager-Addon (k3s server --disable=servicelb).

Meine Einschätzung: Die meisten dieser Fehler lassen sich durch Infrastructure‑as‑Code vermeiden. Ich habe dafür ein kleines Repository mit Terraform (für die Cloud‑VMs) und Ansible (für k3s‑Bootstrap) gebaut – das reduziert menschliche Eingriffe auf ein Minimum.


6. Fazit & konkreter nächster Schritt

k3s ist keine abgespeckte Version von Kubernetes, sondern ein strategisch optimiertes Distribution, das die gleiche API, den gleichen Scheduler und das gleiche Ökosystem liefert – jedoch mit einem Footprint, den selbst ein alter Laptop tragen kann. Für Edge‑Deployments, kleine Cloud‑Instanzen und Selbst‑Hosted‑Umgebungen ist k3s die realistische Alternative, weil es:

  • Einfach zu installieren ist (Ein‑Zeilen‑Script).
  • Produktions‑ready Features out‑of‑the‑box bietet.
  • Skalierbar von 1 Node bis zu mehreren Hubs mit hunderten Agents.
  • Sicher ist, wenn man SQLite nur für Test‑Umgebungen nutzt und in Produktion auf ein externes DB‑Backend schaltet.

Konkreter nächster Schritt für Sie

  1. Installieren Sie k3s auf einer VM (z. B. ubuntu:22.04) mit dem Einzeiler oben.
  2. Deployen Sie ein Helm‑Chart (z. B. bitnami/nginx) und prüfen Sie den LoadBalancer‑Endpoint.
  3. Schalten Sie auf MySQL um, indem Sie --datastore-endpoint beim Server‑Start angeben – das gibt Ihnen Ausfallsicherheit.
  4. Automatisieren Sie das Ganze mit Ansible‑Playbooks und speichern Sie die Git‑Ops‑Definitionen in einem Repository.
  5. Monitoring hinzufügen – Prometheus + Grafana läuft nativ als Helm‑Chart auf k3s.

Wenn Sie diese Schritte innerhalb einer Woche erledigt haben, besitzen Sie ein leichtes, skalierbares und wartbares Kubernetes‑Ökosystem, das bereit ist, Ihre Edge‑ oder Small‑Cloud‑Anwendungen in Produktion zu bringen.


Jetzt liegt es an Ihnen: Packen Sie das nächste Projekt in ein 40 MB‑Cluster und überzeugen Sie sich selbst, dass Größe nicht gleichbedeutend mit Leistung ist.

Top comments (0)