Documentación del chart de Helm de Seatmap

Resumen

El chart de Helm de Seatmap despliega un stack completo de la aplicación Seatmap.pro que incluye los servicios Editor, Booking y converter, junto con las dependencias requeridas como PostgreSQL y Redis.

  • Versión del chart: 1.2.1
  • Versión de la aplicación: 1.40.0

Requisitos previos

  • Kubernetes 1.19+
  • Helm 3.2.0+
  • Soporte de aprovisionador de PV en la infraestructura subyacente
  • Soporte de LoadBalancer (para ingress)

Dependencias

El chart incluye las siguientes dependencias de Bitnami:

  • PostgreSQL (versión 12.x.x)
  • Redis (versión 17.x.x)

Instalación

Instalación desde el monorepo

El chart de Helm se encuentra en deployment/helm/seatmap/ en el monorepo. Antes de desplegar, asegúrate de que las dependencias de bitnami estén resueltas:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update deployment/helm/seatmap

helm upgrade --install seatmap deployment/helm/seatmap \
  --create-namespace \
  --namespace seatmap \
  --set global.s3.bucket=${S3_BUCKET} \
  --set global.s3.region=${S3_REGION} \
  --set global.s3.endpoint=${S3_ENDPOINT} \
  --set global.mail.host=${MAIL_HOST} \
  --set global.mail.fromAddress=${MAIL_FROM} \
  --set global.mail.port=${MAIL_PORT} \
  --set global.mail.socket.port=${MAIL_SOCKET_PORT} \
  --set-string secrets.s3.accessKey=${S3_ACCESS_KEY} \
  --set-string secrets.s3.secretKey=${S3_SECRET_KEY} \
  --set-string secrets.mail.username=${MAIL_USERNAME} \
  --set-string secrets.mail.password=${MAIL_PASSWORD} \
  --set-string secrets.google.apiKey=${GOOGLE_API_KEY} \
  --set imageCredentials.registry=${REGISTRY} \
  --set-string imageCredentials.username=${REGISTRY_USERNAME} \
  --set-string imageCredentials.password=${REGISTRY_PASSWORD}

Pruebas locales

Ejecuta la prueba del stack local completo con kind:

./deployment/helm/test-local.sh

Configuración

Parámetros globales

Configuración de hosts

global:
  hosts:
    editor: editor.test-5.seatmap.dev
    booking: booking.test-5.seatmap.dev

Registro de imágenes

imageCredentials:
  registry: registry.gitlab.com
  username: seatmap
  password: <password>

Configuraciones de recursos

global:
  resources:
    default:
      requests:
        cpu: '500m'
        memory: '2Gi'
      limits:
        cpu: '1000m'
        memory: '3Gi'
    frontend:
      requests:
        cpu: '100m'
        memory: '128Mi'
      limits:
        cpu: '200m'
        memory: '256Mi'

Configuración de ingress

El chart proporciona configuraciones de ingress para los servicios Editor y Booking con nombres de host independientes.

Ajustes globales de ingress

global:
  ingress:
    className: public
    proxyBodySize: '50m'
    annotations:
      cert-manager.io/cluster-issuer: 'letsencrypt-prod'
  hosts:
    editor: editor.test-5.seatmap.dev
    booking: booking.test-5.seatmap.dev

Ingress de Editor

El ingress del servicio Editor está configurado para gestionar tanto el tráfico web como el de la API en su dominio dedicado.

editor:
  ingress:
    enabled: true
    annotations: {} # Additional service-specific annotations
    apiPaths:
      - /api
      - /swagger-ui
      - /preview
      - /ws
      - /webjars
      - /v3

Características:

  • Host: editor.{domain} (p. ej., editor.test-5.seatmap.dev)
  • TLS habilitado con certificado basado en el nombre de host
  • La ruta web predeterminada (/) se enruta al puerto web
  • Las rutas de API se enrutan al puerto de la API
  • Soporte de WebSocket habilitado
  • Tamaño máximo del cuerpo configurable

Ingress de Booking

El ingress del servicio Booking está configurado en su propio dominio dedicado.

booking:
  ingress:
    enabled: true
    annotations: {} # Additional service-specific annotations
    apiPaths:
      - /api
      - /swagger-ui
      - /webjars
      - /v3
      - /csrf
      - /oauth2
      - /login
      - /.well-known
      - /actuator

Características:

  • Host: booking.{domain} (p. ej., booking.test-5.seatmap.dev)
  • TLS habilitado con certificado basado en el nombre de host
  • La ruta web predeterminada (/) se enruta al puerto web
  • Las rutas de API se enrutan al puerto de la API
  • Soporte de WebSocket habilitado
  • Configuración de tamaño del cuerpo del proxy compartida con Editor

Características comunes de ingress

Ambos ingress incluyen:

  • Anotaciones de NGINX para los límites de tamaño del cuerpo
  • Soporte de WebSocket
  • Configuración de TLS
  • Tipos de ruta Implementation-specific para las rutas raíz
  • Tipos de ruta Prefix para los endpoints de la API

Configuraciones de componentes

PostgreSQL

  • Autenticación gestionada mediante postgresql-secret
  • Base de datos y nombre de usuario predeterminados: seatmap
  • Incluye la inicialización de la extensión uuid-ossp
postgresql:
  enabled: true
  auth:
    existingSecret: 'postgresql-secret'
    username: seatmap
    database: seatmap

Redis

  • Arquitectura standalone
  • Autenticación habilitada mediante redis-secret
  • Configuración de memoria:
    • Memoria máxima: 512MB
    • Política: allkeys-lru
redis:
  enabled: true
  architecture: standalone
  auth:
    enabled: true
    existingSecret: 'redis-secret'
  master:
    persistence:
      enabled: true
      size: 8Gi

Registro de contenedores

Todas las imágenes de los servicios se alojan en el GitLab Container Registry:

Service Image
Editor Backend registry.gitlab.com/seatmap.pro/seatmap/editor-service
Editor Frontend registry.gitlab.com/seatmap.pro/seatmap/editor-client
Booking Backend registry.gitlab.com/seatmap.pro/seatmap/booking-service
Booking Frontend registry.gitlab.com/seatmap.pro/seatmap/booking-client
Converter registry.gitlab.com/seatmap.pro/seatmap/converter-service
Knowledge Base registry.gitlab.com/seatmap.pro/seatmap/knowledge-base

Las etiquetas de imagen siguen el versionado semántico (p. ej., 1.60.0 para releases, 1.61.0-dev.55-a9130b33 para builds de dev/stage).

Componentes de servicio

Servicio Editor

editor:
  image:
    repository: registry.gitlab.com/seatmap.pro/seatmap/editor-service
    tag: '1.60.0'
  frontend:
    image:
      repository: registry.gitlab.com/seatmap.pro/seatmap/editor-client
      tag: '1.60.0'

Configuraciones clave:

  • Ajustes del pool de conexiones HikariCP
  • Ajustes de expiración de tokens
  • Soporte de integración SSO
  • Rutas de API para ingress

Servicio Booking

booking:
  image:
    repository: registry.gitlab.com/seatmap.pro/seatmap/booking-service
    tag: '1.60.0'
  frontend:
    image:
      repository: registry.gitlab.com/seatmap.pro/seatmap/booking-client
      tag: '1.60.0'

Características:

  • Configuración de JPA/Hibernate
  • Ajustes del pool de conexiones
  • Soporte de OAuth2
  • Endpoints de Actuator

Servicio Converter

converter:
  image:
    repository: registry.gitlab.com/seatmap.pro/seatmap/converter-service
    tag: '1.60.0'

Limitaciones:

  • Longitud máxima del contenido: 32MB
  • Dimensiones máximas de imagen: 15000x15000 píxeles
  • Integración con almacenamiento S3

Configuración de servicios externos

Almacenamiento S3

global:
  s3:
    bucket: 'seatmap-storage'
    region: 'us-east-1'
    endpoint: 'https://s3.amazonaws.com'

Servidor de correo

global:
  mail:
    host: 'smtp.gmail.com'
    port: 587
    socket:
      port: 465
    fromAddress: 'seatmap@seatmap.pro'

Consideraciones de seguridad

Gestión de secretos

Se deben proporcionar los siguientes secretos:

  • Credenciales de PostgreSQL
  • Contraseña de Redis
  • Credenciales de acceso a S3
  • Credenciales del servidor de correo
  • Clave de la API de Google

Seguridad de red

  • Terminación TLS a través de ingress
  • Integración con cert-manager para la gestión automatizada de certificados
  • Puertos de API y web separados para los servicios

Escalado

Autoescalado horizontal de pods

El HPA es configurable para todos los servicios con ajustes predeterminados:

global:
  hpa:
    enabled: false
    targetCPUUtilizationPercentage: 80
    targetMemoryUtilizationPercentage: 80

Configuraciones de HPA específicas por servicio:

  • Editor: 2-6 réplicas
  • Booking: 2-6 réplicas
  • Converter: 1-4 réplicas

Monitorización y métricas

  • Endpoints de Actuator habilitados para los servicios Spring Boot
  • Métricas de Redis deshabilitadas por defecto
  • Endpoints de métricas personalizados configurados para los servicios editor y booking

Resolución de problemas

Problemas comunes

  1. Errores al extraer la imagen

    • Verifica las credenciales del registro
    • Comprueba que las etiquetas de imagen existan
  2. Problemas de conexión con la base de datos

    • Verifica que el secreto de PostgreSQL exista
    • Comprueba los ajustes del pool de conexiones
  3. Problemas de almacenamiento

    • Valida las credenciales de S3 y la accesibilidad del bucket
    • Comprueba las cuotas y límites de almacenamiento

Depuración

  1. Accede a los logs mediante:

    kubectl logs -f deployment/seatmap-<component>
    
  2. Comprueba el estado de los servicios:

    kubectl get pods -l app.kubernetes.io/instance=seatmap
    

Referencia de variables de configuración

Variables globales

Parameter Description Default Value
global.hostname Nombre de host principal de la aplicación seat-113.seatmap.dev
global.ports.editor.api Puerto de la API de Editor 8080
global.ports.editor.web Puerto web de Editor 80
global.ports.booking.api Puerto de la API de Booking 9090
global.ports.booking.web Puerto web de Booking 80
global.ports.converter.api Puerto de la API de Converter 8080
global.resources.default.requests.cpu Solicitud de CPU predeterminada 500m
global.resources.default.requests.memory Solicitud de memoria predeterminada 2Gi
global.resources.default.limits.cpu Límite de CPU predeterminado 1000m
global.resources.default.limits.memory Límite de memoria predeterminado 3Gi
global.resources.frontend.requests.cpu Solicitud de CPU del frontend 100m
global.resources.frontend.requests.memory Solicitud de memoria del frontend 128Mi
global.resources.frontend.limits.cpu Límite de CPU del frontend 200m
global.resources.frontend.limits.memory Límite de memoria del frontend 256Mi

Variables de PostgreSQL

Parameter Description Default Value
postgresql.enabled Habilitar el despliegue de PostgreSQL true
postgresql.auth.existingSecret Nombre del secreto para la autenticación postgresql-secret
postgresql.auth.username Nombre de usuario de PostgreSQL seatmap
postgresql.auth.database Nombre de la base de datos de PostgreSQL seatmap
postgresql.service.port Puerto del servicio de PostgreSQL 5432

Variables de Redis

Parameter Description Default Value
redis.enabled Habilitar el despliegue de Redis true
redis.architecture Tipo de arquitectura de Redis standalone
redis.auth.enabled Habilitar la autenticación de Redis true
redis.auth.existingSecret Nombre del secreto para la autenticación redis-secret
redis.master.persistence.enabled Habilitar la persistencia true
redis.master.persistence.size Tamaño de la persistencia 8Gi
redis.port Puerto del servicio de Redis 6379

Variables del servicio Editor

Parameter Description Default Value
editor.image.repository Repositorio de imagen del servicio Editor registry.gitlab.com/seatmap.pro/seatmap/editor-service
editor.image.tag Etiqueta de imagen del servicio Editor 1.40.0
editor.frontend.image.repository Repositorio de imagen del frontend de Editor registry.gitlab.com/seatmap.pro/seatmap/editor-client
editor.frontend.image.tag Etiqueta de imagen del frontend de Editor 1.40.0
editor.config.initial.delay Retardo inicial 5000
editor.config.spring.datasource.hikari.connectionTimeout Tiempo de espera de conexión a la base de datos 60000
editor.config.spring.datasource.hikari.maximumPoolSize Tamaño del pool de conexiones a la base de datos 20
editor.hpa.minReplicas Réplicas mínimas para el HPA 2
editor.hpa.maxReplicas Réplicas máximas para el HPA 6

Variables del servicio Booking

Parameter Description Default Value
booking.image.repository Repositorio de imagen del servicio Booking registry.gitlab.com/seatmap.pro/seatmap/booking-service
booking.image.tag Etiqueta de imagen del servicio Booking 1.40.0
booking.frontend.image.repository Repositorio de imagen del frontend de Booking registry.gitlab.com/seatmap.pro/seatmap/booking-client
booking.frontend.image.tag Etiqueta de imagen del frontend de Booking 1.40.0
booking.config.spring.profiles.include Perfiles activos de Spring prod
booking.config.spring.jpa.generateDdl Habilitar la generación de DDL true
booking.config.spring.jpa.hibernate.ddlAuto Hibernate DDL auto update
booking.hpa.minReplicas Réplicas mínimas para el HPA 2
booking.hpa.maxReplicas Réplicas máximas para el HPA 6

Variables del servicio Converter

Parameter Description Default Value
converter.image.repository Repositorio de imagen del servicio Converter registry.gitlab.com/seatmap.pro/converter
converter.image.tag Etiqueta de imagen del servicio Converter 1.40.0-f8ac8b4c
converter.config.max.contentLength Longitud máxima del contenido 33554432
converter.config.max.image.width Ancho máximo de la imagen 15000
converter.config.max.image.height Alto máximo de la imagen 15000
converter.hpa.minReplicas Réplicas mínimas para el HPA 1
converter.hpa.maxReplicas Réplicas máximas para el HPA 4

Variables de servicios externos

Parameter Description Default Value
secrets.s3.accessKey Clave de acceso de S3 secrets.s3.accessKey
secrets.s3.secretKey Clave secreta de S3 secrets.s3.secretKey
secrets.mail.username Nombre de usuario del servidor de correo secrets.mail.username
secrets.mail.password Contraseña del servidor de correo secrets.mail.password
secrets.google.apiKey Clave de la API de Google secrets.google.apiKey
global.s3.bucket Nombre del bucket de S3 seatmap-storage
global.s3.region Región de S3 us-east-1
global.s3.endpoint Endpoint de S3 https://s3.amazonaws.com
global.mail.host Host del servidor de correo smtp.gmail.com
global.mail.port Puerto del servidor de correo 587
global.mail.socket.port Puerto del socket de correo 465
global.mail.fromAddress Dirección de remitente del correo seatmap@seatmap.pro

Soporte y mantenimiento

  • Actualizaciones periódicas mediante etiquetas de versión
  • Cambios de configuración mediante Helm upgrade
  • Gestión del almacenamiento persistente para PostgreSQL y Redis