Da ich neben Docker auch viel mit Kubernetes herumexperimentiere, bin ich schon öfter über den Begriff S3-kompatiblen Storage gestolpert. Der einfachste Weg wäre sicherlich das Anmieten von Ressourcen bei AWS. Allerdings möchte ich die Kosten in meinem Homelab so gering wie möglich halten und habe mich daher auf die Suche nach einer zuverlässigen Open-Source-Lösung gemacht.
Fündig geworden bin ich bei MinIO. Diese Speicherlösung arbeitet objektbasiert. Doch was heißt das genau? Im Gegensatz zum allseits bekannten Blockspeicher werden die Daten hier nicht als Blöcke in Sektoren und Spuren verwaltet. Der Name Objektspeicher verrät uns schon einiges über die Funktionsweise. Grob gesagt werden die Daten nämlich als Objekte verwaltet.
Typischerweise enthält jedes Objekt selbst die Nutzdaten samt einer variablen Anzahl an Metadaten und einem global eindeutigen Identifikator. Eingesetzt werden können objektbasierte Speicherlösungen in vielen Einsatzszenarien. Das Hauptaugenmerk liegt aber ganz klar auf der Aufbewahrung riesiger Mengen an unstrukturierter Daten.
Besonders spannend bei gängigen objektbasierten Speicherlösungen ist ein ganz bestimmtes Feature. Die Rede ist natürlich von der Schnittstellenebene in Form einer REST- oder SOAP-API. Das heißt, dass die Clients bequem über HTTP/s mit der Storagelösung kommunizieren können. Weiterhin lassen sich bequem Cluster über mehrere Instanzen und physische Geräte hinweg realisieren.
Auch eine Datenreplikation und -verteilung auf Objektebene stellt kein Problem für Lösungen wie MinIO dar. Ich selbst nutze den S3 kompatiblen Speicher als Langzeit-Datengrab für die Backups meiner Kubernetes-Cluster. Der Streamingriese Spotify oder der Cloudanbieter Dropbox setzen ebenfalls auf Objektspeichersysteme in ihrer Architektur. Falsch macht man also nichts.
Vorteile:
- Schnelle & einfache Skalierung
- REST- / SOAP-API mit HTTP/s als universelle Schnittstelle
- Eignet sich gut als Speichermedium für Backups und Archivsysteme
- Unterstützung von benutzerdefinierten Metadaten
- Verteilter Zugriff möglich
Nachteile:
- Keine optimale Lösung für sich ständig verändernde Daten
- Es gibt derzeit noch kein Freigabeprotokoll mit Sperrfunktion
- Die Performance ist nur mittelmäßig
MinIO: High-Performance Kubernetes Native Object Storage
Wir haben nun ausführlich über die Vor- als auch Nachteile von Objektspeicher gesprochen. Kommen wir jetzt aber endlich zu MinIO. Die in Go geschriebene Open-Source-Anwendung kann nämlich so einiges. Fangen wir aber klein an. So besitzt sie ein eigenes Web-Interface, wo man beispielsweise Objekte und Nutzer verwalten kann. Besonders gut daran gefällt mir die intuitive Benutzung.
So lässt sich mit nur wenigen Klicks eine Verschlüsselung der Festplatten einrichten. Wer will, kann sogar noch einen eigenen Cache-Pool aus schnellen SSDs erstellen. Weiterhin möglich ist noch die Einrichtung von MinIO als Gateway zu AWS S3, Azure Blob und vielen weiteren Anbietern. Mit MinIO lässt sich Objektspeicher sehr schnell bereitstellen.
Das ist besonders für Migrationen, Entwicklungsumgebungen oder Tests interessant. Wer möchte, kann die Speicherlösung sogar als Docker-Container oder in K8s bereitstellen. Selbstredend kann man aber auch eine manuelle Server-Installation vornehmen. Wie das auf Rocky Linux als Superuser und ohne SSL-Verschlüsselung funktioniert, habe ich im Folgenden erklärt.
# Einrichtung der Firewall:
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9001/tcp --permanent
firewall-cmd --reload # Damit die Änderungen wirksam werden
# User für MinIO anlegen:
useradd -r minio-user -s /sbin/nologin
# MinIO mittels Skript installieren:
wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio
chmod +x /usr/local/bin/minio
restorecon -v /usr/local/bin/minio # SELinux
minio --version
# Konfiguration von MinIO:
mkdir /etc/minio # Ordner für SSL-Zertifikate
chown minio-user:minio-user /etc/minio
mkdir /mnt/data # Datengrab oder Mountpoint für Blockstorage & Co.
chown minio-user:minio-user /mnt/data
vim /etc/minio/defaults # Default-Konfig mit folgendem Inhalt:
MINIO_VOLUMES="/mnt/data"
MINIO_OPTS="-C /etc/minio --address :9000 --console-address :9001"
MINIO_ROOT_USER="DeinNutzernae"
MINIO_ROOT_PASSWORD="DeinGeheimesPassw0rt"
# Erstellung des MinIO Service
wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service -O /etc/systemd/system/minio.service
restorecon -v /etc/systemd/system/minio.service # SELinux
systemctl daemon-reload
systemctl enable minio
systemctl start minio
systemctl status minio
# Teste, ob die Installation funktioniert hat:
Öffne die URL http://deine_server_ip:9001 im Browser, um die MinIO-Webkonsole zu öffnen.
2 Antworten auf „S3-Objektspeicher hält Einzug in meinem Homelab!“
Wie schlägt sich MinIO für Kubernetes bis jetzt?
Ich möchte mir auch ein Kubernetes Cluster Basteln und möchte das ganze möglichst Skalierbar aufziehen. Deswegen kam mir S3 in den Sinn.
Hallo CyberTalker,
ich verwende MinIO ausschließlich als Single-Node-Lösung für die Backups meiner Rancher-Applikation. Diese Konfiguration arbeitet äußerst zuverlässig. Allerdings sind Updates manchmal problematisch und erfordern oft nachträgliche Anpassungen an den Umgebungsvariablen oder der Systemd-Service-Datei.
Je nach Cluster könnten cloudnative Storage-Lösungen wie Longhorn oder Rook Ceph besser geeignet sein. Longhorn bietet beispielsweise integrierte Snapshot- und Backup-Funktionen und lässt sich rasch via Helm in Betrieb nehmen.