Документация по 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
Устранение неполадок
Распространённые проблемы
-
Ошибки получения образа
- Проверьте учётные данные реестра
- Убедитесь, что теги образов существуют
-
Проблемы с подключением к базе данных
- Проверьте, что секрет PostgreSQL существует
- Проверьте настройки пула соединений
-
Проблемы с хранилищем
- Проверьте учётные данные S3 и доступность бакета
- Проверьте квоты и ограничения хранилища
Отладка
-
Доступ к логам через:
kubectl logs -f deployment/seatmap-<component> -
Проверка статуса сервисов:
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