K3s Kubernetes-Installation: Leichte Container-Orchestrierung
Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.
Docker Volume-Backup, Container-State-Backup, Kubernetes Persistent Volume-Backup, Kubernetes-Backup mit Velero, automatisierte Backup-Skripte und Disaster-Recovery-Planung.
Das Sichern von Container-Umgebungen erfordert einen anderen Ansatz als traditionelle Server-Backups. Da Container flüchtig sind, müssen nicht die Container selbst, sondern die darin enthaltenen Daten gesichert werden. Dieser Leitfaden behandelt umfassende Backup-Strategien für Docker- und Kubernetes-Umgebungen.
| Strategie | Geeignet für | Tool |
|---|---|---|
| Volume-Backup | Datenbank, Dateispeicher | tar, rsync |
| Image-Backup | Anwendungszustand | docker save |
| Snapshot | Schnelle Wiederherstellung | LVM, ZFS |
| K8s-Backup | Gesamter Cluster | Velero |
| Remote-Backup | Disaster Recovery | Restic, Rclone |
# Volume in tar-Archiv sichern
docker run --rm \
-v VOLUME_NAME:/data \
-v $(pwd):/backup \
alpine tar czf /backup/volume-backup-$(date +%Y%m%d).tar.gz -C /data .
# Beispiel: MySQL Volume-Backup
docker run --rm \
-v mysql-data:/data \
-v /backups:/backup \
alpine tar czf /backup/mysql-$(date +%Y%m%d-%H%M%S).tar.gz -C /data .
# Volume wiederherstellen
docker run --rm \
-v mysql-data:/data \
-v /backups:/backup \
alpine tar xzf /backup/mysql-20240101-120000.tar.gz -C /data
# MySQL-Dump (während Container läuft)
docker exec mysql-db mysqldump \
-u root -pStarkesPasswort123! \
--all-databases \
--single-transaction \
> /backups/mysql-dump-$(date +%Y%m%d).sql
# PostgreSQL-Dump
docker exec postgres-db pg_dumpall \
-U postgres \
> /backups/postgres-dump-$(date +%Y%m%d).sql
#!/bin/bash
# /usr/local/bin/docker-backup.sh
BACKUP_DIR="/backups/docker"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
# Alle Volumes sichern
for volume in $(docker volume ls -q); do
echo "Sichere: $volume"
docker run --rm \
-v "$volume":/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/${volume}-${DATE}.tar.gz" -C /data . 2>/dev/null
done
# MySQL-Datenbanken sichern
if docker ps --format '{{.Names}}' | grep -q mysql; then
docker exec mysql-db mysqldump \
-u root -pStarkesPasswort123! \
--all-databases \
--single-transaction \
> "$BACKUP_DIR/mysql-${DATE}.sql"
fi
# Alte Backups bereinigen
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.sql" -mtime +$RETENTION_DAYS -delete
echo "Backup abgeschlossen: $DATE"
chmod +x /usr/local/bin/docker-backup.sh
# Tägliches Backup via Cron
# 0 2 * * * /usr/local/bin/docker-backup.sh >> /var/log/docker-backup.log 2>&1
# Restic installieren
apt install -y restic
# Repository initialisieren
restic init --repo /backups/restic-repo
# Volume sichern
restic backup /tmp/mysql-backup \
--repo /backups/restic-repo \
--password-file /etc/restic/password \
--tag mysql,docker
# Backups auflisten
restic snapshots --repo /backups/restic-repo
# Wiederherstellen
restic restore SNAPSHOT_ID \
--repo /backups/restic-repo \
--target /tmp/restore
# Alte Backups bereinigen
restic forget \
--repo /backups/restic-repo \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 3 \
--prune
# Velero CLI installieren
wget https://github.com/vmware-tanzu/velero/releases/download/v1.12.0/velero-v1.12.0-linux-amd64.tar.gz
tar xzf velero-v1.12.0-linux-amd64.tar.gz
mv velero-v1.12.0-linux-amd64/velero /usr/local/bin/
# Gesamten Cluster sichern
velero backup create full-backup --wait
# Bestimmten Namespace sichern
velero backup create production-backup \
--include-namespaces production \
--wait
# Backups auflisten
velero backup get
# Aus Backup wiederherstellen
velero restore create --from-backup full-backup
# Tägliches Backup (um 2 Uhr)
velero schedule create daily-backup \
--schedule="0 2 * * *" \
--ttl 168h
# Wöchentliches Vollbackup
velero schedule create weekly-backup \
--schedule="0 1 * * 0" \
--ttl 720h
#!/bin/bash
BACKUP_FILE="$1"
if tar tzf "$BACKUP_FILE" > /dev/null 2>&1; then
echo "Backup-Datei ist gültig: $BACKUP_FILE"
else
echo "FEHLER: Backup-Datei ist beschädigt: $BACKUP_FILE"
exit 1
fi
docker volume create test-restore
docker run --rm \
-v test-restore:/data \
-v $(dirname $BACKUP_FILE):/backup \
alpine tar xzf "/backup/$(basename $BACKUP_FILE)" -C /data
echo "Wiederherstellungstest erfolgreich"
docker volume rm test-restore
Die Container-Backup-Strategie sollte entsprechend Ihren Geschäftsanforderungen gestaltet werden. Volume-Backup + Cron kann für kleine Umgebungen ausreichen, während für Produktions-Kubernetes-Cluster dedizierte Tools wie Velero erforderlich sind. Mit regelmäßigen Backup- und Wiederherstellungstests auf REXE-Servern können Sie Ihre Daten sicher halten.
Die Backup-Häufigkeit wird durch Ihr RPO (Recovery Point Objective) bestimmt. Stündliche oder häufigere Backups für kritische Datenbanken, täglich für Anwendungsdaten, wöchentlich für statische Inhalte. Häufigere Backups erhöhen Festplattenplatz und I/O-Last — behalten Sie diese Balance im Auge.
Für Datenbanken wird Backup ohne Stopp empfohlen: mysqldump --single-transaction für MySQL, pg_dump für PostgreSQL. Bei Dateisystem-Backups kann ein kurzer Stopp für Konsistenz erforderlich sein. Für kritische Systeme Backups von einem Read-Replica nehmen.
Prüfen Sie den Backup-Status mit velero backup describe BACKUP_NAME. Testen Sie regelmäßig die Wiederherstellung in einer Testumgebung mit velero restore create --from-backup BACKUP_NAME. Velero verifiziert auch automatisch die Backup-Integrität.
Wenden Sie die 3-2-1-Regel an: 3 Kopien, 2 verschiedene Medien, 1 entfernter Standort. Eine Kombination aus lokalem Speicher + S3-kompatiblem Remote-Speicher (MinIO, AWS S3, Backblaze B2) wird empfohlen. Backups verschlüsseln (Restic verschlüsselt standardmäßig). Backups nicht auf demselben Server speichern.
Sie müssen zwei Dinge sichern: 1) docker-compose.yml und .env-Dateien (sollten in Git gespeichert sein), 2) Volume-Daten (Backup mit tar). Um den gesamten Stack zu sichern, sichern Sie jedes Volume separat. Zur Wiederherstellung starten Sie zuerst den Stack mit docker-compose up, dann stellen Sie die Volume-Daten wieder her.
Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.
Docker Volume-Typen (Named, Bind Mount, tmpfs), Volume-Verwaltung, Docker-Netzwerkmodi (Bridge, Host, Overlay), benutzerdefinierte Netzwerke und Container-Kommunikation. Umfassender Leitfaden.
Docker-Log-Treiber, docker logs-Befehl, Kubernetes Pod-Logs, zentralisierte Log-Sammlung (Loki, ELK Stack), Log-Rotation und Best Practices für Log-Verwaltung in Produktionsumgebungen.