CloudNativePG backup strategy: ObjectStore, WAL archiving, scheduled backups, and recovery manifests.
Go to file
2026-09-05 21:29:45 -04:00
docs docs: add recovery procedure documentation 2026-09-05 21:29:45 -04:00
manifests feat: CloudNativePG backup strategy manifests and documentation 2026-09-05 21:15:47 -04:00
README.md feat: CloudNativePG backup strategy manifests and documentation 2026-09-05 21:15:47 -04:00

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

  1. CloudNativePG instalado en el cluster
  2. Plugin Barman Cloud instalado:
    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:

# 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