Seatmap Helm chart documentation

Overview

The Seatmap Helm chart deploys a complete Seatmap.pro application stack including Editor, Booking, and converter services along with the required dependencies like PostgreSQL and Redis.

  • Chart Version: 1.1.2
  • Application Version: 1.40.0

Prerequisites

  • Kubernetes 1.19+
  • Helm 3.2.0+
  • PV provisioner support in the underlying infrastructure
  • LoadBalancer support (for ingress)

Dependencies

The chart includes the following Bitnami dependencies:

  • PostgreSQL (version 12.x.x)
  • Redis (version 17.x.x)

Installation

Installation from GitLab registry

  1. Log in to the GitLab registry:
helm registry login registry.gitlab.com \
  --username ${REGISTRY_USERNAME} \
  --password ${REGISTRY_PASSWORD}
  1. Install or upgrade the chart:
helm upgrade --install seatmap oci://registry.gitlab.com/seatmap.pro/helm-charts/stable/seatmap \
  --version 1.1.2 \
  --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}

Configuration

Global parameters

Host Configuration

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

Image Registry

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

Resource configurations

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

Ingress configuration

The chart provides ingress configurations for both Editor and Booking services with separate hostnames.

Global ingress settings

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

Editor Ingress

The Editor service ingress is configured to handle both web and API traffic on its dedicated domain.

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

Features:

  • Host: editor.{domain} (e.g., editor.test-5.seatmap.dev)
  • TLS enabled with hostname-based certificate
  • Default web path (/) routes to web port
  • API paths route to API port
  • WebSocket support enabled
  • Configurable max body size

Booking Ingress

The Booking service ingress is configured on its own dedicated domain.

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

Features:

  • Host: booking.{domain} (e.g., booking.test-5.seatmap.dev)
  • TLS enabled with hostname-based certificate
  • Default web path (/) routes to web port
  • API paths route to API port
  • WebSocket support enabled
  • Shared proxy body size configuration with Editor

Common ingress features

Both ingresses include:

  • NGINX annotations for body size limits
  • WebSocket support
  • TLS configuration
  • Implementation-specific path types for root paths
  • Prefix path types for API endpoints

Component configurations

PostgreSQL

  • Authentication managed through postgresql-secret
  • Default database and username: seatmap
  • Includes uuid-ossp extension initialization
postgresql:
  enabled: true
  auth:
    existingSecret: "postgresql-secret"
    username: seatmap
    database: seatmap

Redis

  • Standalone architecture
  • Authentication enabled through redis-secret
  • Memory configuration:
    • Max memory: 512MB
    • Policy: allkeys-lru
redis:
  enabled: true
  architecture: standalone
  auth:
    enabled: true
    existingSecret: "redis-secret"
  master:
    persistence:
      enabled: true
      size: 8Gi

Service components

Editor service

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

Key configurations:

  • HikariCP connection pool settings
  • Token expiration settings
  • SSO integration support
  • API paths for ingress

Booking service

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

Features:

  • JPA/Hibernate configuration
  • Connection pool settings
  • OAuth2 support
  • Actuator endpoints

Converter service

converter:
  image:
    repository: registry.gitlab.com/seatmap.pro/converter
    tag: 1.40.0-f8ac8b4c

Limitations:

  • Max content length: 32MB
  • Max image dimensions: 15000x15000 pixels
  • S3 storage integration

External service configuration

S3 storage

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

Mail server

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

Security considerations

Secrets management

The following secrets must be provided:

  • PostgreSQL credentials
  • Redis password
  • S3 access credentials
  • Mail server credentials
  • Google API key

Network security

  • TLS termination through ingress
  • cert-manager integration for automated certificate management
  • Separate API and web ports for services

Scaling

Horizontal pod autoscaling

HPA is configurable for all services with default settings:

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

Service-specific HPA configurations:

  • Editor: 2-6 replicas
  • Booking: 2-6 replicas
  • Converter: 1-4 replicas

Monitoring and metrics

  • Actuator endpoints enabled for Spring Boot services
  • Redis metrics disabled by default
  • Custom metrics endpoints configured for editor and booking services

Troubleshooting

Common issues

  1. Image pull errors

    • Verify registry credentials
    • Check image tags exist
  2. Database connection issues

    • Verify PostgreSQL secret exists
    • Check connection pool settings
  3. Storage issues

    • Validate S3 credentials and bucket accessibility
    • Check storage quotas and limits

Debugging

  1. Access logs through:

    kubectl logs -f deployment/seatmap-<component>
    
  2. Check service status:

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

Configuration variables reference

Global variables

Parameter Description Default Value
global.hostname Main hostname for the application seat-113.seatmap.dev
global.ports.editor.api Editor API port 8080
global.ports.editor.web Editor web port 80
global.ports.booking.api Booking API port 9090
global.ports.booking.web Booking web port 80
global.ports.converter.api Converter API port 8080
global.resources.default.requests.cpu Default CPU request 500m
global.resources.default.requests.memory Default memory request 2Gi
global.resources.default.limits.cpu Default CPU limit 1000m
global.resources.default.limits.memory Default memory limit 3Gi
global.resources.frontend.requests.cpu Frontend CPU request 100m
global.resources.frontend.requests.memory Frontend memory request 128Mi
global.resources.frontend.limits.cpu Frontend CPU limit 200m
global.resources.frontend.limits.memory Frontend memory limit 256Mi

PostgreSQL variables

Parameter Description Default Value
postgresql.enabled Enable PostgreSQL deployment true
postgresql.auth.existingSecret Secret name for auth postgresql-secret
postgresql.auth.username PostgreSQL username seatmap
postgresql.auth.database PostgreSQL database name seatmap
postgresql.service.port PostgreSQL service port 5432

Redis variables

Parameter Description Default Value
redis.enabled Enable Redis deployment true
redis.architecture Redis architecture type standalone
redis.auth.enabled Enable Redis authentication true
redis.auth.existingSecret Secret name for auth redis-secret
redis.master.persistence.enabled Enable persistence true
redis.master.persistence.size Persistence size 8Gi
redis.port Redis service port 6379

Editor service variables

Parameter Description Default Value
editor.image.repository Editor service image repository registry.gitlab.com/seatmap.pro/seatmap/editor-service
editor.image.tag Editor service image tag 1.40.0
editor.frontend.image.repository Editor frontend image repository registry.gitlab.com/seatmap.pro/seatmap/editor-client
editor.frontend.image.tag Editor frontend image tag 1.40.0
editor.config.initial.delay Initial delay 5000
editor.config.spring.datasource.hikari.connectionTimeout Database connection timeout 60000
editor.config.spring.datasource.hikari.maximumPoolSize Database connection pool size 20
editor.hpa.minReplicas Minimum replicas for HPA 2
editor.hpa.maxReplicas Maximum replicas for HPA 6

Booking service variables

Parameter Description Default Value
booking.image.repository Booking service image repository registry.gitlab.com/seatmap.pro/seatmap/booking-service
booking.image.tag Booking service image tag 1.40.0
booking.frontend.image.repository Booking frontend image repository registry.gitlab.com/seatmap.pro/seatmap/booking-client
booking.frontend.image.tag Booking frontend image tag 1.40.0
booking.config.spring.profiles.include Spring active profiles prod
booking.config.spring.jpa.generateDdl Enable DDL generation true
booking.config.spring.jpa.hibernate.ddlAuto Hibernate DDL auto update
booking.hpa.minReplicas Minimum replicas for HPA 2
booking.hpa.maxReplicas Maximum replicas for HPA 6

Converter service variables

Parameter Description Default Value
converter.image.repository Converter service image repository registry.gitlab.com/seatmap.pro/converter
converter.image.tag Converter service image tag 1.40.0-f8ac8b4c
converter.config.max.contentLength Maximum content length 33554432
converter.config.max.image.width Maximum image width 15000
converter.config.max.image.height Maximum image height 15000
converter.hpa.minReplicas Minimum replicas for HPA 1
converter.hpa.maxReplicas Maximum replicas for HPA 4

External service variables

Parameter Description Default Value
secrets.s3.accessKey S3 access key secrets.s3.accessKey
secrets.s3.secretKey S3 secret key secrets.s3.secretKey
secrets.mail.username Mail server username secrets.mail.username
secrets.mail.password Mail server password secrets.mail.password
secrets.google.apiKey Google API key secrets.google.apiKey
global.s3.bucket S3 bucket name seatmap-storage
global.s3.region S3 region us-east-1
global.s3.endpoint S3 endpoint https://s3.amazonaws.com
global.mail.host Mail server host smtp.gmail.com
global.mail.port Mail server port 587
global.mail.socket.port Mail socket port 465
global.mail.fromAddress Mail from address seatmap@seatmap.pro

Support and maintenance

  • Regular updates through version tags
  • Configuration changes through Helm upgrade
  • Persistent storage management for PostgreSQL and Redis