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
-
Errores al extraer la imagen
- Verifica las credenciales del registro
- Comprueba que las etiquetas de imagen existan
-
Problemas de conexión con la base de datos
- Verifica que el secreto de PostgreSQL exista
- Comprueba los ajustes del pool de conexiones
-
Problemas de almacenamiento
- Valida las credenciales de S3 y la accesibilidad del bucket
- Comprueba las cuotas y límites de almacenamiento
Depuración
-
Accede a los logs mediante:
kubectl logs -f deployment/seatmap-<component> -
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