From a63e21db94837bac46fcd5aa62b1f9be20fd28f8 Mon Sep 17 00:00:00 2001 From: nomad Date: Tue, 3 Jun 2025 21:56:08 +0300 Subject: [PATCH] DB cronjob backup 3AM --- backups/postgres-backup.yaml | 55 ++++++++++++++ backups/pv.yaml | 140 +++++++++++++++++++++++------------ 2 files changed, 146 insertions(+), 49 deletions(-) create mode 100644 backups/postgres-backup.yaml diff --git a/backups/postgres-backup.yaml b/backups/postgres-backup.yaml new file mode 100644 index 0000000..7416f47 --- /dev/null +++ b/backups/postgres-backup.yaml @@ -0,0 +1,55 @@ +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" + + diff --git a/backups/pv.yaml b/backups/pv.yaml index e072494..93768b3 100644 --- a/backups/pv.yaml +++ b/backups/pv.yaml @@ -1,67 +1,109 @@ +# postgres-backup-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: - name: nfs-ssd-configs - namespace: backups + name: postgres-backup-pv spec: capacity: - storage: 3Ti - accessModes: - - ReadWriteMany - persistentVolumeReclaimPolicy: Retain - csi: - driver: nfs.csi.k8s.io - volumeHandle: nfs-ssd - volumeAttributes: - server: 192.168.0.200 - share: /SSD/media/configs - ---- -apiVersion: v1 -kind: PersistentVolume -metadata: - name: nfs-nas-git - namespace: backups -spec: - capacity: - storage: 3Ti + storage: 7Ti accessModes: - ReadWriteMany mountOptions: - - rw - - sync + - hard + - nfsvers=4.1 + - rsize=1048576 + - wsize=1048576 - noatime - - vers=4.2 + - nodiratime + - tcp + - intr + nfs: + path: /backups + server: 192.168.0.100 persistentVolumeReclaimPolicy: Retain - csi: - driver: nfs.csi.k8s.io - volumeHandle: nfs-nas-git - volumeAttributes: - server: 192.168.0.100 - share: /git - + volumeMode: Filesystem --- apiVersion: v1 -kind: PersistentVolume +kind: PersistentVolumeClaim metadata: - name: nfs-nas-backups - namespace: backups + name: postgres-backup-pvc spec: - capacity: - storage: 3Ti accessModes: - ReadWriteMany - mountOptions: - - rw - - sync - - noatime - - vers=4.2 - persistentVolumeReclaimPolicy: Retain - csi: - driver: nfs.csi.k8s.io - volumeHandle: nfs-nas-backups - volumeAttributes: - server: 192.168.0.100 - share: /backups + resources: + requests: + storage: 7Ti + volumeName: postgres-backup-pv + storageClassName: "" + volumeMode: Filesystem + +--- +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: nfs-ssd-configs +# namespace: backups +# spec: +# capacity: +# storage: 3Ti +# accessModes: +# - ReadWriteMany +# persistentVolumeReclaimPolicy: Retain +# csi: +# driver: nfs.csi.k8s.io +# volumeHandle: nfs-ssd +# volumeAttributes: +# server: 192.168.0.200 +# share: /SSD/media/configs +# +# --- +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: nfs-nas-git +# namespace: backups +# spec: +# capacity: +# storage: 3Ti +# accessModes: +# - ReadWriteMany +# mountOptions: +# - rw +# - sync +# - noatime +# - vers=4.2 +# persistentVolumeReclaimPolicy: Retain +# csi: +# driver: nfs.csi.k8s.io +# volumeHandle: nfs-nas-git +# volumeAttributes: +# server: 192.168.0.100 +# share: /git +# +# --- +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: nfs-nas-backups +# namespace: backups +# spec: +# capacity: +# storage: 3Ti +# accessModes: +# - ReadWriteMany +# mountOptions: +# - rw +# - sync +# - noatime +# - vers=4.2 +# persistentVolumeReclaimPolicy: Retain +# csi: +# driver: nfs.csi.k8s.io +# volumeHandle: nfs-nas-backups +# volumeAttributes: +# server: 192.168.0.100 +# share: /backups +# +