--- # OpenCloud Daily Backup to Hetzner Object Storage apiVersion: batch/v1 kind: CronJob metadata: name: opencloud-backup namespace: opencloud spec: schedule: "0 2 * * *" # Daily at 2 AM UTC concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 3 jobTemplate: spec: template: spec: 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: - name: backup image: rclone/rclone:latest command: - /bin/sh - -c - | set -e DATE=$(date +%Y%m%d-%H%M%S) echo "Starting OpenCloud backup at $DATE" # Configure rclone for Hetzner S3 mkdir -p /root/.config/rclone cat > /root/.config/rclone/rclone.conf <