new hrbox chart version
This commit is contained in:
+2
-2
@@ -4,10 +4,10 @@ description: Simplified HRBox application Helm chart
|
|||||||
type: application
|
type: application
|
||||||
|
|
||||||
# Версия самого чарта. Увеличивается при каждом изменении чарта
|
# Версия самого чарта. Увеличивается при каждом изменении чарта
|
||||||
version: 1.2.0
|
version: 2.0.0
|
||||||
|
|
||||||
# Версия приложения, которое деплоится. Не обязательно увеличивать при изменении чарта
|
# Версия приложения, которое деплоится. Не обязательно увеличивать при изменении чарта
|
||||||
appVersion: "2.0.0"
|
appVersion: "3.0.0"
|
||||||
|
|
||||||
# Ключевые слова для поиска
|
# Ключевые слова для поиска
|
||||||
keywords:
|
keywords:
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
|
# Chatbox (WebSocket server) - обеспечивает real-time функционал
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: {{ .Chart.Name }}-websocket
|
name: {{ .Chart.Name }}-chatbox
|
||||||
labels:
|
labels:
|
||||||
app: websocket
|
app: chatbox
|
||||||
spec:
|
spec:
|
||||||
minReadySeconds: 5
|
minReadySeconds: 5
|
||||||
strategy:
|
strategy:
|
||||||
@@ -12,14 +13,14 @@ spec:
|
|||||||
rollingUpdate:
|
rollingUpdate:
|
||||||
maxSurge: 1
|
maxSurge: 1
|
||||||
maxUnavailable: 1
|
maxUnavailable: 1
|
||||||
replicas: {{ .Values.app.replicas.websocket }}
|
replicas: {{ .Values.app.replicas.chatbox }}
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
service: {{ .Chart.Name }}-websocket
|
service: {{ .Chart.Name }}-chatbox
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
service: {{ .Chart.Name }}-websocket
|
service: {{ .Chart.Name }}-chatbox
|
||||||
annotations:
|
annotations:
|
||||||
prometheus.io/scrape: 'true'
|
prometheus.io/scrape: 'true'
|
||||||
prometheus.io/port: '9797'
|
prometheus.io/port: '9797'
|
||||||
@@ -28,21 +29,21 @@ spec:
|
|||||||
imagePullSecrets:
|
imagePullSecrets:
|
||||||
- name: regsecret
|
- name: regsecret
|
||||||
containers:
|
containers:
|
||||||
- name: websocket
|
- name: chatbox
|
||||||
{{- include "websocket_resources" . | indent 10}}
|
image: {{ .Values.app.chatbox.image }}
|
||||||
image: cr.yandex/crphnph9c2s776j32sjd/hrbox-websocket:2.1
|
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
env:
|
env:
|
||||||
{{- include "envs_all" . | indent 12 }}
|
{{- include "envs_all" . | indent 12 }}
|
||||||
|
{{- include "chatbox_resources" . | indent 10 }}
|
||||||
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: {{ .Chart.Name }}-websocket
|
name: {{ .Chart.Name }}-chatbox
|
||||||
spec:
|
spec:
|
||||||
selector:
|
selector:
|
||||||
service: {{ .Chart.Name }}-websocket
|
service: {{ .Chart.Name }}-chatbox
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
port: 80
|
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 }}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -190,12 +190,54 @@
|
|||||||
- name: YANDEX_CLOUD_AI_API_KEY
|
- name: YANDEX_CLOUD_AI_API_KEY
|
||||||
value: {{ .Values.app.ai.yandex.apiKey | quote }}
|
value: {{ .Values.app.ai.yandex.apiKey | quote }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.app.ai.openai.apiKey }}
|
|
||||||
- name: OPENAI_API_KEY
|
# Integration Services
|
||||||
value: {{ .Values.app.ai.openai.apiKey | quote }}
|
- name: GOWORKER_URL
|
||||||
- name: OPENAI_PROXY_KEY
|
value: {{ .Values.app.goworker.url | quote }}
|
||||||
value: {{ .Values.app.ai.openai.proxyKey | quote }}
|
{{- if .Values.app.goworker.sentryDsn }}
|
||||||
- name: OPENAI_BASE_URI
|
- name: GOWORKER_SENTRY_DSN
|
||||||
value: {{ .Values.app.ai.openai.baseUri | quote }}
|
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 }}
|
||||||
{{- 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 }}
|
||||||
@@ -81,3 +81,51 @@ resources:
|
|||||||
cpu: {{ .Values.resources.jobs.limits.cpu | quote }}
|
cpu: {{ .Values.resources.jobs.limits.cpu | quote }}
|
||||||
ephemeral-storage: {{ .Values.resources.jobs.limits.ephemeralStorage | quote }}
|
ephemeral-storage: {{ .Values.resources.jobs.limits.ephemeralStorage | quote }}
|
||||||
{{- end }}
|
{{- 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 }}
|
||||||
+99
-25
@@ -32,12 +32,12 @@ app:
|
|||||||
# Рекомендации по масштабированию:
|
# Рекомендации по масштабированию:
|
||||||
# - web: 2-10 реплик в зависимости от количества пользователей
|
# - web: 2-10 реплик в зависимости от количества пользователей
|
||||||
# - worker: 2-5 реплик для обработки фоновых задач
|
# - worker: 2-5 реплик для обработки фоновых задач
|
||||||
# - websocket: 2-6 реплик для real-time функционала
|
# - chatbox: 2-6 реплик для real-time функционала (WebSocket)
|
||||||
# - geonames: 1-2 реплики (сервис не требователен к ресурсам)
|
# - geonames: 1-2 реплики (сервис не требователен к ресурсам)
|
||||||
replicas:
|
replicas:
|
||||||
web: 2
|
web: 2
|
||||||
worker: 2
|
worker: 2
|
||||||
websocket: 2
|
chatbox: 2
|
||||||
geonames: 1
|
geonames: 1
|
||||||
|
|
||||||
# PostgreSQL база данных
|
# PostgreSQL база данных
|
||||||
@@ -136,10 +136,9 @@ app:
|
|||||||
# Проверять SSL сертификат сервера
|
# Проверять SSL сертификат сервера
|
||||||
sslVerifyPeer: "false"
|
sslVerifyPeer: "false"
|
||||||
|
|
||||||
# Sentry для мониторинга ошибок (опционально)
|
# Sentry для мониторинга ошибок
|
||||||
sentry:
|
sentry:
|
||||||
# DSN для отправки ошибок
|
# DSN для отправки ошибок
|
||||||
# Оставьте пустым, чтобы отключить
|
|
||||||
dsn: ""
|
dsn: ""
|
||||||
|
|
||||||
# Окружение для группировки ошибок
|
# Окружение для группировки ошибок
|
||||||
@@ -151,6 +150,53 @@ app:
|
|||||||
# Не меняйте, если используете стандартный деплой
|
# Не меняйте, если используете стандартный деплой
|
||||||
url: "http://hrbox-geonames:8181"
|
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
|
# Настройки воркеров Launchpad
|
||||||
# Формат: "название-топика:количество-воркеров"
|
# Формат: "название-топика:количество-воркеров"
|
||||||
launchpad:
|
launchpad:
|
||||||
@@ -188,15 +234,6 @@ app:
|
|||||||
# API ключ для Yandex Cloud
|
# API ключ для Yandex Cloud
|
||||||
apiKey: ""
|
apiKey: ""
|
||||||
|
|
||||||
# OpenAI интеграция
|
|
||||||
openai:
|
|
||||||
# API ключ OpenAI
|
|
||||||
apiKey: ""
|
|
||||||
# Прокси ключ (если используете прокси)
|
|
||||||
proxyKey: ""
|
|
||||||
# Base URL для API (можно указать прокси)
|
|
||||||
baseUri: ""
|
|
||||||
|
|
||||||
# Настройки безопасности
|
# Настройки безопасности
|
||||||
security:
|
security:
|
||||||
# Разрешить полный доступ к iframe
|
# Разрешить полный доступ к iframe
|
||||||
@@ -217,6 +254,11 @@ secrets:
|
|||||||
# Генерация: openssl rand -base64 48
|
# Генерация: openssl rand -base64 48
|
||||||
encryptionKey: ""
|
encryptionKey: ""
|
||||||
|
|
||||||
|
# Секрет для внутренней коммуникации микросервисов (64 символа)
|
||||||
|
# Используется для защиты внутренних API вызовов между сервисами
|
||||||
|
# Генерация: openssl rand -base64 48
|
||||||
|
servicesInternalSecret: ""
|
||||||
|
|
||||||
# Настройки Ingress
|
# Настройки Ingress
|
||||||
ingress:
|
ingress:
|
||||||
# Включить Ingress
|
# Включить Ingress
|
||||||
@@ -281,18 +323,6 @@ resources:
|
|||||||
memory: "2Gi"
|
memory: "2Gi"
|
||||||
ephemeralStorage: "2Gi"
|
ephemeralStorage: "2Gi"
|
||||||
|
|
||||||
# WebSocket сервер
|
|
||||||
# Обеспечивает real-time функционал, например, уведомления
|
|
||||||
websocket:
|
|
||||||
requests:
|
|
||||||
cpu: "0.1"
|
|
||||||
memory: "128Mi"
|
|
||||||
ephemeralStorage: "64Mi"
|
|
||||||
limits:
|
|
||||||
cpu: "1"
|
|
||||||
memory: "512Mi"
|
|
||||||
ephemeralStorage: "64Mi"
|
|
||||||
|
|
||||||
# Geonames - сервис геолокации
|
# Geonames - сервис геолокации
|
||||||
# Определяет города, страны, часовые пояса
|
# Определяет города, страны, часовые пояса
|
||||||
geonames:
|
geonames:
|
||||||
@@ -329,6 +359,50 @@ resources:
|
|||||||
memory: "2Gi"
|
memory: "2Gi"
|
||||||
ephemeralStorage: "256Mi"
|
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 JetStream
|
||||||
nats:
|
nats:
|
||||||
# Включить NATS (обязательно для работы HRBox)
|
# Включить NATS (обязательно для работы HRBox)
|
||||||
|
|||||||
+233
@@ -0,0 +1,233 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to the HRBox Helm chart will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [2.0.0] - 2026-01-30
|
||||||
|
|
||||||
|
Масштабная актуализация чарта на основе продового окружения hrbox. Синхронизированы версии компонентов, добавлены новые микросервисы, обновлены переменные окружения.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
#### Новые микросервисы
|
||||||
|
|
||||||
|
- **Goworker** (`09-goworker.yaml`) - Сервис интеграций с мессенджерами
|
||||||
|
- Образ: `hrbox-goworker:2.7`
|
||||||
|
- Поддержка Telegram, WhatsApp и других мессенджеров
|
||||||
|
- 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`
|
||||||
|
|
||||||
|
- **Document Converter** (`09-document-converter.yaml`) - Конвертер документов
|
||||||
|
- Образ: `hrbox-document-converter:latest`
|
||||||
|
- Конвертация PDF, DOCX и других форматов
|
||||||
|
- Настройки: `app.document_converter` в values.yaml
|
||||||
|
- Переменные: `PYTHONUNBUFFERED`, `DOCCONV_MAX_PARALLEL_TASKS`
|
||||||
|
|
||||||
|
#### Новые переменные окружения
|
||||||
|
|
||||||
|
- `SERVICES_INTERNAL_SECRET` - Секрет для межсервисной коммуникации
|
||||||
|
- `AI_DOCS_INDEX_ENABLED` - Включение индексации документов через AI
|
||||||
|
- `AI_SEMANTIC_INDEX_ENABLED` - Семантическое индексирование
|
||||||
|
- `AI_SEMANTIC_INDEX_USE_BATCH` - Пакетная обработка при индексации
|
||||||
|
- `CHATBOX_SENTRY_DSN` - Sentry DSN для Chatbox
|
||||||
|
- `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-256Mi
|
||||||
|
- `resources.kedoca` - CPU: 0.1-0.5, Memory: 196Mi-256Mi
|
||||||
|
- `resources.document_converter` - CPU: 1, Memory: 512Mi-1024Mi, Ephemeral: 512Mi-1024Mi
|
||||||
|
- `resources.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, Document Converter, Chatbox всегда деплоятся
|
||||||
|
|
||||||
|
#### Templates
|
||||||
|
|
||||||
|
- `_envs.tpl`:
|
||||||
|
- Упрощена логика переменных окружения
|
||||||
|
- Удалены условия для обязательных сервисов
|
||||||
|
- Добавлен блок `envs_kedoca` для настроек криптографии
|
||||||
|
|
||||||
|
- `_resources.tpl`:
|
||||||
|
- Добавлены определения: `goworker_resources`, `kedoca_resources`, `document_converter_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**
|
||||||
|
|
||||||
|
```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: ""
|
||||||
|
|
||||||
|
document_converter:
|
||||||
|
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-document-converter:latest"
|
||||||
|
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: Сгенерируйте новый секрет**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Генерация servicesInternalSecret
|
||||||
|
openssl rand -base64 48
|
||||||
|
```
|
||||||
|
|
||||||
|
**Шаг 3: Обновите Chart**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm upgrade hrbox .helm/ \
|
||||||
|
--namespace hrbox \
|
||||||
|
--values your-values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
**Шаг 4: Проверьте новые поды**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверка новых сервисов
|
||||||
|
kubectl get pods -n hrbox -l app=goworker
|
||||||
|
kubectl get pods -n hrbox -l app=kedoca
|
||||||
|
kubectl get pods -n hrbox -l app=document-converter
|
||||||
|
kubectl get pods -n hrbox -l app=chatbox
|
||||||
|
|
||||||
|
# Убедитесь что старый websocket удален
|
||||||
|
kubectl get pods -n hrbox -l app=websocket # Должно быть пусто
|
||||||
|
```
|
||||||
|
|
||||||
|
### Breaking Changes
|
||||||
|
|
||||||
|
⚠️ **Критические изменения, требующие действий:**
|
||||||
|
|
||||||
|
1. **WebSocket → Chatbox**: Обязательное переименование конфигурации
|
||||||
|
- Service name изменился с `{chart}-websocket` на `{chart}-chatbox`
|
||||||
|
- Если есть зависимости от старого имени сервиса - обновите их
|
||||||
|
|
||||||
|
2. **Новые обязательные сервисы**: Goworker, Kedoca, Document Converter всегда деплоятся
|
||||||
|
- Требуются дополнительные ресурсы кластера
|
||||||
|
- Проверьте доступность ресурсов перед обновлением
|
||||||
|
|
||||||
|
3. **Новый секрет**: `secrets.servicesInternalSecret` обязателен
|
||||||
|
- Приложение не запустится без этого секрета
|
||||||
|
- Сгенерируйте перед деплоем
|
||||||
|
|
||||||
|
4. **OpenAI удален**: Используйте HRBox Hub для AI интеграций
|
||||||
|
- Миграция на Hub API требуется если использовали OpenAI
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
- Все образы сервисов используют registry: `cr.yandex/crphnph9c2s776j32sjd/`
|
||||||
|
- Для работы Kedoca с сертификатами создайте Kubernetes Secret и укажите в `kedoca.secretName`
|
||||||
|
- Goworker экспортирует метрики Prometheus на `/metrics` (порт 8686)
|
||||||
|
- Document Converter требует больше ephemeral storage (512Mi-1024Mi)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [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
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[2.0.0]: #200---2026-01-30
|
||||||
|
[1.2.0]: #120---previous-version
|
||||||
Reference in New Issue
Block a user