S3-Objektspeicher hält Einzug in meinem Homelab!

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.

Von Fabian Wüst

Er ist leidenschaftlicher Open-Source-Benutzer und ein begeisterter Technologie-Enthusiast. Als kreativer Kopf hinter Homelabtopia bringt Fabian hier seine umfangreiche Erfahrung als Linux-Admin ein. Um sicherzustellen, dass du aus seinen Beiträgen den größtmöglichen Nutzen ziehen kannst, führt er ausgiebige Tests durch und errichtet dafür immense Setups.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert