--- apiVersion: v1 kind: PersistentVolume metadata: name: crates-postgres-backup-pv spec: storageClassName: "" capacity: storage: 1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain claimRef: namespace: default name: crates-postgres-backup-pvc hostPath: # Into homedir so we can scp it ez path: "/home/ntr/archives/crates-postgres" type: DirectoryOrCreate --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: crates-postgres-backup-pvc spec: volumeName: crates-postgres-backup-pv accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: batch/v1 kind: CronJob metadata: name: crates-db-backup spec: schedule: "20 4 * * *" jobTemplate: spec: template: metadata: labels: app: crates-postgres-backup spec: restartPolicy: Never containers: - name: crates-postgres-backup image: postgres:16 command: - "/bin/sh" - "-c" - | TZ="Australia/Melbourne" TIMESTAMP=$(date '+%Y-%m-%d-%H-%M-%S') DEST=/mnt/dest/crates-$TIMESTAMP-sql.gz echo "Backing up to $DEST" pg_dump --dbname=$POSTGRES_URL | gzip > $DEST echo "Backup Complete" env: - name: POSTGRES_URL valueFrom: secretKeyRef: name: crates key: POSTGRES_URL volumeMounts: - name: crates-postgres-backup-storage mountPath: /mnt/dest volumes: - name: crates-postgres-backup-storage persistentVolumeClaim: claimName: crates-postgres-backup-pvc ---