# CNPG-Backup Estrategia de backup y recuperación para clusters PostgreSQL usando [CloudNativePG](https://cloudnative-pg.io/) 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: ```bash # Listar backups disponibles kubectl get backup -o wide # Restaurar a un timestamp específico kubectl cnpg restore --backup= --restore-to= ``` O mediante el recurso `Cluster` con `bootstrap.recovery`: ```yaml apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: pg-restored spec: bootstrap: recovery: backup: name: recoveryTarget: targetImmediate: true # o targetTimeStamp: "2024-01-15T10:30:00Z" ``` ## Pre-requisitos 1. CloudNativePG instalado en el cluster 2. Plugin Barman Cloud instalado: ```bash kubectl apply -f https://github.com/cloudnative-pg/cnpg-i/releases/download/v0.5.0/manifest.yaml ``` 3. Acceso al object store desde el cluster 4. 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`**: Reemplazar `ACCESS_KEY_ID` y `ACCESS_SECRET_KEY` - **`01-objectstore.yaml`**: Configurar endpoint, bucket name y región - **`02-cluster.yaml`**: Ajustar tamaño de storage, versión de PostgreSQL, etc. ## Monitoreo Los backups pueden ser monitoreados mediante: ```bash # Ver estado de un backup kubectl describe backup # Listar todos los backups kubectl get backups -o wide # Ver logs del operador kubectl logs -l app=cloudnative-pg -n cnpg-system ``` ## Referencias - [Documentación oficial CloudNativePG - Backup](https://cloudnative-pg.io/docs/current/backup/) - [Barman Cloud Plugin](https://cloudnative-pg.io/plugin-barman-cloud/) - [CloudNativePG - WAL Archiving](https://cloudnative-pg.io/docs/current/wal_archiving/)