new hrbox chart version

This commit is contained in:
Vlad Bubnov
2026-01-30 12:13:23 +03:00
parent bc74cc395c
commit ed3c059511
9 changed files with 592 additions and 47 deletions
+2 -2
View File
@@ -4,10 +4,10 @@ description: Simplified HRBox application Helm chart
type: application
# Версия самого чарта. Увеличивается при каждом изменении чарта
version: 1.2.0
version: 2.0.0
# Версия приложения, которое деплоится. Не обязательно увеличивать при изменении чарта
appVersion: "2.0.0"
appVersion: "3.0.0"
# Ключевые слова для поиска
keywords:
+12 -11
View File
@@ -1,10 +1,11 @@
---
# Chatbox (WebSocket server) - обеспечивает real-time функционал
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-websocket
name: {{ .Chart.Name }}-chatbox
labels:
app: websocket
app: chatbox
spec:
minReadySeconds: 5
strategy:
@@ -12,14 +13,14 @@ spec:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.replicas.websocket }}
replicas: {{ .Values.app.replicas.chatbox }}
selector:
matchLabels:
service: {{ .Chart.Name }}-websocket
service: {{ .Chart.Name }}-chatbox
template:
metadata:
labels:
service: {{ .Chart.Name }}-websocket
service: {{ .Chart.Name }}-chatbox
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9797'
@@ -28,21 +29,21 @@ spec:
imagePullSecrets:
- name: regsecret
containers:
- name: websocket
{{- include "websocket_resources" . | indent 10}}
image: cr.yandex/crphnph9c2s776j32sjd/hrbox-websocket:2.1
- name: chatbox
image: {{ .Values.app.chatbox.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "envs_all" . | indent 12 }}
{{- include "chatbox_resources" . | indent 10 }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-websocket
name: {{ .Chart.Name }}-chatbox
spec:
selector:
service: {{ .Chart.Name }}-websocket
service: {{ .Chart.Name }}-chatbox
ports:
- name: http
port: 80
@@ -0,0 +1,32 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-document-converter
labels:
app: document-converter
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.document_converter.replicas }}
selector:
matchLabels:
service: {{ .Chart.Name }}-document-converter
template:
metadata:
labels:
service: {{ .Chart.Name }}-document-converter
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: document-converter
image: {{ .Values.app.document_converter.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "document_converter_resources" . | indent 10 }}
+52
View File
@@ -0,0 +1,52 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-goworker
labels:
app: goworker
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.goworker.replicas }}
selector:
matchLabels:
service: {{ .Chart.Name }}-goworker
template:
metadata:
labels:
service: {{ .Chart.Name }}-goworker
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: goworker
stdin: true
tty: true
image: {{ .Values.app.goworker.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "goworker_resources" . | indent 10 }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-goworker
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8686"
prometheus.io/path: "/metrics"
spec:
selector:
service: {{ .Chart.Name }}-goworker
ports:
- name: http
port: 8686
targetPort: 8686
protocol: TCP
+63
View File
@@ -0,0 +1,63 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-kedoca
labels:
app: kedoca
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.kedoca.replicas }}
selector:
matchLabels:
service: {{ .Chart.Name }}-kedoca
template:
metadata:
labels:
service: {{ .Chart.Name }}-kedoca
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: kedoca
image: {{ .Values.app.kedoca.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "envs_kedoca" . | indent 12 }}
ports:
- containerPort: 8558
{{- include "kedoca_resources" . | indent 10 }}
{{- if .Values.app.kedoca.secretName }}
volumeMounts:
- name: ca-cert
mountPath: /ca-cert
{{- end }}
{{- if .Values.app.kedoca.secretName }}
volumes:
- name: ca-cert
secret:
secretName: {{ .Values.app.kedoca.secretName }}
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-kedoca
labels:
app: kedoca
spec:
selector:
service: {{ .Chart.Name }}-kedoca
ports:
- name: http
port: 8558
targetPort: 8558
protocol: TCP
type: ClusterIP
+49 -7
View File
@@ -190,12 +190,54 @@
- name: YANDEX_CLOUD_AI_API_KEY
value: {{ .Values.app.ai.yandex.apiKey | quote }}
{{- end }}
{{- if .Values.app.ai.openai.apiKey }}
- name: OPENAI_API_KEY
value: {{ .Values.app.ai.openai.apiKey | quote }}
- name: OPENAI_PROXY_KEY
value: {{ .Values.app.ai.openai.proxyKey | quote }}
- name: OPENAI_BASE_URI
value: {{ .Values.app.ai.openai.baseUri | quote }}
# Integration Services
- name: GOWORKER_URL
value: {{ .Values.app.goworker.url | quote }}
{{- if .Values.app.goworker.sentryDsn }}
- name: GOWORKER_SENTRY_DSN
value: {{ .Values.app.goworker.sentryDsn | quote }}
{{- end }}
- name: GOWORKER_PUSH_MIN_INTERVAL
value: {{ .Values.app.goworker.pushMinInterval | quote }}
- name: KEDOCA_URL
value: {{ .Values.app.kedoca.url | quote }}
- name: TSP_URL
value: "http://qs.cryptopro.ru/tsp/tsp.srf"
# Internal Services
- name: SERVICES_INTERNAL_SECRET
value: {{ .Values.secrets.servicesInternalSecret | default "QrrH84K2dG5JfoYxi4ZNPyg5p2LEj6rN69z5tIQYkfY6SJZ8GDXOcRjTNnefbOx5" | quote }}
# Document Converter
- name: PYTHONUNBUFFERED
value: "1"
- name: DOCCONV_MAX_PARALLEL_TASKS
value: "1"
# AI Features
- name: AI_DOCS_INDEX_ENABLED
value: "true"
- name: AI_SEMANTIC_INDEX_ENABLED
value: "true"
- name: AI_SEMANTIC_INDEX_USE_BATCH
value: "true"
# Chatbox
{{- if .Values.app.chatbox.sentryDsn }}
- name: CHATBOX_SENTRY_DSN
value: {{ .Values.app.chatbox.sentryDsn | quote }}
{{- end }}
{{- end }}
{{- define "envs_kedoca" }}
- name: ROOT_CA_PASS
value: {{ .Values.app.kedoca.rootCaPass | quote }}
- name: KEDO_ENGINE
value: {{ .Values.app.kedoca.engine | quote }}
- name: KEDO_ALGORITHM
value: {{ .Values.app.kedoca.algorithm | quote }}
- name: KEDO_PKEYOPT
value: {{ .Values.app.kedoca.pkeyopt | quote }}
{{- end }}
+48
View File
@@ -80,4 +80,52 @@ resources:
memory: {{ .Values.resources.jobs.limits.memory | quote }}
cpu: {{ .Values.resources.jobs.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.jobs.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "goworker_resources" }}
resources:
requests:
memory: {{ .Values.resources.goworker.requests.memory | quote }}
cpu: {{ .Values.resources.goworker.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.goworker.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.goworker.limits.memory | quote }}
cpu: {{ .Values.resources.goworker.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.goworker.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "kedoca_resources" }}
resources:
requests:
memory: {{ .Values.resources.kedoca.requests.memory | quote }}
cpu: {{ .Values.resources.kedoca.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.kedoca.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.kedoca.limits.memory | quote }}
cpu: {{ .Values.resources.kedoca.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.kedoca.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "document_converter_resources" }}
resources:
requests:
memory: {{ .Values.resources.document_converter.requests.memory | quote }}
cpu: {{ .Values.resources.document_converter.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.document_converter.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.document_converter.limits.memory | quote }}
cpu: {{ .Values.resources.document_converter.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.document_converter.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "chatbox_resources" }}
resources:
requests:
memory: {{ .Values.resources.chatbox.requests.memory | quote }}
cpu: {{ .Values.resources.chatbox.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.chatbox.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.chatbox.limits.memory | quote }}
cpu: {{ .Values.resources.chatbox.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.chatbox.limits.ephemeralStorage | quote }}
{{- end }}
+101 -27
View File
@@ -32,12 +32,12 @@ app:
# Рекомендации по масштабированию:
# - web: 2-10 реплик в зависимости от количества пользователей
# - worker: 2-5 реплик для обработки фоновых задач
# - websocket: 2-6 реплик для real-time функционала
# - chatbox: 2-6 реплик для real-time функционала (WebSocket)
# - geonames: 1-2 реплики (сервис не требователен к ресурсам)
replicas:
web: 2
worker: 2
websocket: 2
chatbox: 2
geonames: 1
# PostgreSQL база данных
@@ -136,10 +136,9 @@ app:
# Проверять SSL сертификат сервера
sslVerifyPeer: "false"
# Sentry для мониторинга ошибок (опционально)
# Sentry для мониторинга ошибок
sentry:
# DSN для отправки ошибок
# Оставьте пустым, чтобы отключить
dsn: ""
# Окружение для группировки ошибок
@@ -150,6 +149,53 @@ app:
# URL внутреннего сервиса geonames
# Не меняйте, если используете стандартный деплой
url: "http://hrbox-geonames:8181"
# Goworker - интеграции с мессенджерами (Telegram, WhatsApp и др.)
goworker:
# URL внутреннего сервиса goworker
url: "http://hrbox-goworker:8686"
# Docker образ goworker
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-goworker:2.7"
# Количество реплик
replicas: 2
# Минимальный интервал между push-уведомлениями
pushMinInterval: "5m"
# Sentry DSN для мониторинга ошибок
sentryDsn: ""
# Kedoca - сервис электронной подписи (ГОСТ, OpenSSL)
kedoca:
# URL внутреннего сервиса kedoca
url: "http://hrbox-kedoca:8558"
# Docker образ kedoca
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-kedoca:0.8"
# Количество реплик
replicas: 1
# Пароль для корневого сертификата
rootCaPass: "hrbox"
# Криптографический движок: "gost" или "openssl"
engine: "gost"
# Алгоритм: "gost2012_256" для GОСТ или "rsa" для OpenSSL
algorithm: "gost2012_256"
# Параметры ключа: "paramset:A" для ГОСТ или "rsa_keygen_bits:2048" для RSA
pkeyopt: "paramset:A"
# Имя Kubernetes Secret с сертификатами
# Если указано, будет смонтирован в /ca-cert
secretName: ""
# Document Converter - конвертер документов (PDF, DOCX и др.)
document_converter:
# Docker образ document converter
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-document-converter:latest"
# Количество реплик
replicas: 1
# Chatbox - WebSocket сервер для real-time функционала
chatbox:
# Docker образ chatbox
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-chatbox:3.0"
# Sentry DSN для мониторинга ошибок
sentryDsn: ""
# Настройки воркеров Launchpad
# Формат: "название-топика:количество-воркеров"
@@ -187,15 +233,6 @@ app:
folderId: ""
# API ключ для Yandex Cloud
apiKey: ""
# OpenAI интеграция
openai:
# API ключ OpenAI
apiKey: ""
# Прокси ключ (если используете прокси)
proxyKey: ""
# Base URL для API (можно указать прокси)
baseUri: ""
# Настройки безопасности
security:
@@ -210,13 +247,18 @@ secrets:
# Используется для защиты от XSS атак
# Генерация: openssl rand -hex 16
cookieValidationKey: ""
# Ключ шифрования данных (64 символа)
# ВАЖНО: Не теряйте этот ключ! Без него невозможно расшифровать данные
# Используется для шифрования паролей интеграций (S3, ADFS и др.)
# Генерация: openssl rand -base64 48
encryptionKey: ""
# Секрет для внутренней коммуникации микросервисов (64 символа)
# Используется для защиты внутренних API вызовов между сервисами
# Генерация: openssl rand -base64 48
servicesInternalSecret: ""
# Настройки Ingress
ingress:
# Включить Ingress
@@ -280,19 +322,7 @@ resources:
cpu: "2"
memory: "2Gi"
ephemeralStorage: "2Gi"
# WebSocket сервер
# Обеспечивает real-time функционал, например, уведомления
websocket:
requests:
cpu: "0.1"
memory: "128Mi"
ephemeralStorage: "64Mi"
limits:
cpu: "1"
memory: "512Mi"
ephemeralStorage: "64Mi"
# Geonames - сервис геолокации
# Определяет города, страны, часовые пояса
geonames:
@@ -329,6 +359,50 @@ resources:
memory: "2Gi"
ephemeralStorage: "256Mi"
# Goworker - интеграции с мессенджерами
goworker:
requests:
cpu: "0.1"
memory: "196Mi"
ephemeralStorage: "64Mi"
limits:
cpu: "0.3"
memory: "256Mi"
ephemeralStorage: "64Mi"
# Kedoca - электронная подпись
kedoca:
requests:
cpu: "0.1"
memory: "196Mi"
ephemeralStorage: "64Mi"
limits:
cpu: "0.5"
memory: "256Mi"
ephemeralStorage: "64Mi"
# Document Converter - конвертер документов
document_converter:
requests:
cpu: "1"
memory: "512Mi"
ephemeralStorage: "512Mi"
limits:
cpu: "1"
memory: "1024Mi"
ephemeralStorage: "1024Mi"
# Chatbox - WebSocket сервер
chatbox:
requests:
cpu: "0.3"
memory: "96Mi"
ephemeralStorage: "128Mi"
limits:
cpu: "0.3"
memory: "192Mi"
ephemeralStorage: "256Mi"
# Настройки NATS JetStream
nats:
# Включить NATS (обязательно для работы HRBox)