79 lines
2.4 KiB
YAML
79 lines
2.4 KiB
YAML
# Backup diario de la BD del corpus con retención 7 (PLAN §Fase 6).
|
|
# pg_dump en formato custom (-Fc, comprimido) verificado con pg_restore --list.
|
|
---
|
|
apiVersion: v1
|
|
kind: PersistentVolumeClaim
|
|
metadata:
|
|
annotations:
|
|
# ArgoCD no debe podar este PVC: contiene los backups de la BD.
|
|
argocd.argoproj.io/sync-options: Prune=false
|
|
name: roswell-backups
|
|
namespace: roswell
|
|
spec:
|
|
accessModes: ["ReadWriteOnce"]
|
|
resources:
|
|
requests:
|
|
storage: 5Gi
|
|
|
|
---
|
|
apiVersion: batch/v1
|
|
kind: CronJob
|
|
metadata:
|
|
name: roswell-db-backup
|
|
namespace: roswell
|
|
labels:
|
|
app: roswell
|
|
spec:
|
|
schedule: "30 3 * * *"
|
|
timeZone: "Europe/Madrid"
|
|
concurrencyPolicy: Forbid
|
|
successfulJobsHistoryLimit: 3
|
|
failedJobsHistoryLimit: 3
|
|
jobTemplate:
|
|
spec:
|
|
backoffLimit: 2
|
|
activeDeadlineSeconds: 900
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: roswell-db-backup
|
|
spec:
|
|
restartPolicy: Never
|
|
containers:
|
|
- name: backup
|
|
# Misma imagen que el postgres del corpus: pg_dump 16 garantizado
|
|
# y ya está en la caché del nodo.
|
|
image: pgvector/pgvector:pg16
|
|
env:
|
|
- name: PGPASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: roswell-pg-secret-infisical
|
|
key: password
|
|
command:
|
|
- /bin/sh
|
|
- -c
|
|
- |
|
|
set -eu
|
|
STAMP=$(date +%Y%m%d)
|
|
DEST="/backups/roswell-${STAMP}.dump"
|
|
echo "pg_dump roswell -> ${DEST}"
|
|
pg_dump -h postgres.roswell.svc.cluster.local -U roswell \
|
|
-d roswell -Fc -f "${DEST}"
|
|
# Verificación: un dump corrupto no lista su TOC.
|
|
pg_restore --list "${DEST}" > /dev/null
|
|
echo "Dump verificado ($(du -h ${DEST} | cut -f1))"
|
|
# Retención: conservar los 7 más recientes
|
|
for f in $(ls -1t /backups/roswell-*.dump | tail -n +8); do
|
|
echo "Podando backup antiguo ${f}"
|
|
rm -f "${f}"
|
|
done
|
|
ls -lh /backups/
|
|
volumeMounts:
|
|
- name: backups
|
|
mountPath: /backups
|
|
volumes:
|
|
- name: backups
|
|
persistentVolumeClaim:
|
|
claimName: roswell-backups
|