Saltar al contenido
NyverraNyverra
⌘K
InicioArtículosSitio institucional
🇪🇸
Nyverra

Canal editorial

Artículos sobre tecnología, operaciones y partners — infraestructura, monitorización y entornos críticos.

Redes sociales

Explorar

  • Inicio
  • Artículos
  • Categorías
  • Etiquetas
  • Autores
  • Sobre
  • Contacto
  • RSS
  • Sitio institucional

Nyverra

  • Nuestros servicios
  • Casos de éxito
  • Socios

Contacto

Correo[email protected]WhatsApp(62) 99309-1592Portal del clienteITSM · tickets y SLA

Rua RB 18, S/N — Casa 01, Sala 01 · Residencial Buriti · Senador Canedo – GO, Brasil · CEP 75260-459

Horario: lun–vie, 08–18 h

© 2026 Nyverra. Todos los derechos reservados.

CNPJ: 61.571.209/0001-08 · Registro estatal: 20.291.265-5 · D-U-N-S®: 57-323-5796

blog.nyverra.com.br

Términos de usoPrivacidadCookies
Volver arriba

Ejecutar bases de datos en Kubernetes es polémico. La respuesta honesta: depende. Con un operador maduro, ganas automatización de failover, backup y upgrade que difícilmente tendrías con scripts propios.

CloudNativePG (CNPG) es uno de los operadores más completos para PostgreSQL.

Sello del curso: probado en Kubernetes 1.35 con CloudNativePG 1.24/1.25 y PostgreSQL 16.

Qué ofrece el operador

  • Cluster con primario + réplicas.
  • Servicios -rw, -ro y -r.
  • Streaming replication gestionada.
  • Failover y switchover.
  • Backup continuo (WAL) a S3/MinIO.
  • Restore y point-in-time recovery.
  • Métricas Prometheus.

El Cluster

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: portal-postgres
  namespace: portal
spec:
  instances: 2
  imageName: ghcr.io/cloudnative-pg/postgresql:16.4
  storage:
    size: 10Gi
    storageClass: portal-nfs
  resources:
    requests:
      cpu: 250m
      memory: 512Mi
    limits:
      cpu: "2"
      memory: 2Gi
  monitoring:
    enablePodMonitor: true
  backup:
    barmanObjectStore:
      destinationPath: s3://portal-k8s-backup/
      endpointURL: http://minio-s3:9000
      s3Credentials:
        accessKeyId:
          name: portal-secrets
          key: APP_STORAGE_S3_ACCESSKEY
        secretAccessKey:
          name: portal-secrets
          key: APP_STORAGE_S3_SECRETKEY
      wal:
        compression: gzip
    retentionPolicy: "14d"

Servicios creados:

Servicio Uso
portal-postgres-rw escritura (primario)
portal-postgres-ro lectura (réplicas)
portal-postgres-r cualquier instancia

La aplicación debe escribir en -rw y leer en -ro (si tolera lag).

Failover y switchover

  • Switchover: planificado, sin pérdida.
  • Failover: el primario murió; el operador promueve la réplica más avanzada.

CNPG usa replicación y un instance manager. Si el primario pierde el liveness, el operador inicia el failover. El primario antiguo necesita ser fenced (dejar de escribir). Si no muere, el cluster puede quedarse en Failing over.

Caso real: en una prueba de carga, el primario perdió los probes por contención de memoria/CPU. El failover inició, pero el pod antiguo quedó atascado en shutdown. La eliminación manual del pod permitió la promoción de la réplica. El runbook está en el capítulo del postmortem.

Backup

El backup de CNPG tiene dos partes:

  1. WAL archiving continuo (RPO bajo).
  2. Base backup programado.
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
  name: portal-postgres-daily
spec:
  schedule: "0 2 * * *"
  immediate: true
  backupOwnerReference: self
  cluster:
    name: portal-postgres

Verifica:

kubectl -n portal get backups.postgresql.cnpg.io
kubectl -n portal get scheduledbackup

Un backup que nunca fue restaurado no es backup. Haz drill.

Restore

Restore a un cluster nuevo (no sobrescribas el actual):

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: portal-postgres-restore
spec:
  instances: 1
  storage:
    size: 10Gi
  bootstrap:
    recovery:
      source: portal-postgres
  externalClusters:
    - name: portal-postgres
      barmanObjectStore:
        destinationPath: s3://portal-k8s-backup/
        endpointURL: http://minio-s3:9000
        s3Credentials:
          accessKeyId:
            name: portal-secrets
            key: APP_STORAGE_S3_ACCESSKEY
          secretAccessKey:
            name: portal-secrets
            key: APP_STORAGE_S3_SECRETKEY

Para PITR, añade recoveryTarget con fecha/hora. Valida los datos antes de apuntar la aplicación.

Laboratorio

  1. Inspecciona el cluster:
kubectl -n portal get cluster.postgresql.cnpg.io portal-postgres
kubectl -n portal get pods -l cnpg.io/cluster=portal-postgres -o wide
kubectl -n portal get svc | grep postgres
  1. Ve el primario y las réplicas:
kubectl -n portal get cluster.postgresql.cnpg.io portal-postgres \
  -o jsonpath='{.status.currentPrimary}{"\n"}'
  1. Prueba failover en laboratorio:
kubectl -n portal delete pod <primario>
kubectl -n portal get pods -w
  1. Haz un backup manual y sigue el progreso:
kubectl -n portal create -f backup.yaml
kubectl -n portal get backups.postgresql.cnpg.io -w
  1. Restaura en un cluster nuevo y valida con psql.

Errores comunes

Síntoma Causa
El cluster no queda Ready PVC, storageClass o secrets
Backup falla credenciales S3, endpoint o bucket
Failing over atascado el primario antiguo no terminó el shutdown
Réplica con lag IO/red o recursos insuficientes
La aplicación escribe en -ro configuración errónea del servicio
Restore no arranca backup/WAL incompleto o credencial

Checklist

  • [ ] Cluster con al menos 2 instancias.
  • [ ] Anti-affinity entre primario y réplica.
  • [ ] PDB y recursos definidos.
  • [ ] Backup programado + WAL archiving.
  • [ ] Restore probado en cluster nuevo.
  • [ ] Monitoreo y alertas de lag/failover.
  • [ ] Runbook de failover y fencing.

Glosario

  • primario: instancia de escritura.
  • réplica: instancia de lectura/replicación.
  • failover: promoción automática.
  • switchover: cambio planificado.
  • WAL: write-ahead log.
  • PITR: point-in-time recovery.
  • fencing: impedir que el antiguo primario escriba.

Siguiente

Ahora que la base de datos está cubierta, vamos al object storage: MinIO, erasure coding, buckets y credenciales.

Siguiente: Curso Kubernetes 16 — MinIO: erasure coding, buckets y credenciales

Compartir

Seguir leyendo

Lea también

  • Manual LSI / Broadcom MegaRAID — MegaCli y StorCLI
    Armazenamento

    Manual LSI / Broadcom MegaRAID — MegaCli y StorCLI

    Con esta guía, su equipo gana autonomía para diagnosticar rebuilds, resolver foreign configurations, gestionar BBU y CacheCade — con escenarios reales de producción documentados.

    31 de outubro de 202620 min de leitura
  • Nginx Cheatsheet

    Nginx Cheatsheet

    Guía de bolsillo con ejemplos listos para configurar Nginx en producción: desde instalación y virtual hosts hasta ajuste de rendimiento y resolución de problemas.

    31 de outubro de 202612 min de leitura
  • Curso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa
    Kubernetes

    Curso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa

    Qué prometer, cómo medir y qué hacer cuando el error se dispara: SLI, SLO, presupuesto de error, alertas que despiertan a alguien y postmortem sin caza de brujas.

    31 de outubro de 20265 min de leitura

Comentarios

Aún sin comentarios

Sea el primero en compartir su opinión sobre este artículo.

Deje un comentario

Newsletter

Reciba nuevos artículos

Suscríbase para recibir publicaciones del blog Nyverra en su correo. Enviaremos un enlace de confirmación.

​
  1. Inicio
  2. Kubernetes
  3. Curso Kubernetes 15 — Postgres con CloudNativePG: HA, failover y backup
Kubernetes
#Kubernetes#K8S#Backup#Curso Kubernetes

Curso Kubernetes 15 — Postgres con CloudNativePG: HA, failover y backup

Wedson LopesWedson Lopes
31 de outubro de 20264 min de leitura