|
|
||
|---|---|---|
| docs | ||
| manifests | ||
| README.md | ||
CNPG-Backup
Estrategia de backup y recuperación para clusters PostgreSQL usando CloudNativePG en Kubernetes.
Visión general
Este repositorio contiene los manifiestos necesarios para configurar una estrategia de backup continua y Point-In-Time Recovery (PITR) para clusters PostgreSQL gestionados por CloudNativePG, utilizando object storage (S3 compatible) como destino de los backups y WAL archives.
Arquitectura
┌─────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌─────────────┐ ┌──────────────────────────────┐ │
│ │ Cluster │ │ ObjectStore (S3/MinIO) │ │
│ │ PostgreSQL │───│ ┌────────────────────────┐ │ │
│ │ │ │ │ base backups (full) │ │ │
│ │ Primary │ │ │ WAL archives (stream) │ │ │
│ │ Standby │ │ └────────────────────────┘ │ │
│ └──────┬──────┘ └──────────────────────────────┘ │
│ │ WAL archiving (barman-cloud plugin) │
│ │ Scheduled backups (base + WAL) │
└─────────┴───────────────────────────────────────────┘
Componentes
1. ObjectStore
Define el bucket de object storage donde se almacenarán los backups y los WAL archives. Soporta S3, Azure Blob Storage, GCS y cualquier servicio S3-compatible (MinIO, etc.).
Requisitos:
- Un bucket existente en el proveedor de object storage
- Credenciales de acceso (Access Key + Secret Key) con permisos de lectura/escritura
- El cluster de Kubernetes debe tener acceso de red al endpoint del object store
2. Cluster PostgreSQL
El cluster debe configurarse para usar el plugin barman-cloud como archiver de WAL y para ejecutar backups al object store configurado.
3. ScheduledBackup
Programa backups automáticos (base completos) según una expresión cron. Se recomienda:
- Backups base: diario (medianoche)
- WAL archiving: continuo (cada cambio se archiva)
4. Backup on-demand
Permite disparar backups manuales cuando sea necesario mediante el recurso Backup.
Estrategia de Retención
| Tipo | Retención | Descripción |
|---|---|---|
| Base backups | 7 días | Backups completos diarios |
| WAL archives | 14 días | Archivos de transacciones para PITR |
| Recuperación | Hasta 14 días atrás | Point-in-Time Recovery |
La retención se gestiona a través de la configuración de Barman Cloud en el recurso ObjectStore.
Recuperación (PITR)
Para restaurar el cluster a un momento específico:
# Listar backups disponibles
kubectl get backup -o wide
# Restaurar a un timestamp específico
kubectl cnpg restore <cluster-name> --backup=<backup-id> --restore-to=<timestamp>
O mediante el recurso Cluster con bootstrap.recovery:
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: pg-restored
spec:
bootstrap:
recovery:
backup:
name: <backup-id>
recoveryTarget:
targetImmediate: true
# o targetTimeStamp: "2024-01-15T10:30:00Z"
Pre-requisitos
- CloudNativePG instalado en el cluster
- Plugin Barman Cloud instalado:
kubectl apply -f https://github.com/cloudnative-pg/cnpg-i/releases/download/v0.5.0/manifest.yaml - Acceso al object store desde el cluster
- Bucket configurado y credenciales disponibles
Estructura de Archivos
CNPG-Backup/
├── README.md # Este archivo
├── manifests/
│ ├── 00-secret.yaml # Credenciales del object store
│ ├── 01-objectstore.yaml # Configuración del bucket
│ ├── 02-cluster.yaml # Cluster PostgreSQL con backup habilitado
│ ├── 03-scheduledbackup.yaml # Backups programados
│ └── 04-backup-ondemand.yaml # Backup manual (opcional)
└── docs/
└── recovery-procedure.md # Procedimiento de recuperación
Configuración
Edita los archivos en manifests/ para adaptarlos a tu entorno:
00-secret.yaml: ReemplazarACCESS_KEY_IDyACCESS_SECRET_KEY01-objectstore.yaml: Configurar endpoint, bucket name y región02-cluster.yaml: Ajustar tamaño de storage, versión de PostgreSQL, etc.
Monitoreo
Los backups pueden ser monitoreados mediante:
# Ver estado de un backup
kubectl describe backup <backup-name>
# Listar todos los backups
kubectl get backups -o wide
# Ver logs del operador
kubectl logs -l app=cloudnative-pg -n cnpg-system