kubernetes/backups/postgres-backup.yaml
2025-06-03 21:56:08 +03:00

55 lines
1.6 KiB
YAML

apiVersion: batch/v1
kind: CronJob
metadata:
name: postgres-backup
spec:
schedule: "0 3 * * *"
jobTemplate:
spec:
ttlSecondsAfterFinished: 300
template:
spec:
containers:
- name: backup
image: postgres:15.2
command: ["/bin/bash", "/scripts/backup.sh"]
env:
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: database-secrets
key: postgres-password
volumeMounts:
- name: script
mountPath: /scripts
- name: backup-volume
mountPath: /backups
subPath: arrDB-Backups
restartPolicy: OnFailure
volumes:
- name: script
configMap:
name: postgres-backup-script
defaultMode: 0755
- name: backup-volume
persistentVolumeClaim:
claimName: postgres-backup-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-backup-script
data:
backup.sh: |
#!/bin/bash
set -e
echo "[INFO] $(date) - Starting PostgreSQL backup"
BACKUP_FILE="/backups/pg_$(date +%F).sql"
pg_dumpall -h arr-db -p 5433 -U postgres | tee "$BACKUP_FILE"
echo "[INFO] $(date) - Backup written to $BACKUP_FILE"
echo "[INFO] $(date) - Backup size:$(sleep 5) $(du -sh "$BACKUP_FILE" | cut -f1)"
echo "[INFO] $(date) - Cleaning backups older than 7 days"
find /backups -type f -name "pg_*.sql" -mtime +7 -print -delete
echo "[INFO] $(date) - Cleanup done"