# Требования к нарезанию машин в кластере 

В рамках кластера учитываются не только pod’ы серверов приложений, но и все инфраструктурные компоненты, необходимые для работы системы: балансировщик, брокер очередей, планировщик заданий, компоненты маршрутизации, а также системы мониторинга и логирования (например, Prometheus, Grafana, Loki). Также отдельно учитываются база данных и файловое хранилище.

Приведенные далее требования и рекомендации относятся к системе в целом, однако основная часть ресурсов, как правило, приходится на серверы приложений.

- **CPU**
  - рассчитывается от нагрузки пользователей и интеграций;
  - минимальное значение — **2 vCPU на pod/инстанс**;
  - при росте нагрузки ресурсы масштабируются горизонтально за счет увеличения количества pod’ов или вертикально за счет увеличения ресурсов pod’а.

- **RAM**
  - основной параметр — **`Xmx` JVM**;
  - `Xmx` не должен превышать **32 ГБ**;
  - общий объем RAM должен быть не менее `Xmx + 10%`;
  - не рекомендуется выделять память без запаса.

- **Диск**
  - в кластере ориентир — **20 ГБ на pod**;
  - общий объем диска зависит от количества pod’ов;
  - для standalone-решения — не менее **120 ГБ на ВМ**.

- **Файловое хранилище**
  - используется NFS или S3-совместимое хранилище;
  - минимальные ресурсы: CPU — от 4, RAM — от 4 ГБ;
  - объем определяется отдельно.

- **База данных**
  - используется PostgreSQL;
  - рекомендуемая версия — **17 и выше**;
  - минимальная версия — **14**;
  - нагрузка на БД зависит от пользователей и интеграций.

- **Отказоустойчивость PostgreSQL**
  - возможные решения: Pacemaker или Postgres Pro Cluster.

- **Резервное копирование**
  - для баз до 1.5 ТБ можно использовать логические и бинарные дампы;
  - для баз более 1.5 ТБ используются потоковая репликация и физические бэкапы с WAL.

- **Сеть**
  - между всеми узлами требуется не менее **1 Гбит/с**;
  - такая пропускная способность должна быть обеспечена между нодами приложений, базой данных и файловым хранилищем;
  - для нагруженных систем рекомендуется 10 Гбит/с.

## Принципы нарезки кластера

Основной способ масштабирования — горизонтальный, за счет увеличения количества pod’ов и балансировки нагрузки между ними. Вертикальное масштабирование используется ограниченно, когда необходимо увеличить CPU и RAM конкретного pod’а.

При такой схеме pod’ы не должны хранить пользовательское состояние в локальной памяти. Сессии, данные и другие рабочие состояния должны размещаться во внешних компонентах, например в базе данных, кэше или файловом хранилище. Это позволяет свободно перераспределять нагрузку между pod’ами и упрощает отказоустойчивость. База данных, как правило, масштабируется вертикально, а также за счет использования реплик, обслуживающих запросы на чтение.

### Пример расчета на 500 одновременных пользователей

Для контура с 500 одновременными пользователями и 10–20 интеграционными потоками можно использовать следующую стартовую конфигурацию:

- слой приложений — 4 pod’а по 4 vCPU, 16 ГБ RAM и 20 ГБ диска на каждый pod;
- `Xmx` для каждого pod — порядка 12–14 ГБ;
- Kubernetes worker-ноды (варианты):
  - 4 ноды по 8 vCPU и 24 ГБ RAM,  
  или
  - 3 ноды по 8 vCPU и 48 ГБ RAM;
- диск на каждой ноде — не менее 120 ГБ;
- PostgreSQL — 8–16 vCPU и 32–64 ГБ RAM на основной узел;
- файловое хранилище — отдельный NFS или S3-совместимый узел с параметрами не менее 4 vCPU и 4 ГБ RAM;
- сеть между узлами — не менее 1 Гбит/с.


Конфигурация является ориентировочной и используется для предварительной оценки. Для точного расчета используйте sizing-инструмент.
