- Authors

- Name
- Phillip Pham
- @ddppham
TL;DR
Velero sichert Kubernetes-Ressourcen und optional Persistent Volumes in S3-kompatiblen Storage. Eine solide Backup-Strategie kombiniert tägliche Namespace-Backups mit wöchentlichen Cluster-Backups. Entscheidend ist nicht das Backup selbst, sondern der regelmäßig getestete Restore — nur ein geprüftes Backup ist ein echtes Backup.
Velero installieren
Velero besteht aus einem CLI-Tool und einem Server-Deployment im Cluster. Die Installation dauert unter fünf Minuten.
# Velero CLI installieren
# macOS:
brew install velero
# Linux:
curl -LO https://github.com/vmware-tanzu/velero/releases/download/v1.15.0/velero-v1.15.0-linux-amd64.tar.gz
tar -xzf velero-v1.15.0-linux-amd64.tar.gz
sudo mv velero-v1.15.0-linux-amd64/velero /usr/local/bin/
Für den Server-Teil brauchen Sie einen S3-kompatiblen Storage — AWS S3, MinIO, oder einen anderen Anbieter. Erstellen Sie die Credentials-Datei:
cat <<EOF > /tmp/velero-credentials
[default]
aws_access_key_id=IHRE_ACCESS_KEY_ID
aws_secret_access_key=IHR_SECRET_KEY
EOF
Dann Velero im Cluster deployen:
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.11.0 \
--bucket kubernetes-backups \
--secret-file /tmp/velero-credentials \
--backup-storage-location-config \
region=eu-central-1,s3ForcePathStyle=true \
--use-volume-snapshots=false \
--namespace velero
Für MinIO als On-Premises-Alternative ergänzen Sie s3Url=http://minio.minio.svc:9000 in der backup-storage-location-config. Eine detaillierte MinIO-Anleitung finden Sie unter Velero mit MinIO.
Prüfen Sie die Installation:
kubectl get pods -n velero
velero version
Backup-Strategie: Namespace vs. Cluster
Nicht jedes Backup muss den gesamten Cluster umfassen. Die Wahl zwischen Namespace-Level und Cluster-Level bestimmt Geschwindigkeit, Größe und Restore-Flexibilität.
| Aspekt | Namespace-Backup | Cluster-Backup |
|---|---|---|
| Scope | Einzelne Namespaces | Alle Ressourcen |
| Größe | Klein (KB-MB) | Groß (MB-GB) |
| Dauer | Sekunden | Minuten |
| Restore-Granularität | Hoch | Niedrig |
| Cluster-weite Ressourcen | Nicht enthalten | Enthalten (CRDs, ClusterRoles) |
Empfohlene Kombination: Tägliche Namespace-Backups für Applikations-Namespaces und wöchentliche Full-Cluster-Backups für die Gesamtsicherung inklusive RBAC, CRDs und ClusterRoles.
Schedules einrichten
Manuelle Backups vergisst man. Schedules sind Pflicht.
# daily-namespace-backup.yaml
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: daily-production
namespace: velero
spec:
schedule: "0 2 * * *"
template:
includedNamespaces:
- production
- staging
ttl: 168h0m0s
storageLocation: default
snapshotVolumes: false
useOwnerReferencesInBackup: false
kubectl apply -f daily-namespace-backup.yaml
# Oder per CLI — schneller für Ad-hoc-Setups:
velero schedule create weekly-full \
--schedule="0 3 * * 0" \
--ttl 720h
# Namespace-spezifisch mit Label-Selektor:
velero schedule create daily-critical \
--schedule="0 1 * * *" \
--include-namespaces production \
--selector app.kubernetes.io/part-of=critical-stack \
--ttl 336h
# Alle Schedules anzeigen:
velero schedule get
Die TTL (Time To Live) bestimmt, wie lange Backups aufbewahrt werden. 168h sind 7 Tage, 720h sind 30 Tage. Velero löscht abgelaufene Backups automatisch — auch aus dem S3-Bucket.
Backup-Storage: S3 und Alternativen
Velero unterstützt mehrere Storage-Backends über Provider-Plugins:
AWS S3 ist die einfachste Option für Cloud-Setups. Aktivieren Sie Versioning und Lifecycle-Policies auf dem Bucket:
# S3-Bucket mit Versioning (AWS CLI)
aws s3api create-bucket \
--bucket kubernetes-backups \
--region eu-central-1 \
--create-bucket-configuration LocationConstraint=eu-central-1
aws s3api put-bucket-versioning \
--bucket kubernetes-backups \
--versioning-configuration Status=Enabled
MinIO für On-Premises. Gleiche S3-API, aber selbst gehostet. Ideal wenn Daten das Unternehmensnetzwerk nicht verlassen dürfen.
GCS und Azure Blob werden über eigene Plugins unterstützt (velero-plugin-for-gcp, velero-plugin-for-microsoft-azure).
Unabhängig vom Backend: Verschlüsseln Sie den Bucket. Velero selbst verschlüsselt keine Daten — das ist Aufgabe des Storage-Layers.
Restore-Prozeduren
Ein Backup ohne getesteten Restore ist nur eine Hoffnung. Hier die wichtigsten Szenarien.
Kompletter Namespace-Restore
# Verfügbare Backups auflisten
velero backup get
# Restore aus spezifischem Backup
velero restore create --from-backup daily-production-20260310020000
# Restore-Status prüfen
velero restore get
velero restore describe daily-production-20260310020000-restore --details
Restore in einen anderen Namespace
Nützlich, um ein Backup zu validieren, ohne die Produktion zu beeinflussen:
velero restore create prod-test-restore \
--from-backup daily-production-20260310020000 \
--include-namespaces production \
--namespace-mappings production:production-test
Einzelne Ressourcen wiederherstellen
# Nur Deployments und ConfigMaps
velero restore create selective-restore \
--from-backup daily-production-20260310020000 \
--include-resources deployments,configmaps \
--include-namespaces production
Disaster-Recovery-Test: Schritt für Schritt
DR-Tests sollten monatlich stattfinden. Hier ein konkreter Ablauf, den Sie als Runbook verwenden können.
#!/bin/bash
# dr-test.sh — Monatlicher DR-Test für Kubernetes-Backups
set -euo pipefail
BACKUP_NAME=$(velero backup get -o json | jq -r '.items | sort_by(.metadata.creationTimestamp) | last | .metadata.name')
TEST_NS="dr-test-$(date +%Y%m%d)"
echo "Verwende Backup: ${BACKUP_NAME}"
echo "Test-Namespace: ${TEST_NS}"
# 1. Restore in Test-Namespace
velero restore create dr-test-${TEST_NS} \
--from-backup ${BACKUP_NAME} \
--include-namespaces production \
--namespace-mappings production:${TEST_NS}
# 2. Warten bis Restore abgeschlossen
echo "Warte auf Restore..."
while true; do
PHASE=$(velero restore get dr-test-${TEST_NS} -o json | jq -r '.status.phase')
[ "$PHASE" = "Completed" ] && break
[ "$PHASE" = "Failed" ] && echo "RESTORE FAILED" && exit 1
sleep 5
done
# 3. Pods prüfen
echo "Prüfe Pods im Test-Namespace..."
kubectl get pods -n ${TEST_NS}
kubectl wait --for=condition=Ready pods --all -n ${TEST_NS} --timeout=300s
# 4. Ergebnis
READY_PODS=$(kubectl get pods -n ${TEST_NS} --no-headers | grep -c "Running")
echo "DR-Test abgeschlossen: ${READY_PODS} Pods laufen in ${TEST_NS}"
# 5. Aufräumen (optional, manuell bestätigen)
echo "Test-Namespace aufräumen mit: kubectl delete namespace ${TEST_NS}"
Führen Sie dieses Script monatlich aus. Dokumentieren Sie das Ergebnis. Wenn der Restore fehlschlägt, wissen Sie es lieber jetzt als im Ernstfall.
Persistent Volumes sichern
Standardmäßig sichert Velero nur Kubernetes-Manifeste — nicht die Daten in Persistent Volumes. Für PV-Backups gibt es zwei Wege:
File-System-Backup (Kopia): Velero kopiert Dateien aus dem Volume über einen Node-Agent. Funktioniert mit jedem Storage-Backend.
# Velero mit File-System-Backup installieren
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.11.0 \
--bucket kubernetes-backups \
--secret-file /tmp/velero-credentials \
--backup-storage-location-config region=eu-central-1,s3ForcePathStyle=true \
--use-node-agent \
--default-volumes-to-fs-backup \
--namespace velero
CSI-Snapshots: Schneller, aber abhängig vom Storage-Provider. Funktioniert nur, wenn der CSI-Driver Volume-Snapshots unterstützt.
Für die meisten Teams ist File-System-Backup der pragmatischere Einstieg.
FAQ
Wie oft sollte ich Backups erstellen?
Hängt von der Recovery Point Objective (RPO) ab. Bei RPO von 24 Stunden reichen tägliche Backups. Bei RPO von 1 Stunde brauchen Sie stündliche Schedules. Bedenken Sie: Häufigere Backups bedeuten mehr Storage-Kosten und API-Server-Last.
Was passiert, wenn der S3-Bucket nicht erreichbar ist?
Velero markiert das Backup als "Failed". Bestehende Backups im Bucket bleiben erhalten. Velero versucht beim nächsten Schedule-Lauf erneut. Überwachen Sie die BackupStorageLocation — der Status sollte immer "Available" sein.
Kann ich Backups clusterübergreifend wiederherstellen?
Ja. Installieren Sie Velero im Ziel-Cluster mit denselben Storage-Credentials. Velero erkennt alle Backups im Bucket automatisch. Achten Sie darauf, dass CRDs im Ziel-Cluster vorhanden sind, sonst schlägt der Restore für Custom Resources fehl.
Wie groß werden die Backups?
Kubernetes-Manifeste sind komprimiert typischerweise wenige MB pro Namespace. PV-Daten über File-System-Backup entsprechen der tatsächlichen Datenmenge. Ein Namespace mit 100 Ressourcen ohne PV-Daten belegt etwa 2-5 MB.
Sichert Velero auch Secrets und ConfigMaps?
Ja, standardmäßig werden alle Namespace-Ressourcen gesichert — inklusive Secrets. Die Secrets liegen dann Base64-kodiert im Backup. Stellen Sie sicher, dass der S3-Bucket verschlüsselt und zugriffsbeschränkt ist.
Kubernetes ohne DevOps-Overhead?
Wir betreiben Ihre Kubernetes-Cluster 24/7 – Sie fokussieren auf Ihr Kerngeschäft. Ab 4.000€/Monat, DSGVO-konform, mit deutschem Support.
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 mit MinIO: Kubernetes Cluster sichern
Velero mit MinIO als S3-kompatiblem Storage einrichten und Kubernetes-Cluster vollständig sichern. Schritt-für-Schritt mit Schedules und Restore.
etcd Backup und Wartung: Kubernetes-Datenbank sichern
etcd-Backups mit etcdctl erstellen, automatisierte CronJobs einrichten und Snapshots fuer Disaster Recovery nutzen. Praxisanleitung fuer Cluster-Admins.
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.