Configure OpenCloud daily backup to Hetzner Object Storage

- Use existing basicstack-backup bucket with opencloud/ prefix
- Configure endpoint: https://hel1.your-objectstorage.com
- Add pod affinity to run on same node as OpenCloud (RWO volume requirement)
- Schedule: daily at 2:00 AM UTC
- Retention: last 7 days
- First backup verified successful: 110.611 MiB transferred

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
CTO Agent 2026-07-11 14:09:21 +00:00
parent 5e02c64dc4
commit 6cc1df6c66

View file

@ -15,6 +15,17 @@ spec:
template: template:
spec: spec:
restartPolicy: OnFailure restartPolicy: OnFailure
# Run on same node as OpenCloud to allow volume attachment
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- opencloud
topologyKey: kubernetes.io/hostname
containers: containers:
- name: backup - name: backup
image: rclone/rclone:latest image: rclone/rclone:latest
@ -25,22 +36,23 @@ spec:
set -e set -e
DATE=$(date +%Y%m%d-%H%M%S) DATE=$(date +%Y%m%d-%H%M%S)
echo "Starting OpenCloud backup at $DATE" echo "Starting OpenCloud backup at $DATE"
# Configure rclone for Hetzner S3 # Configure rclone for Hetzner S3
mkdir -p /root/.config/rclone
cat > /root/.config/rclone/rclone.conf <<EOC cat > /root/.config/rclone/rclone.conf <<EOC
[hetzner-s3] [hetzner-s3]
type = s3 type = s3
provider = Other provider = Other
access_key_id = ${S3_ACCESS_KEY} access_key_id = ${S3_ACCESS_KEY}
secret_access_key = ${S3_SECRET_KEY} secret_access_key = ${S3_SECRET_KEY}
endpoint = https://fsn1.your-objectstorage.com endpoint = https://hel1.your-objectstorage.com
region = fsn1 region = hel1
acl = private acl = private
EOC EOC
# Backup OpenCloud data directory # Backup OpenCloud data directory
echo "Backing up data directory..." echo "Backing up data directory..."
rclone sync /data hetzner-s3:opencloud-backup/data-${DATE} \ rclone sync /data hetzner-s3:basicstack-backup/opencloud/data-${DATE} \
--progress \ --progress \
--transfers 8 \ --transfers 8 \
--checkers 8 \ --checkers 8 \
@ -48,12 +60,12 @@ spec:
# Backup configuration # Backup configuration
echo "Backing up configuration..." echo "Backing up configuration..."
rclone copy /config hetzner-s3:opencloud-backup/config-${DATE} \ rclone copy /config hetzner-s3:basicstack-backup/opencloud/config-${DATE} \
--progress --progress
# Keep only last 7 days of backups # Keep only last 7 days of backups
echo "Cleaning old backups (keeping last 7 days)..." echo "Cleaning old backups (keeping last 7 days)..."
rclone delete hetzner-s3:opencloud-backup \ rclone delete hetzner-s3:basicstack-backup/opencloud \
--min-age 7d \ --min-age 7d \
--rmdirs --rmdirs