feat: CloudNativePG backup strategy manifests and documentation
This commit is contained in:
commit
4db9f14285
143
README.md
Normal file
143
README.md
Normal file
@ -0,0 +1,143 @@
|
||||
# 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/)
|
||||
11
manifests/00-secret.yaml
Normal file
11
manifests/00-secret.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: object-store-creds
|
||||
labels:
|
||||
app: cloudnative-pg
|
||||
type: Opaque
|
||||
stringData:
|
||||
accessKeyId: "ACCESS_KEY_ID"
|
||||
accessSecretKey: "ACCESS_SECRET_KEY"
|
||||
25
manifests/01-objectstore.yaml
Normal file
25
manifests/01-objectstore.yaml
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
apiVersion: barmancloud.cnpg.io/v1
|
||||
kind: ObjectStore
|
||||
metadata:
|
||||
name: pg-backup-store
|
||||
spec:
|
||||
configuration:
|
||||
s3:
|
||||
bucket: "cnpg-backups"
|
||||
endpoint: "https://s3.mitac.duckdns.org"
|
||||
region: "us-east-1"
|
||||
accessKeyId:
|
||||
name: object-store-creds
|
||||
key: accessKeyId
|
||||
secretAccessKey:
|
||||
name: object-store-creds
|
||||
key: accessSecretKey
|
||||
wal:
|
||||
compression: gzip
|
||||
maxParallel: 8
|
||||
retentionPolicy: "14 days"
|
||||
data:
|
||||
compression: gzip
|
||||
retentionPolicy: "7 days"
|
||||
maxParallel: 8
|
||||
41
manifests/02-cluster.yaml
Normal file
41
manifests/02-cluster.yaml
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
name: pg-backup
|
||||
labels:
|
||||
app: postgresql
|
||||
spec:
|
||||
instances: 3
|
||||
description: "PostgreSQL cluster with continuous backup to object store"
|
||||
postgresql:
|
||||
parameters:
|
||||
wal_level: replica
|
||||
max_wal_senders: 10
|
||||
max_replication_slots: 10
|
||||
archive_mode: on
|
||||
archive_command: "barman-cloud-archive '%p'"
|
||||
archive_timeout: 60000
|
||||
storage:
|
||||
size: 50Gi
|
||||
storageClass: "standard"
|
||||
resources:
|
||||
requests:
|
||||
cpu: "500m"
|
||||
memory: "256Mi"
|
||||
limits:
|
||||
cpu: "2"
|
||||
memory: "1Gi"
|
||||
monitoring:
|
||||
enabled: true
|
||||
backup:
|
||||
target: "prefer-standby"
|
||||
barmanObjectStore:
|
||||
objectStore:
|
||||
name: pg-backup-store
|
||||
plugins:
|
||||
- name: barman-cloud.cloudnative-pg.io
|
||||
isWALArchiver: true
|
||||
parameters:
|
||||
barmanObjectName: pg-backup-store
|
||||
serverName: pg-backup
|
||||
14
manifests/03-scheduledbackup.yaml
Normal file
14
manifests/03-scheduledbackup.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: ScheduledBackup
|
||||
metadata:
|
||||
name: daily-backup
|
||||
spec:
|
||||
schedule: "0 0 0 * * *"
|
||||
immediate: true
|
||||
backupOwnerReference: self
|
||||
cluster:
|
||||
name: pg-backup
|
||||
method: plugin
|
||||
pluginConfiguration:
|
||||
name: barman-cloud.cloudnative-pg.io
|
||||
11
manifests/04-backup-ondemand.yaml
Normal file
11
manifests/04-backup-ondemand.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Backup
|
||||
metadata:
|
||||
name: backup-ondemand
|
||||
spec:
|
||||
cluster:
|
||||
name: pg-backup
|
||||
method: plugin
|
||||
pluginConfiguration:
|
||||
name: barman-cloud.cloudnative-pg.io
|
||||
Loading…
Reference in New Issue
Block a user