>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Rust

Kubernetes von Grund auf in Rust neu schreiben: Ein Blick auf das Rusternetes-Projekt

Witze darüber, dass Systemprogrammierer alles in Rust neu schreiben wollen, sind längst ein klassischer Trope. Normalerweise enden solche Vorhaben im Stadium von „Hello World" oder beim Parsen einfacher Konfigurationen. Aber bei Rusternetes verlief die Geschichte völlig anders. Der Autor des Projekts hat sich Kubernetes selbst vorgenommen und es von Grund auf neu geschrieben.

Dies ist kein Wrapper um Go-Code oder ein abgespecktes Test-Mock. Das Repository enthält eine vollwertige Control-Plane und Node-Komponenten: API-Server, Scheduler, Controller-Manager, Kubelet und Kube-Proxy. Alles ist in Rust geschrieben, ohne Go-Drittabhängigkeiten.

Das Projekt enthält über 216.000 Zeilen Code, aufgeteilt in 10 Crates, 31 Controller und mehr als 3.100 Unit-Tests. Die Entwickler verifizieren die Kompatibilität mit der offiziellen Kubernetes e2e-Testsuite (v1.35) über Sonobuoy. Derzeit bestehen 94 % der Konformitätstests (415 von 441) erfolgreich.

Warum noch ein Kubernetes

Das originale Kubernetes ist in Go geschrieben und erfordert erhebliche Ressourcen. Um selbst einen minimalen lokalen Cluster wie Minikube oder K3s zu starten, muss man eine virtuelle Maschine zuweisen oder mehrere schwere Container mit etcd ausführen.

Rusternetes löst dieses Problem mit flexiblen Deployment-Optionen. Es hat drei Betriebsmodi:

  1. Klassischer Cluster mit etcd. Alle Komponenten laufen in separaten Containern und kommunizieren mit einem etcd-Cluster.
  2. etcd durch SQLite oder Redis ersetzen. Statt etcd wird Rhino angebunden – ein etcd-kompatibler gRPC-Server in Rust. Die API-Einstellungen und Binärdateien bleiben gleich; nur die Compose-Datei ändert sich.
  3. Alle Komponenten in einer einzigen Binärdatei. API-Server, Scheduler, Controller-Manager, Kubelet und Kube-Proxy laufen als Tokio-Async-Tasks in einem einzigen Prozess. Der Cluster-Zustand wird in eine einzelne SQLite-Datei oder Redis-Instanz geschrieben.

Der All-in-One-Modus löst die Probleme bei lokaler Entwicklung, CI/CD-Pipelines und beim Ausführen des Orchestrators auf Edge-Geräten (Edge/IoT), wo jedes Megabyte RAM zählt.

Integrierte Web-Oberfläche

Rusternetes verfügt über ein integriertes Monitoring-Dashboard. Es ist direkt in die API-Server-Binärdatei eingebettet, sodass nichts Weiteres konfiguriert oder bereitgestellt werden muss.

Cluster-Topologie mit Live-Logs

Die Oberfläche zeigt eine Cluster-Topologiekarte mit Traffic-Animation, eine CPU- und RAM-Auslastungs-Heatmap, Container-Log-Streaming und ermöglicht das Anzeigen von ConfigMaps, Secrets, RBAC-Manifesten und Deployment-Status.

Was drinsteckt: Projektarchitektur

Das Repository ist als Cargo-Workspace mit 10 Crates organisiert.

┌───────────────────────────────────────────────────────────────┐
                       Control Plane                           
                                                               
  ┌──────────────────┐  ┌──────────────┐  ┌────────────────┐   
    API Server          Scheduler       Controller       
    Axum + TLS          Affinity        Taints           
    REST + Watch        Preemption      Manager          
    RBAC + Webhooks                     31 control       
    Web Console                         loops            
  └────────┬─────────┘  └──────────────┘  └────────────────┘   
                                                              
  ┌────────▼─────────┐                                         
   Storage                                                   
   etcd|SQLite|Redis│                                         
  └──────────────────┘                                         
├───────────────────────────────────────────────────────────────┤
                       Node Components                         
                                                               
  ┌──────────────────┐  ┌──────────────────────────────────┐   
    Kubelet             Kube-Proxy                         
    bollard (Docker)    iptables routing                   
    Probes+Volumes      ClusterIP/NodePort/LB              
  └──────────────────┘  └──────────────────────────────────┘   
└───────────────────────────────────────────────────────────────┘

Jeder Teil des Clusters ist für seinen eigenen Arbeitsbereich verantwortlich:

  • api-server: Geschrieben mit dem Axum-Framework. Verarbeitet REST-API, Watch-API über Server-Sent Events, validierende und mutierende Webhooks, CEL-Regelauswertung und RBAC-Autorisierung.
  • scheduler: Wählt Nodes für Pods basierend auf Affinity/Anti-Affinity, Taints, Tolerations und Ressourcenbeschränkungen aus.
  • controller-manager: Enthält 31 Reconciliation-Loops. Behandelt Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob, HPA, Ingress und CRDs.
  • kubelet: Kommuniziert mit Docker oder Podman über den bollard-Crate. Verfolgt den Container-Lebenszyklus, führt Liveness- und Readiness-Probes aus und bindet Volumes ein (hostPath, configMap, secret).
  • kube-proxy: Verwaltet iptables-Regeln für ClusterIP-, NodePort- und LoadBalancer-Service-Typen.

Wie man zum Testen ausführt

Der Build erfordert eine aktuelle Rust-Version, den protobuf-Compiler und Docker oder Podman.

Der schnellste Weg zum Testen ist der All-in-One-Modus mit SQLite:

cargo build -p rusternetes
./target/release/rusternetes --data-dir ./cluster.db

Wenn Sie eine ehrlichere Emulation einer Multi-Komponenten-Umgebung über Docker Compose aufsetzen möchten:

git clone https://github.com/calfonso/rusternetes.git
cd rusternetes

export KUBELET_VOLUMES_PATH=$(pwd)/.rusternetes/volumes
docker compose -f docker-compose.sqlite.yml build
docker compose -f docker-compose.sqlite.yml up -d
bash scripts/bootstrap-cluster.sh

export KUBECONFIG=~/.kube/rusternetes-config
kubectl get nodes

Nach dem Bootstrap können Sie mit dem Cluster über das Standard-Dienstprogramm kubectl interagieren.

Praktischer Nutzen und Fazit

Rusternetes jetzt in die Produktion zu bringen, lohnt sich nicht: Obwohl das Projekt 94 % der e2e-Tests besteht, bleibt es experimentell. Dennoch hat es drei ausgezeichnete Anwendungsfälle.

Erstens ist es ein ideales Lernmaterial für das Verständnis der Kubernetes-Internals. Rust-Quellcode mit klarer Modulaufteilung zu lesen, ist viel angenehmer als sich durch das große Monolith des originalen K8s zu wühlen.

Zweitens spart das Ausführen eines Clusters in einem einzigen Prozess mit SQLite Ressourcen in Testumgebungen und in CI/CD.

Drittens ist das Projekt nützlich für das Ausführen von Orchestrierung auf schwacher Hardware wie Raspberry Pi oder eingebetteten IoT-Plattformen.

Wenn Sie sich für Systementwicklung in Rust oder die Funktionsweise von Orchestratoren interessieren, verdient das Projekt definitiv einen Star auf GitHub.

Ähnliche Projekte