Развёртывание Hub в Kubernetes-кластере с помощью Helm-чарта

Установка через Kubernetes / Helm

Используйте этот способ, если ваша инфраструктура построена на Kubernetes.

Требования

  • Kubernetes 1.26+
  • Helm 3.8+ (с поддержкой OCI)

Шаг 1. Создайте файл values-client.yaml

Чарт Hub распространяется как OCI-артефакт — клонировать репозиторий или запускать helm dependency update не нужно, авторизация в реестре не требуется. Всё, что вам нужно, — файл значений.

Создайте файл values-client.yaml со следующим содержимым:

yaml
# Секреты (используются, если existingSecret пустой).
# Чтобы взять готовый Kubernetes Secret, задайте existingSecret и удалите блок secret.
existingSecret: ""
secret:
  dbPassword: ""           # пароль PostgreSQL — придумайте надёжный
  adminUsername: "admin"   # логин первого администратора
  adminPassword: ""        # пароль администратора — придумайте надёжный
  cipherSalt: ""           # соль шифрования: openssl rand -hex 32

app:
  jvm:
    opts: "-Xmx512m -Xms256m -XX:+UseG1GC -Duser.timezone=UTC"
  configVars:
    HUB_NAME: "My Company Hub"             # отображаемое имя Hub
    CORE_GRPC_HOST: "grpc.bidder-box.ru"   # адрес Core — уже заполнен
    CORE_PORTAL_URL: "app.bidder-box.ru"   # URL портала — уже заполнен

# Образ Hub уже привязан к версии чарта (--version X.Y.Z) — переопределять не нужно.
# image:
#   tag: ""

# Внешний доступ по домену (опционально) — см. шаг «Настройте Ingress».
# ingress:
#   enabled: true
#   className: nginx
#   hosts:
#     - host: hub.mycompany.com
#       paths:
#         - path: /
#           pathType: Prefix

Адрес Core и URL портала уже заполнены — осталось задать секреты в блоке secret (следующий шаг).

Шаг 2. Заполните секреты

В блоке secret файла values-client.yaml заполните значения:

ПараметрЧто вписать
secret.dbPasswordПароль PostgreSQL
secret.adminPasswordПароль первого администратора Hub
secret.cipherSaltСоль шифрования (сгенерируйте: openssl rand -hex 32)
i

CORE_GRPC_HOST и CORE_PORTAL_URL уже заполнены в шаблоне — менять их не нужно.

Необязательные параметры

ПараметрПо умолчаниюОписание
app.configVars.HUB_NAMEHubОтображаемое имя Hub
app.jvm.opts-Xmx512m -Xms256m -XX:+UseG1GCПараметры JVM
resources.requests.memory512MiЗапрашиваемая память
resources.limits.memory1GЛимит памяти
postgresql.primary.persistence.size10GiРазмер диска PostgreSQL
i

Примечание: Порт Core gRPC и тип TLS-согласования жёстко задаются в образе приложения (порт 443, TLS) и не переопределяются через values.yaml.

Шаг 3. Настройте Ingress (опционально)

Helm-чарт разворачивает тот же образ bidder-hub, что и Docker (порт 8082). Образ содержит и REST API, и веб-интерфейс — отдельного фронтенд-контейнера в чарте нет, интерфейс отдаёт сам Hub. После установки через Helm веб-интерфейс доступен на том же порту 8082, что и API.

Если нужен внешний доступ к Hub (веб-интерфейс и API) по доменному имени, добавьте в values-client.yaml:

yaml
ingress:
  enabled: true
  className: nginx
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  hosts:
    - host: hub.mycompany.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: hub-tls
      hosts:
        - hub.mycompany.com

Шаг 4. Управление секретами

Вариант A (простой): чарт создаёт Secret автоматически.

yaml
existingSecret: ""

Вариант B (для production): используйте существующий K8s Secret.

yaml
existingSecret: "bidder-hub-secret"

Шаг 5. Установите чарт

Укажите версию, полученную от вендора (например, 1.0.8). Версия чарта, образа Hub и appVersion совпадают — обновляются как единая единица.

bash
helm install bidder-hub oci://cr.yandex/crph7576m5ukcpvf6o0t/helm/bidder-hub \
  --version <version> -f values-client.yaml

Шаг 6. Проверьте состояние

bash
kubectl get pods -l app.kubernetes.io/name=bidder-hub
kubectl logs -f deployment/bidder-hub

Поды должны перейти в статус Running. Чтобы открыть веб-интерфейс Hub (порт 8082), пробросьте порт на локальную машину:

bash
kubectl port-forward svc/bidder-hub 8082:8082

Затем откройте в браузере http://localhost:8082/ — если открылась страница Hub, всё работает. Проверить ответ Hub можно и командой:

bash
curl http://localhost:8082/public/api/v1/activation/status

Обновление

Версия чарта и образа Hub обновляются вместе. Узнайте новую версию у вендора и выполните:

bash
# 1. Создайте резервную копию базы данных (см. раздел ниже)

# 2. Обновите до новой версии
helm upgrade bidder-hub oci://cr.yandex/crph7576m5ukcpvf6o0t/helm/bidder-hub \
  --version <new-version> -f values-client.yaml

# 3. Проверьте состояние
kubectl rollout status deployment/bidder-hub

Резервное копирование

Перед обновлением и регулярно в режиме эксплуатации создавайте резервную копию базы данных PostgreSQL.

PostgreSQL разворачивается как Bitnami StatefulSet — обращайтесь напрямую к поду, а не к Deployment.

Найдите под PostgreSQL:

bash
kubectl get pods -n <namespace> -l app.kubernetes.io/name=postgresql

Создайте резервную копию:

bash
kubectl exec -n <namespace> bidder-hub-postgresql-0 -- \
  pg_dump -U hub hub > backup_$(date +%Y%m%d_%H%M%S).sql

Восстановление:

bash
kubectl exec -n <namespace> -i bidder-hub-postgresql-0 -- \
  psql -U hub hub < backup_YYYYMMDD_HHMMSS.sql
!

Перед обновлением Hub всегда создавайте резервную копию базы данных.

Откат к предыдущей версии

Быстрый путь — откат к предыдущей ревизии Helm:

bash
helm rollback bidder-hub

Откат к конкретной версии (полностью воспроизводимо):

bash
helm upgrade bidder-hub oci://cr.yandex/crph7576m5ukcpvf6o0t/helm/bidder-hub \
  --version <previous-version> -f values-client.yaml

Если схема базы данных изменилась — восстановите её из резервной копии перед откатом чарта.

Следующий шаг

Веб-интерфейс Hub доступен сразу после установки на порту 8082 (его отдаёт сам образ bidder-hub) — открыть его можно через Ingress или kubectl port-forward.

Теперь активируйте Hub и подключитесь к Core.