Saltar al contenido principal
Este documento describe la estrategia de recuperación ante desastres (DR), el Objetivo de Tiempo de Recuperación (RTO) y el Objetivo de Punto de Recuperación (RPO) para la infraestructura EKB AWS/EKS. Cubre las capacidades HA integradas, los sistemas de respaldo activos, los procedimientos de recuperación y las brechas conocidas.
Para instrucciones de despliegue, consulte la Guía de Despliegue con Terragrunt.

Resumen de Arquitectura y Alta Disponibilidad

Componentes de Infraestructura

Capacidades HA Actuales


Objetivos RTO / RPO


Sistemas de Respaldo

1. Estado de Terraform / Terragrunt — S3

Qué se respalda: Todo el estado de infraestructura (EKS, red, IAM, releases de Helm). Implementación:
  • Bucket S3 por entorno: ekb-terraform-state-<env-name> (inicializado vía terragrunt/environments/<env-name>/state/)
  • Versionado habilitado — cualquier versión anterior del estado puede ser restaurada
  • Cifrado del lado del servidor (AES-256)
  • Tabla DynamoDB para bloqueo de estado
Recuperación: Revertir a cualquier versión anterior del estado en S3, luego volver a ejecutar terragrunt apply. RPO: Cada commit de terragrunt apply — continuo.

2. Volúmenes Persistentes EBS — AWS Data Lifecycle Manager

Qué se respalda: Volúmenes EBS adjuntos a pods (PostgreSQL de Automator, MinIO de Supabase, cualquier carga de trabajo con estado). Implementación: Política de AWS Data Lifecycle Manager (DLM) dirigida a etiquetas de entorno.
Recuperación:
RPO: Hasta 24 horas (snapshots diarios). Reducir aumentando la frecuencia del horario DLM.

3. CloudNativePG (DB HA de Supabase) — Respaldos Barman Cloud

Aplica a: Entornos con ENABLE_CNPG=true y ENABLE_HA_SUPABASE_DB=true. Qué se respalda: El clúster Postgres de CloudNativePG (ha-supabase-db), incluyendo streaming continuo de WAL (Write-Ahead Log) a S3 o MinIO, y respaldos base completos programados vía el CRD ScheduledBackup de CNPG. Implementación (configurado en values/ha-supabase-db.yaml):
Verificar estado del respaldo:
Recuperación a punto en el tiempo (PITR):
RPO: Casi cero para clústeres con WAL habilitado (segundos de retraso, limitados por el intervalo de carga WAL).

4. ElastiCache Redis — Replicación Multi-AZ

Aplica a: Entornos con ENABLE_AWS_SERVICES=true. Redis no es un almacén de datos primario — almacena caché transitoria y datos de sesión. El enfoque DR está en un failover rápido en lugar de respaldo/restauración. Implementación:
  • Multi-AZ habilitado con failover automático
  • Cifrado en reposo y en tránsito
  • Un fallo del nodo primario promueve una réplica automáticamente (< 1 min)
RPO: Los datos de Redis son efímeros por diseño. Las fallas de caché después del failover son esperadas; la aplicación repuebla desde la base de datos.

5. Amazon MQ (RabbitMQ — Cola de Mensajes

Aplica a: Entornos con ENABLE_AWS_SERVICES=true. Implementación:
  • Despliegue de instancia individual (predeterminado) o activo/en espera
  • Los mensajes en tránsito pueden perderse durante un reinicio del broker; diseñar consumidores idempotentes
  • UI de gestión disponible en el puerto 15671 (SSL)
RPO: Instancia individual — los mensajes en tránsito al momento del fallo pueden perderse. Usar el modo de despliegue activo/en espera para reducir este riesgo.

Mecanismos de Auto-recuperación

Karpenter — Provisionamiento y Recuperación de Nodos

  • Consolidación: WhenEmptyOrUnderutilized — los nodos inactivos se terminan automáticamente
  • Manejo de interrupciones Spot: Escucha eventos de interrupción SQS; drena y sustituye nodos Spot antes de la terminación
  • Deriva de nodos: Los nodos que usan AMIs o configuraciones obsoletas se reemplazan automáticamente cuando enable_drift = true
  • Tiempo de recuperación: Nuevo nodo provisionado en 0–10 minutos

KEDA — Autoescalado de Pods

  • Réplicas mínimas: 2 para todos los servicios (Web, API, Celery, Automator) — previene punto único de falla
  • Umbral de CPU: 60–70% activa la escala ascendente
  • Umbral de memoria: 80% activa la escala ascendente
  • Estabilización de escala descendente: 30 segundos — evita fluctuaciones
  • Tiempo de recuperación: Pods fallidos reprogramados dentro de 0–2 minutos

Anti-afinidad de Pods de Kubernetes

Todos los servicios sin estado usan anti-afinidad preferredDuringSchedulingIgnoredDuringExecution en kubernetes.io/hostname para distribuir pods entre nodos y AZs.

Procedimientos de Recuperación

Escenario 1: Fallo de AZ

Comportamiento esperado: Karpenter provisiona nodos de reemplazo en las AZs restantes; KEDA reprograma pods; ALB deja de enrutar a objetivos no saludables. Verificación:
No se requiere intervención manual bajo circunstancias normales.

Escenario 2: Fallo del Nodo Primario de Postgres (CloudNativePG)

CloudNativePG promueve automáticamente una réplica a primario.
Las aplicaciones se reconectan vía PgBouncer — no se necesita cambiar la cadena de conexión.

Escenario 3: Restaurar Volumen EBS desde Snapshot


Escenario 4: Recreación Completa de Infraestructura

Usado después de un fallo catastrófico o al reconstruir una región.
RTO estimado: 30–60 minutos para el clúster completo; 60–120 minutos si se deben restaurar datos de EBS/CNPG.

Escenario 5: Reversión de Estado de Terragrunt


Observabilidad y Alertas (SigNoz)

Cuando ENABLE_SIGNOZ=true, SigNoz se despliega en el namespace monitoring y proporciona:
  • Traza distribuida para todos los servicios de EKB
  • Métricas del clúster vía el agente DaemonSet k8s-infra (CPU, memoria, estado de pods)
  • Agregación de logs de todos los pods
  • Alertas — configure reglas de alerta en SigNoz para notificar sobre bucles de crash de pods, altas tasas de error o presión de nodos
Para fines de DR, los paneles de SigNoz son la herramienta principal para diagnosticar y confirmar la recuperación después de un incidente. Los datos de SigNoz se almacenan en volúmenes EBS PV y están cubiertos por la política de snapshots EBS.

Brechas y Recomendaciones