Документация по Helm-чарту Seatmap

Обзор

Helm-чарт Seatmap разворачивает полный стек приложения Seatmap.pro, включая сервисы Editor, Booking и converter, вместе с необходимыми зависимостями, такими как PostgreSQL и Redis.

  • Версия чарта: 1.2.1
  • Версия приложения: 1.40.0

Предварительные требования

  • Kubernetes 1.19+
  • Helm 3.2.0+
  • Поддержка провижионера PV в базовой инфраструктуре
  • Поддержка LoadBalancer (для ingress)

Зависимости

Чарт включает следующие зависимости Bitnami:

  • PostgreSQL (версия 12.x.x)
  • Redis (версия 17.x.x)

Установка

Установка из монорепозитория

Helm-чарт находится в deployment/helm/seatmap/ в монорепозитории. Перед развёртыванием убедитесь, что зависимости bitnami разрешены:

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}

Локальное тестирование

Запустите полный тест локального стека с помощью kind:

./deployment/helm/test-local.sh

Конфигурация

Глобальные параметры

Конфигурация хостов

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

Реестр образов

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

Конфигурации ресурсов

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

Чарт предоставляет конфигурации ingress для сервисов Editor и Booking с отдельными именами хостов.

Глобальные настройки 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 для Editor

Ingress сервиса Editor настроен на обработку как веб-, так и API-трафика на своём выделенном домене.

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

Возможности:

  • Хост: editor.{domain} (например, editor.test-5.seatmap.dev)
  • TLS включён с сертификатом на основе имени хоста
  • Веб-путь по умолчанию (/) направляется на веб-порт
  • API-пути направляются на API-порт
  • Поддержка WebSocket включена
  • Настраиваемый максимальный размер тела запроса

Ingress для Booking

Ingress сервиса Booking настроен на своём собственном выделенном домене.

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

Возможности:

  • Хост: booking.{domain} (например, booking.test-5.seatmap.dev)
  • TLS включён с сертификатом на основе имени хоста
  • Веб-путь по умолчанию (/) направляется на веб-порт
  • API-пути направляются на API-порт
  • Поддержка WebSocket включена
  • Общая конфигурация размера тела прокси с Editor

Общие возможности ingress

Оба ingress включают:

  • Аннотации NGINX для ограничения размера тела запроса
  • Поддержку WebSocket
  • Конфигурацию TLS
  • Типы путей Implementation-specific для корневых путей
  • Типы путей Prefix для API-эндпоинтов

Конфигурации компонентов

PostgreSQL

  • Аутентификация управляется через postgresql-secret
  • База данных и имя пользователя по умолчанию: seatmap
  • Включает инициализацию расширения uuid-ossp
postgresql:
  enabled: true
  auth:
    existingSecret: 'postgresql-secret'
    username: seatmap
    database: seatmap

Redis

  • Standalone-архитектура
  • Аутентификация включена через redis-secret
  • Конфигурация памяти:
    • Максимальная память: 512MB
    • Политика: allkeys-lru
redis:
  enabled: true
  architecture: standalone
  auth:
    enabled: true
    existingSecret: 'redis-secret'
  master:
    persistence:
      enabled: true
      size: 8Gi

Реестр контейнеров

Все образы сервисов размещены в 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

Теги образов следуют семантическому версионированию (например, 1.60.0 для релизов, 1.61.0-dev.55-a9130b33 для сборок dev/stage).

Компоненты сервисов

Сервис 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'

Ключевые конфигурации:

  • Настройки пула соединений HikariCP
  • Настройки истечения срока токенов
  • Поддержка интеграции SSO
  • API-пути для ingress

Сервис 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'

Возможности:

  • Конфигурация JPA/Hibernate
  • Настройки пула соединений
  • Поддержка OAuth2
  • Эндпоинты Actuator

Сервис Converter

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

Ограничения:

  • Максимальная длина контента: 32MB
  • Максимальные размеры изображения: 15000x15000 пикселей
  • Интеграция с хранилищем S3

Конфигурация внешних сервисов

Хранилище S3

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

Почтовый сервер

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

Соображения безопасности

Управление секретами

Необходимо предоставить следующие секреты:

  • Учётные данные PostgreSQL
  • Пароль Redis
  • Учётные данные доступа к S3
  • Учётные данные почтового сервера
  • Ключ Google API

Сетевая безопасность

  • Терминация TLS через ingress
  • Интеграция с cert-manager для автоматического управления сертификатами
  • Раздельные порты API и веб для сервисов

Масштабирование

Горизонтальное автомасштабирование подов

HPA настраивается для всех сервисов с настройками по умолчанию:

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

Конфигурации HPA для конкретных сервисов:

  • Editor: 2-6 реплик
  • Booking: 2-6 реплик
  • Converter: 1-4 реплики

Мониторинг и метрики

  • Эндпоинты Actuator включены для сервисов Spring Boot
  • Метрики Redis отключены по умолчанию
  • Настроены кастомные эндпоинты метрик для сервисов editor и booking

Устранение неполадок

Распространённые проблемы

  1. Ошибки получения образа

    • Проверьте учётные данные реестра
    • Убедитесь, что теги образов существуют
  2. Проблемы с подключением к базе данных

    • Проверьте, что секрет PostgreSQL существует
    • Проверьте настройки пула соединений
  3. Проблемы с хранилищем

    • Проверьте учётные данные S3 и доступность бакета
    • Проверьте квоты и ограничения хранилища

Отладка

  1. Доступ к логам через:

    kubectl logs -f deployment/seatmap-<component>
    
  2. Проверка статуса сервисов:

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

Справочник по переменным конфигурации

Глобальные переменные

Parameter Description Default Value
global.hostname Основное имя хоста для приложения seat-113.seatmap.dev
global.ports.editor.api Порт API Editor 8080
global.ports.editor.web Веб-порт Editor 80
global.ports.booking.api Порт API Booking 9090
global.ports.booking.web Веб-порт Booking 80
global.ports.converter.api Порт API Converter 8080
global.resources.default.requests.cpu Запрос CPU по умолчанию 500m
global.resources.default.requests.memory Запрос памяти по умолчанию 2Gi
global.resources.default.limits.cpu Лимит CPU по умолчанию 1000m
global.resources.default.limits.memory Лимит памяти по умолчанию 3Gi
global.resources.frontend.requests.cpu Запрос CPU фронтенда 100m
global.resources.frontend.requests.memory Запрос памяти фронтенда 128Mi
global.resources.frontend.limits.cpu Лимит CPU фронтенда 200m
global.resources.frontend.limits.memory Лимит памяти фронтенда 256Mi

Переменные PostgreSQL

Parameter Description Default Value
postgresql.enabled Включить развёртывание PostgreSQL true
postgresql.auth.existingSecret Имя секрета для аутентификации postgresql-secret
postgresql.auth.username Имя пользователя PostgreSQL seatmap
postgresql.auth.database Имя базы данных PostgreSQL seatmap
postgresql.service.port Порт сервиса PostgreSQL 5432

Переменные Redis

Parameter Description Default Value
redis.enabled Включить развёртывание Redis true
redis.architecture Тип архитектуры Redis standalone
redis.auth.enabled Включить аутентификацию Redis true
redis.auth.existingSecret Имя секрета для аутентификации redis-secret
redis.master.persistence.enabled Включить персистентность true
redis.master.persistence.size Размер персистентного хранилища 8Gi
redis.port Порт сервиса Redis 6379

Переменные сервиса Editor

Parameter Description Default Value
editor.image.repository Репозиторий образа сервиса Editor registry.gitlab.com/seatmap.pro/seatmap/editor-service
editor.image.tag Тег образа сервиса Editor 1.40.0
editor.frontend.image.repository Репозиторий образа фронтенда Editor registry.gitlab.com/seatmap.pro/seatmap/editor-client
editor.frontend.image.tag Тег образа фронтенда Editor 1.40.0
editor.config.initial.delay Начальная задержка 5000
editor.config.spring.datasource.hikari.connectionTimeout Таймаут подключения к базе данных 60000
editor.config.spring.datasource.hikari.maximumPoolSize Размер пула соединений с базой данных 20
editor.hpa.minReplicas Минимум реплик для HPA 2
editor.hpa.maxReplicas Максимум реплик для HPA 6

Переменные сервиса Booking

Parameter Description Default Value
booking.image.repository Репозиторий образа сервиса Booking registry.gitlab.com/seatmap.pro/seatmap/booking-service
booking.image.tag Тег образа сервиса Booking 1.40.0
booking.frontend.image.repository Репозиторий образа фронтенда Booking registry.gitlab.com/seatmap.pro/seatmap/booking-client
booking.frontend.image.tag Тег образа фронтенда Booking 1.40.0
booking.config.spring.profiles.include Активные профили Spring prod
booking.config.spring.jpa.generateDdl Включить генерацию DDL true
booking.config.spring.jpa.hibernate.ddlAuto Hibernate DDL auto update
booking.hpa.minReplicas Минимум реплик для HPA 2
booking.hpa.maxReplicas Максимум реплик для HPA 6

Переменные сервиса Converter

Parameter Description Default Value
converter.image.repository Репозиторий образа сервиса Converter registry.gitlab.com/seatmap.pro/converter
converter.image.tag Тег образа сервиса Converter 1.40.0-f8ac8b4c
converter.config.max.contentLength Максимальная длина контента 33554432
converter.config.max.image.width Максимальная ширина изображения 15000
converter.config.max.image.height Максимальная высота изображения 15000
converter.hpa.minReplicas Минимум реплик для HPA 1
converter.hpa.maxReplicas Максимум реплик для HPA 4

Переменные внешних сервисов

Parameter Description Default Value
secrets.s3.accessKey Ключ доступа S3 secrets.s3.accessKey
secrets.s3.secretKey Секретный ключ S3 secrets.s3.secretKey
secrets.mail.username Имя пользователя почтового сервера secrets.mail.username
secrets.mail.password Пароль почтового сервера secrets.mail.password
secrets.google.apiKey Ключ Google API secrets.google.apiKey
global.s3.bucket Имя бакета S3 seatmap-storage
global.s3.region Регион S3 us-east-1
global.s3.endpoint Эндпоинт S3 https://s3.amazonaws.com
global.mail.host Хост почтового сервера smtp.gmail.com
global.mail.port Порт почтового сервера 587
global.mail.socket.port Порт почтового сокета 465
global.mail.fromAddress Адрес отправителя почты seatmap@seatmap.pro

Поддержка и обслуживание

  • Регулярные обновления через теги версий
  • Изменения конфигурации через Helm upgrade
  • Управление персистентным хранилищем для PostgreSQL и Redis