23 KiB
Changelog
All notable changes to the HRBox Helm chart will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
3.0.0 - 2026-09-02
Чарт подтянут к тому, как HRBox работает в облаке: добавлен плеер учебных материалов, пароли и ключи уехали в Secret, повторяющиеся куски шаблонов заменены одним хелпером, а неполная конфигурация теперь останавливает установку с понятным сообщением.
Added
Nanabush Player
Плеер учебных материалов: SCORM 1.2 и 2004, cmi5, xAPI, нативные курсы, тесты и эссе.
09-nanabush-player.yaml— Deployment и Service, образnanabush-player:1.0.1100-nanabush-player-secret.yaml— ключи launch-тикета и сессии- маршрут
/nanabush-playerна общем Ingress - настройки
app.nanabushPlayer, ресурсыresources.nanabushPlayer - переменные
NANABUSH_PLAYER_*в HRBox иPLAYER_*в самом плеере
В on-premise выделенного поддомена нет, поэтому плеер стоит на основном домене по пути. Отсюда два ограничения, они описаны в README: cookie HRBox доступны содержимому курсов, и нужны синхронизированные часы — тикет живёт 5 минут.
Для быстрого отката оставлены три переключателя: enabled,
ingress.enabled, deployment.enabled. Маршрут без пода или включённый
плеер без маршрута чарт не пропустит.
Проверка конфигурации
00-validate.yaml— объектов не создаёт, но останавливает установку, если не заполнены обязательные значения, остались ключи из версии 2.x или нарушены требования плеера. Сообщения на русском, с указанием, что править.
Secret приложения
00-app-secret.yaml— один Secret со всеми паролями и ключами. Поды читают его черезsecretKeyRef, поэтомуkubectl get deploy -o yamlбольше не показывает пароль базы и ключ шифрования.secrets.existingSecret— можно подставить Secret, созданный вне чарта.
Новые компоненты
09-file-processor-video.yaml— отдельные поды для конвертации видео, со своими ресурсами,nodeSelectorиtolerations(app.videoConverter.enabled, по умолчанию выключено)02-web-pdb.yaml— PodDisruptionBudget дляweb, создаётся от двух реплик01-otel-configmap.yamlи коллектор OpenTelemetry рядом сweb(app.tracing.enabled)01-nginx-assetlinks.yaml— привязка мобильных приложений к домену (app.mobileApps)templates/NOTES.txt— что делать после установки, с готовыми командами
Новые переменные окружения
NATS_STREAM_REPLICAS— число реплик стримов JetStream по размеру кластераTELEGRAM_API_URL,AUTH_GOOGLE_ENABLEDLIVEKIT_URL,LIVEKIT_API_KEY,LIVEKIT_API_SECRET— видеозвонкиAPP_INTERNAL_URL— внутренний адрес HRBox для конвертераVIDEO_CONVERTER_ENABLED— отдельно для каждого пулаSENDER_ENV,IMAGE_RESIZE_MAX_PARALLEL,OTEL_*
Changed
values.yaml
- все образы собраны в блок
image: сменить версию сервиса — это правка одной строки imagePullSecretsвынесен в настройки,regsecretбольше не зашит в шаблоны- ключи приведены к camelCase:
file_processor→fileProcessor,custom_policy→customPolicy - в
resourcesдобавленыfileProcessor,fileProcessorVideo,nanabushPlayer,dragonfly,nats - адреса внутренних сервисов (
app.geonames.url,app.goworker.url,app.kedoca.url,app.redis.host,app.nats.url) по умолчанию пустые и собираются из имён, которые создаёт сам чарт. Раньше это были строкиhrbox-*, зашитые в шаблоны: приnameOverrideони молча переставали работать. Заданное значение по-прежнему используется как есть, поэтому старые values работают без правок. Выключитьdragonflyилиnats, не указав внешний адрес, теперь нельзя.
Шаблоны
_resources.tpl: девять почти одинаковых define заменены однимhrbox.resources, незаполненные поля не рендерятся_helpers.tpl: удалено около сотни строк неиспользуемого кода (хелперыnats.*, которые ссылались на несуществующийnats.k8sClusterDomain); добавленыhrbox.component,hrbox.labels,hrbox.selectorLabels,hrbox.secretEnvи хелперы плеера- у всех объектов появились стандартные лейблы
app.kubernetes.io/*; лейблappостался, привычныйkubectl get pods -l app=workerработает - селекторы Deployment не менялись, обновление 2.x → 3.0 не пересоздаёт объекты
- аннотации
checksum/*перезапускают поды при изменении конфигурации nginx или Secret приложения - образы, порты и таймауты вынесены из шаблонов в values.yaml
nginx
Набор location синхронизирован с облачным:
/healthzи/health-check— на них настроены пробы подаweb(раньше проверялся только TCP-порт)/api/v1/integration/commit— потоковая загрузка оргструктуры из 1С без буферизации, лимит 500 МБ/ai/— увеличенные таймауты/.well-known/assetlinks.jsonи/.well-known/apple-app-site-association/frontend/sw.js— правильные заголовки service worker- кеширование шрифтов
- убраны TLSv1 и TLSv1.1
Версии образов
| Компонент | Было | Стало |
|---|---|---|
| chatbox | 3.0 | 5.18 |
| goworker | 2.7 | 3.21.2 |
| kedoca | 0.8 | 1.0.6 |
| geonames | 3.1 | 3.3 |
| file-processor | 1.0 | 1.4.6 |
| nanabush-player | — | 1.0.11 |
Джобы
- в имени появился номер ревизии релиза: в
kubectl get jobsвидно, какой выкат запускал миграции, а повторныйupgradeне спотыкается о старый объект ttlSecondsAfterFinished— час у обеих джоб (было 100 секунд у миграций и ничего у обновления кластера), логи упавшей джобы успевают дожить до того, как их посмотрят
Переименования файлов
03-websocket.yaml→03-chatbox.yaml(внутри был chatbox с версии 2.0)09-geonames.yml→09-geonames.yaml99-update-cluser-job.yaml→99-update-cluster-job.yaml
Fixed
- Общий секрет у всех установок. У
SERVICES_INTERNAL_SECRETбыло значение по умолчанию, зашитое в чарт: все, кто его не заполнил, работали на одном и том же секрете межсервисной аутентификации. Теперь значение обязательное. cluster.domainне использовался. Маршруты кластера NATS были зашиты наcluster.local, хотя параметр в values был и применялся в соседней переменной. На кластере с другим доменом ноды не находили друг друга.CLUSTER_ADVERTISEбез сегментаsvc. Имя не резолвилось, ноды NATS сообщали соседям недостижимый адрес.- Разные значения реплик NATS.
nats.replicasиnats.cluster.replicasзадавались независимо, при расхождении часть нод не входила в кластер. Теперь чарт требует, чтобы они совпадали. - Пробы
webне проверяли приложение. Проверялся TCP-порт 9000, поэтому под с неработающим PHP считался готовым. Теперь readiness ходит в/health-checkчерез FPM. - Пароли и ключи больше не видны в спеках Deployment.
- У части сервисов
imagePullPolicyбылAlwaysна фиксированных тегах — лишние обращения к реестру при каждом рестарте пода.
Removed
- у
secretsбольше нет значений по умолчанию: с пустыми ключами установка останавливается, а не запускается на предсказуемых секретах - удалены неиспользуемые хелперы
nats.name,nats.fullname,nats.chart,nats.labels,nats.selectorLabels,nats.clusterAdvertise,nats.clusterRoutes,nats.extraRoutes,nats.tlsConfig,tplvalues.render SENDGRID_API_KEY— в on-premise не используется
Migration Guide
Переход с 2.x на 3.0
Все переехавшие ключи чарт узнаёт и пишет, куда именно они переехали,
поэтому проще всего запустить helm template и править по сообщениям.
Шаг 1. Перенесите образы в блок image
# было
app:
image: "cr.yandex/.../hrbox:latest"
chatbox:
image: "cr.yandex/.../hrbox-chatbox:3.0"
goworker:
image: "cr.yandex/.../hrbox-goworker:2.7"
kedoca:
image: "cr.yandex/.../hrbox-kedoca:0.8"
file_processor:
image: "cr.yandex/.../hrbox-file-processor:1.0"
replicas: 1
# стало
image:
hrbox: "cr.yandex/.../hrbox:latest"
chatbox: "cr.yandex/.../hrbox-chatbox:5.18"
goworker: "cr.yandex/.../hrbox-goworker:3.21.2"
kedoca: "cr.yandex/.../hrbox-kedoca:1.0.6"
fileProcessor: "cr.yandex/.../hrbox-file-processor:1.4.6"
app:
replicas:
fileProcessor: 1
Шаг 2. Переименуйте ключи
| Было | Стало |
|---|---|
app.file_processor |
app.fileProcessor |
app.custom_policy |
app.customPolicy |
app.custom_policy.privacy_url |
app.customPolicy.privacyUrl |
app.custom_policy.terms_url |
app.customPolicy.termsUrl |
app.goworker.replicas |
app.replicas.goworker |
app.kedoca.replicas |
app.replicas.kedoca |
app.goworker.sentryDsn |
app.sentry.goworkerDsn |
app.chatbox.sentryDsn |
app.sentry.chatboxDsn |
nats.image |
image.nats |
Шаг 3. Сгенерируйте ключи плеера
openssl rand -base64 48 # app.nanabushPlayer.keys.ticketHs256
openssl rand -base64 48 # app.nanabushPlayer.keys.sessionHs256
Ключи должны быть разными.
Шаг 4. Проверьте secrets.servicesInternalSecret
Если поле было пустым, установка работала на общем значении по умолчанию.
Сгенерируйте своё: openssl rand -base64 48. После обновления перезапустятся
все сервисы, которые ходят друг к другу, — это нормально.
Шаг 5. Проверьте рендер и обновитесь
helm template hrbox .helm -f values.yaml > /dev/null
helm upgrade hrbox .helm -n hrbox -f values.yaml
Шаг 6. Включите плеер
Порядок включения и проверки — в README, раздел «Nanabush Player».
Breaking Changes
- Ключи
values.yamlпереехали. Установка останавливается с подсказкой, молча ничего не игнорируется. secrets.*стали обязательными. Без них установка не пройдёт.- Появился Nanabush Player. Это дополнительный под, Service, Secret и маршрут, учтите ресурсы кластера. Плееру нужно синхронизированное время на нодах.
- Пробы
webстали строже. Под, где PHP-FPM не отвечает по HTTP, теперь не проходит readiness. Если приложение отдаёт/health-checkиначе, проверьте это до обновления. - В
app.replicasдобавилисьgoworker,kedoca,fileProcessor,fileProcessorVideo; поляreplicasвнутри самих сервисов удалены.
2.0.0 - 2026-01-30
Масштабная актуализация чарта на основе продового окружения hrbox. Синхронизированы версии компонентов, добавлены новые микросервисы, обновлены переменные окружения.
Added
Новые микросервисы
-
Goworker (
09-goworker.yaml) - Сервис интеграций с мессенджерами- Образ:
hrbox-goworker:2.7 - Prometheus metrics на порту 8686
- Настройки:
app.goworkerв values.yaml - Переменные:
GOWORKER_URL,GOWORKER_PUSH_MIN_INTERVAL,GOWORKER_SENTRY_DSN
- Образ:
-
Kedoca (
09-kedoca.yaml) - Сервис электронной подписи- Образ:
hrbox-kedoca:0.8 - Поддержка ГОСТ и OpenSSL
- Монтирование Kubernetes Secret с CA сертификатами
- Настройки:
app.kedocaв values.yaml - Переменные:
KEDOCA_URL,TSP_URL,ROOT_CA_PASS,KEDO_ENGINE,KEDO_ALGORITHM,KEDO_PKEYOPT
- Образ:
-
File Processor (
09-file-processor.yaml) - Обработка файлов (конвертация, ресайз изображений)- Образ:
hrbox-file-processor:1.0 - Настройки:
app.file_processorв values.yaml VIDEO_CONVERTER_ENABLEDзахардкожен вfalse(видео-конвертация отключена)
- Образ:
Новые переменные окружения
SERVICES_INTERNAL_SECRET- Секрет для межсервисной коммуникацииAI_DOCS_INDEX_ENABLED- Включение индексации документов через AIAI_SEMANTIC_INDEX_ENABLED- Семантическое индексированиеAI_SEMANTIC_INDEX_USE_BATCH- Пакетная обработка при индексацииCHATBOX_SENTRY_DSN- Sentry DSN для ChatboxCHATBOX_WRAPPING_KEY- часть ключа для шифрования чатовSINGLE_TENANT- Режим single-tenant для on-premise установокTSP_URL- URL службы временных меток (http://qs.cryptopro.ru/tsp/tsp.srf)
Новые секреты
secrets.servicesInternalSecret- Секрет для защиты внутренних API между микросервисами- Генерация:
openssl rand -base64 48
- Генерация:
Resource definitions
Добавлены resource limits/requests для новых сервисов:
resources.goworker- CPU: 0.1-0.3, Memory: 196Mi-256Miresources.kedoca- CPU: 0.1-0.5, Memory: 196Mi-256Miresources.chatbox- CPU: 0.3, Memory: 96Mi-192Mi
Changed
Обновление версий
- Chart version:
1.2.0→2.0.0 - App version:
2.0.0→3.0.0
Chatbox (ранее WebSocket)
- Образ обновлен:
hrbox-websocket:2.1→hrbox-chatbox:3.0 - Переименован deployment:
{chart}-websocket→{chart}-chatbox - Переименован service:
{chart}-websocket→{chart}-chatbox - Переименована конфигурация:
app.replicas.websocket→app.replicas.chatbox- Файл остался
03-websocket.yamlно содержимое обновлено на chatbox
Архитектура
- Все микросервисы теперь обязательны (не опциональны)
- Удалены условия
{{- if .Values.app.goworker }}из templates - Удалены
| defaultзначения для обязательных параметров - Goworker, Kedoca, File Processor, Chatbox всегда деплоятся
- Удалены условия
Templates
-
_envs.tpl:- Упрощена логика переменных окружения
- Удалены условия для обязательных сервисов
- Добавлен блок
envs_kedocaдля настроек криптографии
-
_resources.tpl:- Добавлены определения:
goworker_resources,kedoca_resources,chatbox_resources
- Добавлены определения:
-
_helpers.tpl:- Без изменений, сохранена совместимость
Removed
Устаревшие компоненты
- WebSocket сервис - Полностью заменен на Chatbox 3.0
- Удалено:
app.replicas.websocketиз values.yaml - Удалено:
resources.websocketиз values.yaml
- Удалено:
Устаревшие интеграции
- OpenAI - Интеграция удалена, используйте HRBox Hub
- Удален блок:
app.ai.openaiс полямиapiKey,proxyKey,baseUri - Удалены переменные:
OPENAI_API_KEY,OPENAI_PROXY_KEY,OPENAI_BASE_URI
- Удален блок:
Migration Guide
Миграция с версии 1.x на 2.0
Шаг 1: Обновите values.yaml
# 1. Переименуйте websocket в chatbox
app:
replicas:
# websocket: 2 # УДАЛИТЬ
chatbox: 2 # ДОБАВИТЬ
# 2. Добавьте новые сервисы
app:
goworker:
url: "http://hrbox-goworker:8686"
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-goworker:2.7"
replicas: 2
pushMinInterval: "5m"
sentryDsn: ""
kedoca:
url: "http://hrbox-kedoca:8558"
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-kedoca:0.8"
replicas: 1
rootCaPass: "hrbox"
engine: "gost"
algorithm: "gost2012_256"
pkeyopt: "paramset:A"
secretName: ""
file_processor:
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-file-processor:1.0"
replicas: 1
chatbox:
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-chatbox:3.0"
sentryDsn: ""
# 3. Добавьте новый секрет
secrets:
servicesInternalSecret: "" # Сгенерируйте: openssl rand -base64 48
# 4. Удалите OpenAI (если был настроен)
app:
ai:
# openai: # УДАЛИТЬ весь блок
# apiKey: ""
# proxyKey: ""
# baseUri: ""
Шаг 2: Сгенерируйте новый секрет
# Генерация servicesInternalSecret
openssl rand -base64 48
Шаг 3: Обновите Chart
helm upgrade hrbox .helm/ \
--namespace hrbox \
--values your-values.yaml
Шаг 4: Проверьте новые поды
# Проверка новых сервисов
kubectl get pods -n hrbox -l app=goworker
kubectl get pods -n hrbox -l app=kedoca
kubectl get pods -n hrbox -l app=file-processor
kubectl get pods -n hrbox -l app=chatbox
# Убедитесь что старый websocket удален
kubectl get pods -n hrbox -l app=websocket # Должно быть пусто
Breaking Changes
⚠️ Критические изменения, требующие действий:
-
WebSocket → Chatbox: Обязательное переименование конфигурации
- Service name изменился с
{chart}-websocketна{chart}-chatbox - Если есть зависимости от старого имени сервиса - обновите их
- Service name изменился с
-
Новые обязательные сервисы: Goworker, Kedoca, File Processor, Chatbox всегда деплоятся
- Требуются дополнительные ресурсы кластера
- Проверьте доступность ресурсов перед обновлением
-
Новый секрет:
secrets.servicesInternalSecretобязателен- Приложение не запустится без этого секрета
- Сгенерируйте перед деплоем
-
OpenAI удален: Используйте HRBox Hub для AI интеграций
- Миграция на Hub API требуется если использовали OpenAI
Notes
- Все образы сервисов используют registry:
cr.yandex/crphnph9c2s776j32sjd/ - Для работы Kedoca с сертификатами создайте Kubernetes Secret и укажите в
kedoca.secretName - Goworker экспортирует метрики Prometheus на
/metrics(порт 8686) - File Processor деплоится с
VIDEO_CONVERTER_ENABLED=false(видео-конвертация отключена)
1.2.0 - Previous version
Упрощенный Helm chart для on-premise установок HRBox.
Initial Features
- Базовые компоненты: web, worker, websocket, geonames, conductor
- PostgreSQL, Redis, NATS JetStream
- Ingress с TLS
- ConfigMaps и resource limits
- Migration и update jobs