βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Internet β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β DNS / CDN β
β tu-dominio.com β
ββββββββββ¬βββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kubernetes Cluster β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Ingress Controller β β
β β (nginx / traefik / etc.) β β
β ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Ingress Resource β β
β β (wapi.namespace) β β
β β Routes: your-domain.com β β
β ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Service (ClusterIP) β β
β β Port: 80 β 3000 β β
β ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Deployment β β
β β Replicas: 1 β β
β β Strategy: Recreate β β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Pod: wapi β β β
β β β β β β
β β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β Container: wapi β β β β
β β β β Image: your-registry/wapi:latest β β β β
β β β β Port: 3000 β β β β
β β β β β β β β
β β β β Environment Variables: β β β β
β β β β ββ ConfigMap: wapi-config β β β β
β β β β β ββ NODE_ENV β β β β
β β β β β ββ BETTER_AUTH_URL β β β β
β β β β β ββ ... β β β β
β β β β β β β β β
β β β β ββ Secret: wapi-secrets β β β β
β β β β ββ DATABASE_URL β β β β
β β β β ββ DATABASE_AUTH_TOKEN β β β β
β β β β ββ BETTER_AUTH_SECRET β β β β
β β β β β β β β
β β β β Volume Mounts: β β β β
β β β β ββ /app/whatsapp_sessions β β β β
β β β β ββ /app/public/media β β β β
β β β β β β β β
β β β β Resource Limits: β β β β
β β β β ββ CPU: 250m - 1000m β β β β
β β β β ββ Memory: 512Mi - 2Gi β β β β
β β β β β β β β
β β β β Health Checks: β β β β
β β β β ββ Liveness Probe (HTTP GET /) β β β β
β β β β ββ Readiness Probe (HTTP GET /) β β β β
β β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β βΌ βΌ β β
β β ββββββββββββββββββββ¬βββββββββββββββββββ β β
β β β β β β β
β β βΌ βΌ β β β
β β βββββββββββββββββββββ ββββββββββββββββββββ β β β
β β β PVC: β β PVC: β β β β
β β β whatsapp-sessionsβ β media β β β β
β β β (5Gi) β β (20Gi) β β β β
β β βββββββββββ¬ββββββββββ ββββββββββ¬ββββββββββ β β β
β β β β β β β
β β βΌ βΌ β β β
β β βββββββββββββββββββββ ββββββββββββββββββββ β β β
β β β Persistent β β Persistent β β β β
β β β Volume (PV) β β Volume (PV) β β β β
β β βββββββββββββββββββββ ββββββββββββββββββββ β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β HorizontalPodAutoscaler (HPA) β β
β β Min: 1, Max: 1 (No scaling) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Usuario β DNS β Ingress Controller β Ingress Resource β Service β Pod β AplicaciΓ³n Next.js
AplicaciΓ³n Next.js β Volume Mount β PVC β PV β Storage Backend
Pod β Environment Variables β ConfigMap (pΓΊblicas) + Secrets (sensibles)
- AΓsla todos los recursos de la aplicaciΓ³n
- Facilita la gestiΓ³n y el RBAC
- Variables de entorno no sensibles
- FΓ‘cilmente actualizable sin rebuild
- Ejemplos: NODE_ENV, BETTER_AUTH_URL
- Credenciales y datos sensibles
- Base64 encoded
- Ejemplos: DATABASE_URL, AUTH_SECRET
whatsapp-sessions (5Gi)
- Almacena las sesiones de WhatsApp
- CrΓtico - contiene las credenciales de autenticaciΓ³n
- Backup frecuente recomendado
media (20Gi)
- Almacena archivos multimedia
- ImΓ‘genes, videos, documentos recibidos
- TamaΓ±o ajustable segΓΊn necesidad
- Replicas: 1 (no escalar debido a sesiones de WhatsApp)
- Strategy: Recreate (evita conflictos de sesiΓ³n)
- Image: Next.js standalone build
- Health Checks: Liveness + Readiness probes
- Tipo: ClusterIP (interno al cluster)
- Expone el pod en el puerto 80
- Redirige al puerto 3000 del container
- Punto de entrada externo
- Maneja routing por dominio
- Soporte TLS/SSL opcional
- IntegraciΓ³n con cert-manager
- Configurado con min=1, max=1
- Previene escalado automΓ‘tico
- Necesario por limitaciones de sesiones de WhatsApp
Internet β Ingress Controller β wapi Pod β External Services (Database, APIs)
β Permitido β Permitido β Permitido
wapi Pod β Otros Namespaces
β Bloqueado (configurable)
- Usuario no-root (nextjs:1001)
- Read-only filesystem (excepto volΓΊmenes)
- No privilegios escalados
- Capabilities mΓnimos
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backup Strategy β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Daily: β
β ββ WhatsApp Sessions β Cloud Storage / NAS β
β ββ Media Files β Cloud Storage / NAS β
β β
β Before Updates: β
β ββ Complete snapshot de PVs β
β ββ Export de configuraciones β
β β
β Methods: β
β ββ CronJob en Kubernetes β
β ββ Velero (cluster backup) β
β ββ Manual: ./deploy.sh backup β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# En tiempo real
kubectl logs -f deployment/wapi -n wapi
# Γltimas 100 lΓneas
kubectl logs --tail=100 deployment/wapi -n wapi
# Desde hace 1 hora
kubectl logs --since=1h deployment/wapi -n wapi# CPU y Memoria
kubectl top pod -n wapi
# Eventos
kubectl get events -n wapi --sort-by='.lastTimestamp'# Estado general
kubectl get all -n wapi
# Detalles del pod
kubectl describe pod -n wapi -l app=wapi- WhatsApp sessions no son compartibles
- Storage PV no soporta ReadWriteMany
- Estado de sesiΓ³n es local al pod
-
Session Storage Distribuido
- Redis/Memcached para sesiones
- Database compartida para estado
-
Sticky Sessions
- Session affinity en el Ingress
- Routing basado en cuenta de WhatsApp
-
Storage Class con RWX
- NFS o similar para mΓΊltiples pods
- EFS (AWS), Filestore (GCP), Azure Files
- 1 Pod: ~512Mi RAM, 0.25 CPU
- Storage: 25Gi (5Gi sessions + 20Gi media)
- Ingress: VarΓa segΓΊn proveedor
AWS EKS:
- Node: t3.small ($0.0208/hr) = ~$15/mes
- EBS Volume: 25GB ($0.10/GB) = ~$2.5/mes
- ALB: ~$16/mes
- Total: ~$33-35/mes
Google GKE:
- Node: e2-small ($0.021/hr) = ~$15/mes
- PD Storage: 25GB ($0.17/GB) = ~$4.25/mes
- Ingress: Incluido
- Total: ~$19-20/mes
DigitalOcean:
- Node: Basic ($12/mes)
- Volume: 25GB ($2.50/mes)
- Load Balancer: $10/mes
- Total: ~$24-25/mes
Nota: Costos aproximados, verificar precios actuales
βββββββββββββββ ββββββββββββββββ βββββββββββββββ ββββββββββββββββ
β Git Push β -> β Build Image β -> β Push to ECR β -> β Update K8s β
β to master β β (Docker) β β / GCR / etc β β Deployment β
βββββββββββββββ ββββββββββββββββ βββββββββββββββ ββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββ ββββββββββββββββ
β Run Tests β β Health Checkβ
β Lint, Unit β β Smoke Tests β
ββββββββββββββββ ββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββ ββββββββββββββββ
β Security β β Rollback if β
β Scan Image β β Failure β
ββββββββββββββββ ββββββββββββββββ