- Authors

- Name
- Phillip Pham
- @ddppham
TL;DR
Velero sichert Kubernetes-Ressourcen und Persistent Volumes in S3-kompatiblen Storage. Mit MinIO als Self-Hosted-Backend hast du eine vollständige Backup-Lösung ohne Cloud-Abhängigkeit. Diese Anleitung führt dich von der MinIO-Installation über Velero-Setup bis zu automatischen Backup-Schedules.
Velero + MinIO: Backup-Lösung für Kubernetes
Kein Backup, kein Mitleid — das gilt auch für Kubernetes-Cluster. Velero (ehemals Heptio Ark) ist das Standard-Tool für Cluster-Backups und kann mit MinIO als S3-kompatiblem Backend komplett on-premises betrieben werden. In diesem Tutorial richten wir beides ein.
Voraussetzungen
- Kubernetes-Cluster (ab v1.20)
kubectlkonfigurierthelminstalliert (v3+)- Storage-Kapazität für MinIO (mindestens 50 GB empfohlen)
Prüfe zuerst deine Cluster-Verbindung:
kubectl cluster-info
kubectl get nodes
Teil 1: MinIO installieren
MinIO stellt eine S3-kompatible API bereit. Velero nutzt diese als Backup-Ziel — identisch zum AWS-S3-Plugin, nur eben lokal.
MinIO per Helm deployen
# Namespace erstellen
kubectl create namespace minio
# Helm-Repo hinzufügen
helm repo add minio https://charts.min.io/
helm repo update
# MinIO installieren
helm install minio minio/minio \
--namespace minio \
--set mode=standalone \
--set replicas=1 \
--set persistence.size=50Gi \
--set rootUser=minioadmin \
--set rootPassword=minio-secret-pw-2026 \
--set resources.requests.memory=512Mi \
--set consoleService.type=ClusterIP
Warte bis der Pod läuft:
kubectl wait --for=condition=Ready pod -l app=minio -n minio --timeout=120s
MinIO-Bucket erstellen
Für den Bucket-Zugriff nutzen wir Port-Forwarding und den MinIO-Client (mc):
# Port-Forward zur MinIO-API (Port 9000)
kubectl port-forward svc/minio -n minio 9000:9000 &
# MinIO Client installieren (falls nicht vorhanden)
# macOS:
brew install minio/stable/mc
# Linux:
curl -LO https://dl.min.io/client/mc/release/linux-amd64/mc && chmod +x mc && sudo mv mc /usr/local/bin/
# Alias konfigurieren
mc alias set k8s-minio http://localhost:9000 minioadmin minio-secret-pw-2026
# Backup-Bucket erstellen
mc mb k8s-minio/velero-backups
Ob der Bucket existiert, prüfst du mit:
mc ls k8s-minio/
Teil 2: Velero installieren
Credentials-Datei anlegen
Velero braucht Zugangsdaten im AWS-Credential-Format:
cat <<EOF > /tmp/velero-credentials
[default]
aws_access_key_id=minioadmin
aws_secret_access_key=minio-secret-pw-2026
EOF
Velero CLI installieren
# macOS
brew install velero
# Linux (aktuellste Version prüfen auf github.com/vmware-tanzu/velero)
VELERO_VERSION=v1.15.0
curl -LO https://github.com/vmware-tanzu/velero/releases/download/${VELERO_VERSION}/velero-${VELERO_VERSION}-linux-amd64.tar.gz
tar -xzf velero-${VELERO_VERSION}-linux-amd64.tar.gz
sudo mv velero-${VELERO_VERSION}-linux-amd64/velero /usr/local/bin/
Velero im Cluster installieren
Hier ist der zentrale Befehl — s3Url zeigt auf den MinIO-Service im Cluster:
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.11.0 \
--bucket velero-backups \
--secret-file /tmp/velero-credentials \
--backup-storage-location-config \
region=minio,s3ForcePathStyle=true,s3Url=http://minio.minio.svc:9000 \
--use-volume-snapshots=false \
--namespace velero
| Parameter | Wert | Erklärung |
|---|---|---|
--provider aws | aws | S3-kompatibler Provider |
--plugins | velero-plugin-for-aws | AWS/S3-Plugin für MinIO |
--s3Url | http://minio.minio.svc:9000 | Cluster-interner MinIO-Endpunkt |
--s3ForcePathStyle | true | Nötig für MinIO (kein Virtual-Host-Style) |
Prüfe, ob alles läuft:
kubectl get pods -n velero
velero version
Die Ausgabe sollte sowohl Client- als auch Server-Version zeigen.
Teil 3: Erstes Backup erstellen
Manuelles Backup
# Gesamtes Cluster sichern
velero backup create full-backup-$(date +%Y%m%d)
# Status prüfen
velero backup describe full-backup-$(date +%Y%m%d)
# Nur einen Namespace sichern
velero backup create app-backup \
--include-namespaces production,staging
Backup-Status überwachen
# Alle Backups auflisten
velero backup get
# Details eines Backups anzeigen
velero backup describe full-backup-$(date +%Y%m%d) --details
# Logs bei Problemen
velero backup logs full-backup-$(date +%Y%m%d)
Automatische Schedules einrichten
Tägliche Backups mit 7 Tagen Aufbewahrung:
# Tägliches Backup um 02:00 UTC
velero schedule create daily-backup \
--schedule="0 2 * * *" \
--ttl 168h
# Wöchentliches Full-Backup (Sonntag 03:00 UTC), 30 Tage Aufbewahrung
velero schedule create weekly-full \
--schedule="0 3 * * 0" \
--ttl 720h
# Schedules prüfen
velero schedule get
| Schedule | Cron | TTL | Zweck |
|---|---|---|---|
daily-backup | 0 2 * * * | 168h (7 Tage) | Tägliche Sicherung |
weekly-full | 0 3 * * 0 | 720h (30 Tage) | Wöchentliches Full-Backup |
Teil 4: Restore — Backup wiederherstellen
Ein Backup ist nur so gut wie der getestete Restore. Hier die wichtigsten Szenarien.
Komplettes Restore
# Aus einem bestimmten Backup wiederherstellen
velero restore create --from-backup full-backup-20260308
# Status prüfen
velero restore get
velero restore describe full-backup-20260308-restore --details
Einzelnen Namespace wiederherstellen
velero restore create --from-backup full-backup-20260308 \
--include-namespaces production
Nur bestimmte Ressourcen wiederherstellen
# Nur Deployments und Services
velero restore create --from-backup full-backup-20260308 \
--include-resources deployments,services
# In einen anderen Namespace wiederherstellen
velero restore create --from-backup full-backup-20260308 \
--include-namespaces production \
--namespace-mappings production:production-restored
Troubleshooting
Die häufigsten Probleme und ihre Lösungen:
Backup bleibt auf "InProgress" hängen:
# Controller-Logs prüfen
kubectl logs deployment/velero -n velero
# Häufigste Ursache: MinIO nicht erreichbar
kubectl exec -it deployment/velero -n velero -- \
wget -qO- http://minio.minio.svc:9000/minio/health/live
"NoValidStorageLocation"-Fehler:
# BackupStorageLocation prüfen
kubectl get backupstoragelocation -n velero
velero backup-location get
# Status sollte "Available" sein
# Falls nicht: Credentials und s3Url prüfen
Backup enthält keine PV-Daten:
Ohne Volume-Snapshot-Provider sichert Velero nur Kubernetes-Ressourcen (YAML-Definitionen), nicht die tatsächlichen Daten in Persistent Volumes. Für PV-Backups brauchst du entweder:
- CSI-Snapshot-Support (
--use-volume-snapshots=true+ CSI-Driver) - Velero Restic/Kopia-Integration für dateibasierte Backups:
# Velero mit Kopia (File-System-Backup) neu installieren
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.11.0 \
--bucket velero-backups \
--secret-file /tmp/velero-credentials \
--backup-storage-location-config \
region=minio,s3ForcePathStyle=true,s3Url=http://minio.minio.svc:9000 \
--use-node-agent \
--default-volumes-to-fs-backup \
--namespace velero
FAQ
Kann ich Velero mit MinIO in Production einsetzen?
Ja, aber MinIO sollte dann im Distributed-Mode (mindestens 4 Nodes) laufen und eigenes Monitoring haben. Für kleine Cluster reicht Standalone, für kritische Workloads empfiehlt sich Erasure Coding.
Wie groß werden die Backups?
Velero speichert Kubernetes-Ressourcen als komprimierte tar-Archive. Ein Namespace mit 50 Ressourcen ist typischerweise nur wenige MB groß. PV-Daten (via Kopia/Restic) entsprechen der tatsächlichen Datenmenge.
Kann ich Backups in einen anderen Cluster wiederherstellen?
Ja, das ist ein Hauptanwendungsfall. Installiere Velero im Ziel-Cluster mit denselben MinIO-Credentials und Bucket. Die Backups erscheinen automatisch und können restored werden.
Wie teste ich Backups regelmäßig?
Richte einen CronJob ein, der wöchentlich ein Restore in einen Test-Namespace durchführt und das Ergebnis prüft. Alternativ: Velero-Backup in eine CI/CD-Pipeline integrieren.
Nächster Schritt: Richte ein Monitoring für deine Backups ein. Velero exportiert Prometheus-Metriken auf Port 8085 — kombiniere das mit dem kube-prometheus-stack, um bei fehlgeschlagenen Backups alarmiert zu werden.
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
Velero Backup: Kubernetes-Cluster richtig sichern
Velero für Kubernetes einrichten: Installation, Backup-Schedules, Namespace- und Cluster-Backups, Restore-Prozeduren und DR-Tests.
Kubernetes Backup mit Velero: Praxis-Guide und DR-Strategie
Velero auf Kubernetes einrichten für Cluster-Backups und Persistent Volumes. Restore-Tests automatisieren und eine solide Disaster-Recovery-Strategie aufbauen.
Kubernetes Disaster Recovery mit Velero für KMU
Kubernetes Disaster Recovery mit Velero einrichten: Backup-Strategie, RTO unter 4 Stunden und DSGVO-konforme Wiederherstellung für den Mittelstand.
Kubernetes Backup mit Velero: Disaster Recovery Praxis
Kubernetes-Backup mit Velero, etcd-Snapshots und Volume-Sicherung einrichten. Inklusive automatisierter Restore-Tests und Scheduling.
Velero Kubernetes Backup: DSGVO-konform einrichten
Velero auf Kubernetes einrichten, Backups automatisieren und DSGVO-konform in S3-kompatiblem Storage sichern. Mit Schedules, Restore-Prozeduren und 3-2-1-Regel.