Skip to content

Latest commit

Β 

History

History
317 lines (271 loc) Β· 16.8 KB

File metadata and controls

317 lines (271 loc) Β· 16.8 KB

Arquitectura de Despliegue en Kubernetes

Vista General del Sistema

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          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)                     β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Flujo de Datos

TrΓ‘fico Entrante (Requests)

Usuario β†’ DNS β†’ Ingress Controller β†’ Ingress Resource β†’ Service β†’ Pod β†’ AplicaciΓ³n Next.js

Almacenamiento Persistente

AplicaciΓ³n Next.js β†’ Volume Mount β†’ PVC β†’ PV β†’ Storage Backend

ConfiguraciΓ³n

Pod β†’ Environment Variables β†’ ConfigMap (pΓΊblicas) + Secrets (sensibles)

Componentes Clave

1. Namespace: wapi

  • AΓ­sla todos los recursos de la aplicaciΓ³n
  • Facilita la gestiΓ³n y el RBAC

2. ConfigMap: wapi-config

  • Variables de entorno no sensibles
  • FΓ‘cilmente actualizable sin rebuild
  • Ejemplos: NODE_ENV, BETTER_AUTH_URL

3. Secret: wapi-secrets

  • Credenciales y datos sensibles
  • Base64 encoded
  • Ejemplos: DATABASE_URL, AUTH_SECRET

4. PersistentVolumeClaim (PVC)

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

5. Deployment

  • 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

6. Service

  • Tipo: ClusterIP (interno al cluster)
  • Expone el pod en el puerto 80
  • Redirige al puerto 3000 del container

7. Ingress

  • Punto de entrada externo
  • Maneja routing por dominio
  • Soporte TLS/SSL opcional
  • IntegraciΓ³n con cert-manager

8. HorizontalPodAutoscaler (HPA)

  • Configurado con min=1, max=1
  • Previene escalado automΓ‘tico
  • Necesario por limitaciones de sesiones de WhatsApp

Seguridad

Network Policies (Opcional)

Internet β†’ Ingress Controller β†’ wapi Pod β†’ External Services (Database, APIs)
         βœ“ Permitido         βœ“ Permitido    βœ“ Permitido

wapi Pod β†’ Otros Namespaces
         βœ— Bloqueado (configurable)

Pod Security

  • Usuario no-root (nextjs:1001)
  • Read-only filesystem (excepto volΓΊmenes)
  • No privilegios escalados
  • Capabilities mΓ­nimos

Backup y RecuperaciΓ³n

Estrategia de Backup

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    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                             β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Monitoreo y Observabilidad

Logs

# 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

MΓ©tricas

# CPU y Memoria
kubectl top pod -n wapi

# Eventos
kubectl get events -n wapi --sort-by='.lastTimestamp'

Health Status

# Estado general
kubectl get all -n wapi

# Detalles del pod
kubectl describe pod -n wapi -l app=wapi

Escalabilidad

Limitaciones Actuales

⚠️ 1 Réplica MÑxima

  • WhatsApp sessions no son compartibles
  • Storage PV no soporta ReadWriteMany
  • Estado de sesiΓ³n es local al pod

Futuras Mejoras para Escalabilidad

  1. Session Storage Distribuido

    • Redis/Memcached para sesiones
    • Database compartida para estado
  2. Sticky Sessions

    • Session affinity en el Ingress
    • Routing basado en cuenta de WhatsApp
  3. Storage Class con RWX

    • NFS o similar para mΓΊltiples pods
    • EFS (AWS), Filestore (GCP), Azure Files

Costos Estimados

Recursos MΓ­nimos

  • 1 Pod: ~512Mi RAM, 0.25 CPU
  • Storage: 25Gi (5Gi sessions + 20Gi media)
  • Ingress: VarΓ­a segΓΊn proveedor

Ejemplo en Cloud Providers

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

CI/CD Pipeline Sugerido

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   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     β”‚
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

DocumentaciΓ³n Relacionada