apiVersion: batch/v1 kind: CronJob metadata: name: media-db-backup namespace: media labels: app: media-backup spec: schedule: "0 3 * * *" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 3 jobTemplate: spec: template: metadata: labels: app: media-backup spec: restartPolicy: OnFailure initContainers: - name: pg-dump-sonarr image: postgres:14.21 env: - name: PGHOST value: sonarr-db - name: PGUSER valueFrom: secretKeyRef: name: media-db-credentials key: SONARR_DB_USER - name: PGPASSWORD valueFrom: secretKeyRef: name: media-db-credentials key: SONARR_DB_PASSWORD - name: PGDATABASE valueFrom: secretKeyRef: name: media-db-credentials key: SONARR_DB_NAME command: - sh - -c - pg_dump --clean --if-exists > /backup/sonarr.sql volumeMounts: - name: backup-tmp mountPath: /backup - name: pg-dump-radarr image: postgres:14.21 env: - name: PGHOST value: radarr-db - name: PGUSER valueFrom: secretKeyRef: name: media-db-credentials key: RADARR_DB_USER - name: PGPASSWORD valueFrom: secretKeyRef: name: media-db-credentials key: RADARR_DB_PASSWORD - name: PGDATABASE valueFrom: secretKeyRef: name: media-db-credentials key: RADARR_DB_NAME command: - sh - -c - pg_dump --clean --if-exists > /backup/radarr.sql volumeMounts: - name: backup-tmp mountPath: /backup - name: pg-dump-prowlarr image: postgres:14.21 env: - name: PGHOST value: prowlarr-db - name: PGUSER valueFrom: secretKeyRef: name: media-db-credentials key: PROWLARR_DB_USER - name: PGPASSWORD valueFrom: secretKeyRef: name: media-db-credentials key: PROWLARR_DB_PASSWORD - name: PGDATABASE valueFrom: secretKeyRef: name: media-db-credentials key: PROWLARR_DB_NAME command: - sh - -c - pg_dump --clean --if-exists > /backup/prowlarr.sql volumeMounts: - name: backup-tmp mountPath: /backup - name: pg-dump-seerr image: postgres:14.21 env: - name: PGHOST value: seerr-db - name: PGUSER valueFrom: secretKeyRef: name: seerr-credentials key: SEERR_DB_USER - name: PGPASSWORD valueFrom: secretKeyRef: name: seerr-credentials key: SEERR_DB_PASSWORD - name: PGDATABASE valueFrom: secretKeyRef: name: seerr-credentials key: SEERR_DB_NAME command: - sh - -c - pg_dump --clean --if-exists > /backup/seerr.sql volumeMounts: - name: backup-tmp mountPath: /backup containers: - name: resticprofile image: creativeprojects/resticprofile:0.32.0 command: - sh - -c - | resticprofile -c /secrets/profiles.yaml -n prowlarr-db backup resticprofile -c /secrets/profiles.yaml -n prowlarr-db copy resticprofile -c /secrets/profiles.yaml -n sonarr-db backup resticprofile -c /secrets/profiles.yaml -n sonarr-db copy resticprofile -c /secrets/profiles.yaml -n radarr-db backup resticprofile -c /secrets/profiles.yaml -n radarr-db copy resticprofile -c /secrets/profiles.yaml -n seerr-db backup resticprofile -c /secrets/profiles.yaml -n seerr-db copy env: - name: B2_ACCOUNT_ID valueFrom: secretKeyRef: name: media-backup-config key: B2_ACCOUNT_ID - name: B2_ACCOUNT_KEY valueFrom: secretKeyRef: name: media-backup-config key: B2_ACCOUNT_KEY volumeMounts: - name: secrets mountPath: /secrets readOnly: true - name: backup-tmp mountPath: /backup volumes: - name: secrets secret: secretName: media-backup-config - name: backup-tmp emptyDir: {}