CNPG-Backup/README.md

143 lines
5.3 KiB
Markdown

# 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 <cluster-name> --backup=<backup-id> --restore-to=<timestamp>
```
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: <backup-id>
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 <backup-name>
# 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/)