MinIO Alternativen im Vergleich: RustFS, SeaweedFS und Garage

MinIO war jahrelang die Standardantwort, wenn jemand S3-kompatiblen Objektspeicher selbst betreiben wollte. Einfach zu installieren, gut dokumentiert, API-kompatibel zu AWS S3 — das reichte für die meisten Anwendungsfälle. Nach der Lizenzänderung auf AGPL-3.0 und der Neuausrichtung des Geschäftsmodells stellt sich für viele Teams aber die Frage, ob MinIO noch die richtige Wahl ist. Wer MinIO in einem proprietären Produkt oder internen Service nutzt, muss entweder eine kommerzielle Lizenz kaufen oder eine der MinIO Alternativen ernsthaft evaluieren. Dieser Artikel vergleicht drei davon: RustFS, SeaweedFS und Garage, alle S3-kompatibel, alle self-hosted.
Warum MinIO zur Diskussion steht
MinIO hat sich technisch nichts zuschulden kommen lassen. Die Software ist schnell, gut gepflegt und nach wie vor eine der ausgereiftesten Optionen im Bereich selbst gehosteter Objektspeicher. Das Problem ist das Lizenzmodell.
Mit dem Wechsel auf AGPL-3.0 hat MinIO Inc. eine klare Trennlinie gezogen: Wer MinIO in einem Produkt oder Dienst einsetzt, der nicht selbst unter AGPL veröffentlicht wird, braucht eine kommerzielle Lizenz. Für viele Unternehmen, die MinIO als Backend für eigene Dienste betreiben, ist das ein echtes Problem, nicht unbedingt wegen der Kosten, sondern wegen der Unsicherheit. AGPL ist in vielen Rechtsabteilungen ein rotes Flag, unabhängig davon, wie vertretbar der konkrete Einsatz sein mag.
Hinzu kommt, dass MinIO seinen Fokus zunehmend auf Enterprise-Kunden ausrichtet. Features und Dokumentation folgen diesem Schwerpunkt. Wer einen einfachen, wartungsarmen Speicher für ein kleineres Setup sucht, findet bei den Alternativen teils eine deutlich bessere Passung.
Was eine S3-Alternative wirklich leisten muss
"S3-kompatibel" ist keine binäre Eigenschaft, und das ist wichtig zu verstehen, bevor man Systeme miteinander vergleicht.
S3-API-Tiefe: Die grundlegenden Operationen — PutObject, GetObject, DeleteObject, ListBuckets, ListObjects — unterstützen fast alle Implementierungen. Probleme entstehen bei weniger verbreiteten Features wie Multipart-Uploads mit bestimmten Part-Größen, Object Lock, Bucket Versioning, Server-Side Encryption oder Pre-Signed URLs mit spezifischen Parametern. Wer Tooling oder Anwendungen betreibt, die auf solche Features angewiesen sind, muss das im Vorfeld explizit prüfen.
Clustering und Hochverfügbarkeit: Wie verteilt das System Daten auf mehrere Nodes? Wie verhält es sich bei einem Node-Ausfall? Wie wird der Cluster erweitert, ohne Downtime zu verursachen?
Kubernetes-Integration: Helm Charts vorhanden? Operator-Modell mit automatisierter Day-2-Verwaltung? CSI-Treiber für Persistent Volumes? Das entscheidet über den tatsächlichen Betriebsaufwand im Kubernetes-Umfeld erheblich.
Einfachheit und Ressourcenverbrauch: Je kleiner das Team, desto wichtiger ist es, dass das System auch ohne dediziertes Storage-Know-how sauber betrieben werden kann.
MinIO Alternative auf Rust-Basis: RustFS
RustFS ist das jüngste Projekt der drei. Es versteht sich explizit als MinIO-Nachfolger: gleiches Deployment-Modell, gleiche S3-API, aber in Rust implementiert und unter Apache 2.0 lizenziert. Letzteres ist der entscheidende Punkt. Apache 2.0 ist in fast jeder Umgebung ohne Rechtsbedenken einsetzbar.
Das Projekt hat 2024 an Dynamik gewonnen, ist aber noch vergleichsweise jung. Für produktive Deployments mit hohen Anforderungen an Stabilität und Feature-Vollständigkeit sollte man die Release-Notes und den Issue-Tracker genau im Blick behalten. Das ist kein Freifahrtschein, sondern ein ehrlicher Hinweis auf den aktuellen Stand.
Installation und Kubernetes-Integration
RustFS lässt sich ähnlich wie MinIO deployen, als einzelner Binary oder als Container. Ein offizieller Helm Chart existiert, ist aber noch im Aufbau. Wer ein sauberes Kubernetes-Setup will, muss aktuell etwas mehr Hand anlegen als bei den etablierteren Konkurrenten.
# RustFS läuft als UID 10001 – Verzeichnis vorher vorbereiten
mkdir -p ./data && chown -R 10001:10001 ./data
docker run -d --name rustfs \
-p 9000:9000 -p 9001:9001 \
-e RUSTFS_ACCESS_KEY=meinkey \
-e RUSTFS_SECRET_KEY=meinpasswort \
-v ./data:/data \
rustfs/rustfs:latest /data
Port 9000 ist die S3-API, Port 9001 die Web-Konsole. Ohne RUSTFS_ACCESS_KEY und RUSTFS_SECRET_KEY startet RustFS zwar mit Default-Credentials (rustfsadmin/rustfsadmin), für produktive Deployments sollte man sie aber explizit setzen.
Die Kompatibilität mit dem mc-Client (MinIO Client) macht den Umstieg für Teams, die MinIO kennen, vergleichsweise reibungslos. Gleiche Befehle, gleiche Konzepte, nur ein anderer Binary.
S3-Kompatibilität und Performance
RustFS deckt die gängigsten S3-Operationen ab. Bei weniger verbreiteten Features wie Object Lock oder bestimmten Encryption-Modi gibt es noch Lücken. Die Performance ist durch die Rust-Implementierung gut, aber im direkten Benchmark-Vergleich gegen SeaweedFS oder MinIO noch nicht systematisch dokumentiert.
Fazit RustFS: Interessant als langfristiges Projekt, das lizenzrechtlich sauber ist und dezidiert auf MinIO-Kompatibilität ausgerichtet wurde. Für kritische Produktions-Deployments heute noch mit Vorsicht einzusetzen.
SeaweedFS — der bewährte Allrounder
SeaweedFS ist ein anderes Kaliber. Das Projekt existiert seit 2012, ist in Go geschrieben und hat sich in produktiven Deployments bei mittlerer bis großer Skalierung bewährt. Die Architektur unterscheidet sich grundlegend von MinIO und RustFS: SeaweedFS trennt Master-Server (Metadaten-Verwaltung), Volume-Server (eigentliche Daten) und optional einen Filer (Dateisystem-Interface und S3-Emulation).
Betrieb und Clustering
Genau diese Trennung macht SeaweedFS mächtig, aber auch komplexer. Ein Minimal-Setup braucht mindestens einen Master und einen Volume-Server. Für Hochverfügbarkeit empfiehlt sich ein 3-Master-Cluster mit RAFT-Konsensus.
# Gemeinsames Netzwerk, damit die Container sich gegenseitig erreichen
docker network create seaweedfs
# Master-Server: verwaltet Metadaten und koordiniert das Cluster
docker run -d --name weed-master \
--network seaweedfs -p 9333:9333 \
chrislusf/seaweedfs master
# Volume-Server: speichert die eigentlichen Daten
docker run -d --name weed-volume \
--network seaweedfs -p 8080:8080 \
-v ./data:/data \
chrislusf/seaweedfs volume -mserver=weed-master:9333 -dir=/data
# Filer: stellt das S3-Interface bereit, Anwendungen sprechen gegen Port 8333
docker run -d --name weed-filer \
--network seaweedfs -p 8333:8333 \
chrislusf/seaweedfs filer -master=weed-master:9333 -s3 -s3.port=8333
Helm Charts für Kubernetes gibt es und sie sind deutlich ausgereifter als bei RustFS. Der operative Aufwand ist aber höher als bei einer Single-Binary-Lösung, das sollte man bei der Entscheidung einkalkulieren.
Einsatzszenarien
SeaweedFS glänzt dort, wo viele kleine bis mittelgroße Dateien gespeichert werden, also typische Workloads wie User-Uploads, Build-Artefakte, Backup-Daten. Die S3-API-Unterstützung läuft über den Filer und ist gut, aber nicht in jedem Detail mit der originalen AWS-API identisch. Multipart-Uploads funktionieren, Versioning und Object Lock haben Einschränkungen.
Ein Vorteil, der selten erwähnt wird: SeaweedFS unterstützt neben der S3-API auch FUSE-Mounts, WebDAV und ein eigenes HTTP-Interface. Wer mehrere Zugriffsmodelle aus einem System herausholen will, hat hier eine interessante Möglichkeit.
Fazit SeaweedFS: Die reifste und flexibelste MinIO Alternative im Vergleich. Für Teams mit operativer Kapazität und Bedarf an skalierbarem Speicher die solideste Wahl. Der Komplexitätspreis ist real, aber er kauft echte Skalierbarkeit.
Garage — Leichtgewichtig und geo-verteilt
Garage kommt aus einem anderen Kontext. Das Projekt wurde entwickelt, um verteilten Objektspeicher für geo-redundante Setups zu ermöglichen, also für Szenarien, in denen die Nodes nicht im selben Rechenzentrum stehen. Das ist ein Anwendungsfall, den MinIO und SeaweedFS explizit nicht gut abdecken.
Besonderheiten der Architektur
Garage verzichtet auf einen zentralen Master-Node. Alle Nodes sind gleichberechtigt, die Koordination läuft über ein RAFT-ähnliches Protokoll. Zone-Awareness ist eingebaut: Garage verteilt Replikate bewusst auf verschiedene Availability Zones oder physische Standorte.
# Pflicht: Konfigurationsdatei erstellen (Garage startet ohne sie nicht)
cat > ./garage.toml << 'EOF'
metadata_dir = "/meta"
data_dir = "/data"
replication_factor = 1
rpc_secret = "$(openssl rand -hex 32)"
rpc_bind_addr = "[::]:3901"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
[admin]
api_bind_addr = "[::]:3903"
EOF
# Garage starten
docker run -d --name garage \
-p 3900:3900 -p 3901:3901 -p 3903:3903 \
-v ./garage.toml:/etc/garage.toml \
-v ./data:/data \
-v ./meta:/meta \
dxflrs/garage:v1.0.1
# Node-ID anzeigen
docker exec garage garage node list
# Jeden Node einer Zone zuweisen (-z) und Speicherkapazität angeben (-c, in Bytes)
docker exec garage garage layout assign -z dc1 -c 1000000000000 <node-id>
# Verteilung aktivieren (N = die nach assign angezeigte Versionsnummer)
docker exec garage garage layout apply --version 1
Der Setup-Aufwand ist gering. Eine einzelne Binary, eine TOML-Konfigurationsdatei, das war es. Für Kubernetes gibt es einen offiziellen Helm Chart mit guter Dokumentation.
Was Garage kann und was nicht
Die S3-Kompatibilität ist solide für gängige Operationen. Bucket Versioning und Object Lock fehlen oder sind noch experimentell. Garage ist nicht für Workloads optimiert, bei denen extrem hoher Durchsatz oder viele tausend Requests pro Sekunde anfallen.
Dafür ist Garage ausgesprochen ressourcensparend. Ein Node läuft problemlos auf einem kleinen VPS mit 2 GB RAM. Für Home-Lab-Setups, kleinere Produktivsysteme und alle Szenarien, bei denen Geo-Redundanz eine Rolle spielt, ist Garage eine sehr gute Wahl.
Fazit Garage: Das einfachste System im Vergleich, mit einem klaren Fokus und einem Architekturmodell, das in dieser Form einzigartig ist. Wer Geo-Redundanz braucht oder einen schlanken, wartungsarmen Speicher sucht, sollte Garage ernsthaft in Betracht ziehen.
Direkter Vergleich: RustFS vs SeaweedFS vs Garage
| Kriterium | RustFS | SeaweedFS | Garage |
|---|---|---|---|
| Lizenz | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
| Sprache | Rust | Go | Rust |
| S3-Kompatibilität | Gut (in Entwicklung) | Gut (via Filer) | Solide (Basis-Features) |
| Clustering | Ja (MinIO-Modus) | Ja (Master-Volume) | Ja (kein Master) |
| Geo-Redundanz | Begrenzt | Begrenzt | Eingebaut |
| Kubernetes Helm Chart | Vorhanden (WIP) | Vorhanden (ausgereift) | Vorhanden (gut) |
| Operativer Aufwand | Gering | Mittel bis hoch | Gering |
| Reifegrad | Früh | Hoch | Mittel |
| Community-Aktivität | Wachsend | Aktiv | Aktiv |
Hinweis: Garage ist ebenfalls unter AGPL-3.0 lizenziert. Für interne Setups ist das in der Regel kein Problem, für Produkte mit proprietärem Code gelten die gleichen Prüfpflichten wie bei MinIO.
Einen vollständigen Überblick über alle S3-kompatiblen Lösungen, inklusive managed Optionen wie Cloudflare R2, Backblaze B2 und Hetzner Object Storage, gibt es im Vergleich aller S3-kompatiblen Objektspeicher-Lösungen.
Welche MinIO Alternative passt zu welchem Use Case?
Home Lab und kleine Teams: Garage ist hier die unkomplizierteste Wahl. Einfaches Setup, niedriger Ressourcenverbrauch, gute Dokumentation. Wer Geo-Redundanz zwischen mehreren Standorten braucht, hat mit Garage ohnehin keine vergleichbare Alternative.
Kubernetes-native Deployments: SeaweedFS hat die ausgefeilteste Kubernetes-Integration und den größten Feature-Umfang. Für Teams, die Objektspeicher als ernstzunehmenden Teil ihrer Infrastruktur betreiben, ist das der solideste Ausgangspunkt.
MinIO-Migration mit minimalem Umbau: Wer eine bestehende MinIO-Installation ablösen will und möglichst wenig an bestehenden Prozessen ändern möchte, sollte RustFS im Blick behalten. Das Projekt ist dezidiert auf diesen Use Case ausgerichtet, die Reife sollte man aber sorgfältig evaluieren.
Produktionssysteme mit hoher Schreiblast: SeaweedFS. Kein anderes System im Vergleich ist für diesen Workload besser erprobt.
Wer den Betrieb komplett auslagern möchte, kann RustFS auf lowcloud direkt als Helm Release deployen: kein manuelles Cluster-Setup, kein eigenes Monitoring, läuft auf souveräner europäischer Infrastruktur.
Das Fazit fällt unspektakulär, aber ehrlich aus: Es gibt keine universell beste MinIO Alternative. RustFS ist der direkteste Ersatz, aber noch nicht produktionsreif genug für kritische Workloads. SeaweedFS ist das mächtigste und erprobteste System, aber auch das aufwändigste im Betrieb. Garage ist das leichtgewichtigste und eleganteste für verteilte Setups, mit einem klar definierten Stärke-Schwäche-Profil. Die richtige Wahl hängt davon ab, was du wirklich brauchst: Lizenzklarheit, Skalierbarkeit, Geo-Redundanz oder einfach weniger Betriebsaufwand.
Hetzner Kubernetes Hosting mit lowcloud
Kubernetes auf Hetzner ohne Betriebsaufwand: lowcloud kombiniert günstige EU-Infrastruktur mit vollständigem Cluster-Management für Produkt-Teams.
Was ist Docker Swarm? Container-Orchestrierung mit Bordmitteln
Docker Swarm erklärt: Cluster, Services, Overlay-Netzwerke und der Vergleich mit Kubernetes. Wann Swarm die richtige Wahl für Container-Orchestrierung ist.