Es hat eine ganze Weile gedauert, bis ich das perfekte Setup für meinen Kubernetes-Cluster auf Linode gefunden habe – vor allem, was funktionierende Backups für Web-Instanzen mit Persistent Volume Claims (PVCs) betrifft. Mir war wichtig, im Fall der Fälle meine Daten unkompliziert wiederherstellen zu können.
Schaut es euch gerne an – vielleicht erspare ich damit jemandem da draußen ein paar Stunden „Kopfzerbrechen“…
Warum Velero?
Nach einiger Recherche habe ich Velero als die flexibelste und am besten unterstützte Kubernetes-Backup-Lösung gefunden. Die offizielle Dokumentation, die Helm-Chart-Guides und die Plugin-Anleitungen auf GitHub sind wirklich umfassend.
Die eigentliche Herausforderung war allerdings, Velero dazu zu bringen auch tatsächlich Backups zu machen 😀
Mein funktionierendes Setup
Unten findest du meine aktuelle Konfiguration – getestet und funktionsfähig mit der neuesten Version von Velero, dem AWS-Plugin und dem S3-kompatiblen Storage von Linode.
values.yaml (Schema, Default values)
image:
repository: velero/velero
tag: v1.16.2
credentials:
useSecret: true
existingSecret: cloud-credentials
configuration:
logLevel: warning
backupStorageLocation:
- name: default
provider: velero.io/aws
bucket: velero-backups
checksumAlgorithm: "" # <- needed after velero-plugin-for-aws:v1.9.0
default: true
config:
region: eu-central-1
s3Url: https://eu-central-1.linodeobjects.com
volumeSnapshotLocation:
- name: default
provider: linode.com/velero
config:
region: eu-central-1
s3Url: https://eu-central-1.linodeobjects.com
extraEnvVars:
- name: LINODE_TOKEN
valueFrom:
secretKeyRef:
key: linode_token
name: cloud-credentials
deployNodeAgent: true
snapshotsEnabled: false
backupsEnabled: true
initContainers:
- name: velero-plugin-for-aws
image: velero/velero-plugin-for-aws:v1.12.1
volumeMounts:
- mountPath: /target
name: plugins
- name: velero-plugin-linode
image: linode/velero-plugin:v0.0.1
volumeMounts:
- mountPath: /target
name: plugins
nodeAgent:
tolerations:
- key: "wordpress"
operator: "Equal"
value: "only"
effect: "NoSchedule"
WICHTIG
Wenn du Linode zusammen mit dem velero-plugin-for-aws verwendest, funktionieren Versionen bis einschließlich 1.9.0 auch ohne Angabe von
checksumAlgorithm: ""
Von Version 1.9.1 bis vor 1.10 ist diese Option erforderlich, aber nicht konfigurierbar. <- hier liegt der Grund des scheiterns mit Linode
Du musst also entweder bei Version 1.9.0 bleiben oder auf 1.10 (oder neuer) upgraden, wo die Option unterstützt und konfigurierbar ist.
Ab Version 1.10 kannst du die Option einfach hinzufügen und einen leeren String setzen, um den Standardwert des Plugins zu überschreiben.
Das LINODE_TOKEN
wird für Snapshots verwendet (über das Linode Velero Plugin), was nach meiner Erfahrung noch etwas experimentell ist.
Schritt für Schritt
1. Erstelle deine Secret(s)
Erstelle eine Datei mit dem Namen secret.yaml
und trage dort deine Linode- und S3-Zugangsdaten ein (ersetze die Platzhalter durch deine tatsächlichen Schlüssel):
apiVersion: v1
kind: Secret
stringData:
linode_token:
cloud: |
[default]
aws_access_key_id =
aws_secret_access_key =
type: Opaque
2. Erstelle einen Namespace und das Secret
kubectl create ns velero
kubectl apply -f secret.yaml -n velero
3. Deploye Velero mit Helm
helm upgrade --install velero vmware-tanzu/velero -n velero --create-namespace -f values.yaml
Fertig!
Test: Erstellen eines Backups
Um ein manuelles Backup zu erstellen, führe folgenden Befehl aus:
velero create backup test --include-namespaces=
Um wiederkehrende Backups einzustellen, füge einfach folgenden Snippte mit in die values.yaml
:
schedules:
wordpress: # <- just a name
disabled: false
schedule: "0 0 * * *"
useOwnerReferencesInBackup: false
paused: false
skipImmediately: false
template:
ttl: "240h"
storageLocation: default
includedNamespaces:
- wordpress
Anschliessend einfach nochmal den helm upgrade
Befehl ausführen um die Änderungen auf dein Deployment anzuwenden.
Fehlerbehebung & häufige Fehlerquellen
Fail 1
Entsprechend der GitHub-Plugin-Dokumentation habe ich anfangs erfolgreich Backups und Snapshots erstellen können. Beim zweiten Backup gab es jedoch einen Fehler – vermutlich, weil ich keine Restic- bzw. Node-Agent-Integration verwendet habe und die geklonten Volumes immer gleich benannt wurden.
Ich habe das an dieser Stelle aber nicht weiter untersucht…
Velero: message: /CloneVolume returned error: [400] [label] Label must be unique name: /scaleit-wordpress-6cc695795b-pknch message: /Error backing up item error: /error taking snapshot of volume: rpc error: code = Aborted desc = plugin panicked: runtime error: invalid memory address or nil pointer dereference, stack trace: goroutine 66
Fail 2
Die meisten Blogartikel erwähnen die Anforderung an den Checksum-Algorithmus ab Plugin-Version 1.9.1
nicht.
Bei einer falschen Einstellung kann es passieren, dass zwar Kopia-Ordner für PVCs angelegt werden, das Hochladen der Metadaten jedoch fehlschlägt, weil standardmäßig der falsche Checksum-Algorithmus verwendet wird.
time="2025-07-30T15:13:34Z" level=error msg="Error uploading log file" backup=wp-test-backup4 bucket=velero-backups error="rpc error: code = Unknown desc = error putting object backups/wp-test-backup4/wp-test-backup4-logs.gz: operation error S3: PutObject, https response error StatusCode: 400, ..
Zum Abschluss
Ich hoffe, dieser Artikel hilft allen, die mit Velero und Linode S3 Backups auf Kubernetes zu kämpfen haben!
Wenn ihr Tipps zur Verbesserung oder Korrekturen habt, schreibt sie gerne in die Kommentare – ich freue mich auch über eure Erfahrungen und lerne gerne dazu.
Für Suchmaschinen / andere Troubleshooter:
- Die Verwendung des Velero-Plugins gemäß der GitHub-Dokumentation speicherte zwar die Metadaten, aber nachfolgende Backups schlugen fehl.
- Die offizielle Dokumentation lässt manchmal bestimmte Details aus (wie die Anforderung checksumAlgorithm für S3-kompatiblen Storage).
- Prüft immer die Versionen von Plugin und Velero auf subtile, eventuell inkompatible Änderungen.
Ressourcen
Docker Images:
Velero: https://hub.docker.com/u/velero
Linode Plugin for Velero: https://hub.docker.com/r/linode/velero-plugin
Github:
Linode Plugin for Velero (Snapshots): https://github.com/linode/velero-plugin
Velero AWS Plugin: https://github.com/vmware-tanzu/velero-plugin-for-aws
The main application: https://github.com/vmware-tanzu/velero
Documentation:
Velero: https://velero.io/docs/v1.7/