Production Setup
Требования к инфраструктуре
Для production окружения рекомендуется следующая архитектура:
Рекомендуемая архитектура нод
- 2 ноды с лейблом
app-worker-api— для API, фронтенда и Redis (требуется для соблюдения HA — высокой доступности) - 1 нода с лейблом
app-worker-calc— для фоновых заданий и прогона агрегаций - 1 нода с лейблом
app-worker-scan— для запуска сканов
Рекомендуемые характеристики нод
Для обеспечения высокой производительности и возможности горизонтального масштабирования при росте нагрузки, каждая нода должна иметь следующие характеристики:
- 12 CPU
- 32GB RAM
- SSD/SAN disk 100GB (500 IOPS read/write)
Для больших кластеров: В кластерах с большим количеством нод (10+ нод) требования к отдельным нодам могут быть снижены
благодаря распределению нагрузки и возможности горизонтального масштабирования.
В таких случаях допустимо использование нод с меньшими характеристиками (например, 8 CPU, 16-24GB RAM),
при условии обеспечения достаточной общей мощности кластера и возможности масштабирования при росте нагрузки.
Рекомендуется провести нагрузочное тестирование для валидации конфигурации.
Дополнительно заранее распределите ноды по лейблам (app-worker-api, app-worker-calc, app-worker-scan)
и убедитесь, что под каждое лейбло выделено достаточно ресурсов,
чтобы все привязанные к нему компоненты действительно разместились на нужных нодах.
Внешние сервисы
PostgreSQL:
- Версия: 13.x или выше (рекомендуется 16.x)
- Доступность: из кластера Kubernetes
- Ресурсы: 8 CPU, 16GB RAM, SSD с 300+ IOPS
- Резервное копирование: настроено на Вашей стороне
Redis:
- Версия: 7.x
- Доступность: из кластера Kubernetes
Подготовка production конфигурации
Шаг 1. Создайте конфигурационный файл my-production-config.yaml (файл оверрайдов).
Если вы хотите использовать пример файла из чарта, сначала скачайте чарт для просмотра:
helm pull oci://registry.hexway.io/charts/vampy --version $RELEASE_VERSION --untar
cd vampy
cp values.override.production-example.yaml ../my-production-config.yaml
cd ..
Или создайте файл my-production-config.yaml самостоятельно с необходимыми настройками.
⚠️ Важно: Не изменяйте файл values.yaml в чарте.
Все ваши настройки должны быть в файле my-production-config.yaml (файл оверрайдов),
который передается через флаг -f.
Шаг 2. Отредактируйте конфигурацию my-production-config.yaml:
Ниже — пример настроек внешней PostgreSQL и Redis. В тот же файл при необходимости можно добавить Ingress, пользователей по умолчанию, requests и limits ресурсов, количество реплик, распределение по нодам и другие параметры. Полный перечень — в values.yaml чарта (см. раздел «Просмотр чарта и установка с локального чарта» в Установка чарта).
# Настройки БД PostgreSQL
database:
host: "your-postgres-host.example.com"
port: "5432"
name: "vampy"
secretsKeyRefs:
username:
name: "<release_name>-vampy-config" # Замените "<release_name>" на значение переменной $RELEASE_NAME
key: "EXT_PG_USERNAME"
password:
name: "<release_name>-vampy-config" # Замените "<release_name>" на значение переменной $RELEASE_NAME
key: "EXT_PG_PASSWORD"
# Отключаем встроенный Postgres
vPostgres:
enabled: false
# Настройка Redis
redis:
host: "your-redis-host.example.com"
port: "6379"
vRedis:
enabled: false
⚠️ Важно:
- В YAML файле в поле
nameсекрета необходимо вручную указать имя секрета в формате<имя_релиза>-vampy-config, где<имя_релиза>— это значение переменной окружения$RELEASE_NAME, установленной в разделе Переменные, используемые в инструкции. Например, если$RELEASE_NAME="vampy", то имя секрета будетvampy-vampy-config. - База данных PostgreSQL должна быть создана заранее на внешнем сервере.
- Пользователь БД должен иметь права на создание таблиц, индексов и выполнение миграций (права
CREATE,ALTER,SELECT,INSERT,UPDATE,DELETEна схему базы данных).
Рекомендуются параметры для распределения нагрузки по нодам:
# NodeSelector для распределения нагрузки
vEngine:
nodeSelector:
kubernetes.io/affinity-node-label: app-worker-api
vBackgroundSeparated:
enabled: true
modes:
cpuLoadScan:
nodeSelector:
kubernetes.io/affinity-node-label: app-worker-scan
cpuLoadCalc:
nodeSelector:
kubernetes.io/affinity-node-label: app-worker-calc
businessFlow:
nodeSelector:
kubernetes.io/affinity-node-label: app-worker-api
highPriorityCalc:
nodeSelector:
kubernetes.io/affinity-node-label: app-worker-api
Примечание: Чтобы назначить ноде лейбл для nodeSelector, выполните: kubectl label nodes <имя_ноды> <лейбл>=<значение> (например, kubectl label nodes worker-1 kubernetes.io/affinity-node-label=app-worker-api).
Шаг 3. Создайте Kubernetes Secret для доступа к БД:
kubectl create secret generic ${RELEASE_NAME}-vampy-config \
--namespace=$RELEASE_NAMESPACE \
--from-literal=EXT_PG_USERNAME='your_db_user' \
--from-literal=EXT_PG_PASSWORD='your_db_password' \
--from-literal=EXT_REDIS_USERNAME='your_redis_user' \
--from-literal=EXT_REDIS_PASSWORD='your_redis_password'
⚠️ Важно: Если вы создаёте секрет вручную (до установки Helm чарта), Helm может выдавать предупреждение о том, что секрет не управляется Helm. Чтобы избежать этого, после создания секрета выполните следующие команды для добавления аннотаций Helm:
kubectl label secret ${RELEASE_NAME}-vampy-config -n $RELEASE_NAMESPACE app.kubernetes.io/managed-by=Helm --overwrite
kubectl annotate secret ${RELEASE_NAME}-vampy-config -n $RELEASE_NAMESPACE meta.helm.sh/release-name=$RELEASE_NAME --overwrite
kubectl annotate secret ${RELEASE_NAME}-vampy-config -n $RELEASE_NAMESPACE meta.helm.sh/release-namespace=$RELEASE_NAMESPACE --overwrite
Альтернативно, вы можете использовать другой секрет (не ${RELEASE_NAME}-vampy-config), которым Helm не будет пытаться управлять.
Шаг 4. Установите чарт:
Вы можете установить чарт напрямую из удалённого репозитория (рекомендуемый способ):
helm upgrade --install $RELEASE_NAME oci://registry.hexway.io/charts/vampy \
--version $RELEASE_VERSION \
-n $RELEASE_NAMESPACE \
--create-namespace \
-f my-production-config.yaml
Или, если вы скачали чарт локально и находитесь в директории чарта:
helm upgrade --install $RELEASE_NAME . \
-n $RELEASE_NAMESPACE \
--create-namespace \
-f my-production-config.yaml
Шаг 5. Проверьте размещение подов на нужных нодах:
Настройка для высоконагруженных окружений
Если в вашей системе более 1 скана в минуту, настройте профиль шины событий:
Доступные профили:
| Профиль | Макс. задержка вычислений | Назначение |
|---|---|---|
default |
60 сек | Малонагруженные системы |
highload |
300 сек | Много репозиториев, параллельных сканов |