PostgreSQL¶
PostgreSQL 16 — основная реляционная БД платформы. Все микросервисы используют единую базу данных genai_db с изолированными схемами (9 схем), каждая принадлежит своему сервису.
Назначение¶
Хранит данные всех продуктовых сервисов: каталог моделей, профили сканирований, результаты атак, очереди задач, сессии, лицензии. Инициализируется и мигрируется при первом старте каждого сервиса через Alembic init-контейнеры.
Зависимости¶
Входящие (кто подключается)¶
| Сервис | Схема в БД |
|---|---|
model-mgmt |
model_management |
scan-profile |
scan_profile |
results |
results |
orchestrator |
scan_orchestrator |
jailbreak |
jailbreak_service |
asr |
asr_adversarial |
cv |
cv_adversarial |
auth-service |
auth |
license-service |
licensing |
keycloak |
создаёт собственную схему через init-контейнер |
Исходящие¶
Нет.
Values¶
| Параметр | По умолчанию | Обязателен | Описание |
|---|---|---|---|
auth.username |
genai_admin |
нет | Имя пользователя БД |
auth.database |
genai_db |
нет | Имя базы данных |
persistence.enabled |
false |
нет | Включить PVC (обязательно для production) |
persistence.size |
"50Gi" |
нет | Размер PVC |
persistence.storageClass |
"" |
нет | StorageClass; пусто = default кластера |
global.image.registry |
registry.appsec.global |
нет | |
global.image.repositoryPrefix |
appsecgenai-release |
нет | |
global.image.tag |
— | да | Версия образа (<VERSION>) |
global.imagePullSecrets[0].name |
— | да | Имя imagePullSecret |
Пример values.yaml¶
# values-postgres.yaml
auth:
username: genai_admin
database: genai_db
persistence:
enabled: true # ОБЯЗАТЕЛЬНО для production
size: "50Gi"
storageClass: "" # пусто = default StorageClass
global:
image:
registry: registry.appsec.global
repositoryPrefix: appsecgenai-release
tag: "<VERSION>"
imagePullSecrets:
- name: harbor-cr
Установка¶
helm upgrade --install postgres \
oci://registry.appsec.global/appsecgenai-release/charts/postgres \
--version <VERSION> -n genai --create-namespace \
-f values-postgres.yaml
После установки чарт создаёт Secret postgres-auth с ключом POSTGRES_PASSWORD. Этот Secret необходим всем продуктовым сервисам.
Внешний PostgreSQL¶
Если PostgreSQL уже развёрнут отдельно (Managed DB, CNPG и т.п.) — установите postgres.enabled: false и укажите координаты в global.deps.postgres.
Wizard (values.yaml)¶
postgres:
enabled: false # не ставить in-cluster PostgreSQL
auth:
username: genai_admin # пользователь в вашем Postgres
database: genai_db # база данных
global:
deps:
postgres:
host: rc1a-xxxxx.mdb.yandexcloud.net
port: 6432
username: genai_admin
database: genai_db
existingSecret: postgres-auth # Secret с ключом POSTGRES_PASSWORD
# bootstrap: true # создать 7 схем в существующей БД
bootstrap: идемпотентность
Схемы создаются через CREATE SCHEMA IF NOT EXISTS. Оставить bootstrap: true на каждый update — безопасно. При встроенном PostgreSQL (postgres.enabled: true) bootstrap не нужен — схемы создают Alembic init-контейнеры каждого сервиса при первом старте.
Создайте Secret с паролем до запуска Wizard:
kubectl create secret generic postgres-auth -n genai \
--from-literal=POSTGRES_PASSWORD="<strong-password>"
Нет поля scheme
PostgreSQL подключается по TCP напрямую — схема (postgresql://) не настраивается через global.deps.postgres. TLS на уровне соединения управляется самим сервером/клиентом (sslmode в строке подключения).
persistence=false в production
При persistence.enabled: false данные хранятся в emptyDir и теряются при перезапуске пода. Для production всегда включайте persistence с ReclaimPolicy=Retain.