Перейти к содержанию

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.