# SeaweedFS S3 mirror — hourly mc mirror from SeaweedFS → Scaleway Object Storage. # Mirrors all buckets to s3://sunbeam-backups/seaweedfs//. # No --remove: deleted files are left in Scaleway (versioning provides recovery window). # concurrencyPolicy: Forbid prevents overlap if a run takes longer than an hour. --- apiVersion: batch/v1 kind: CronJob metadata: name: seaweedfs-s3-mirror namespace: storage spec: schedule: "0 * * * *" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 3 jobTemplate: spec: activeDeadlineSeconds: 3300 template: spec: restartPolicy: OnFailure containers: - name: mirror image: minio/mc:latest command: ["/bin/sh", "-c"] args: - | set -e mc alias set seaweed \ http://seaweedfs-filer.storage.svc.cluster.local:8333 \ "${S3_ACCESS_KEY}" "${S3_SECRET_KEY}" mc alias set scaleway \ https://s3.fr-par.scw.cloud \ "${ACCESS_KEY_ID}" "${SECRET_ACCESS_KEY}" mc mirror --overwrite seaweed/ scaleway/sunbeam-backups/seaweedfs/ env: - name: S3_ACCESS_KEY valueFrom: secretKeyRef: name: seaweedfs-s3-credentials key: S3_ACCESS_KEY - name: S3_SECRET_KEY valueFrom: secretKeyRef: name: seaweedfs-s3-credentials key: S3_SECRET_KEY - name: ACCESS_KEY_ID valueFrom: secretKeyRef: name: scaleway-s3-creds key: ACCESS_KEY_ID - name: SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: scaleway-s3-creds key: SECRET_ACCESS_KEY resources: requests: memory: 128Mi cpu: 10m limits: memory: 512Mi