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

Расчёт ресурсов

Страница для того, кто разворачивает Alatyr и должен назвать цифры: сколько процессора, памяти и диска просить под сервер, базу и Vault. Для настройки целей она не нужна.

Числа ниже разделены на три вида, и это разделение существенно:

  • Замерено — снято на работающей установке, указано чем и при каком объёме данных.
  • Посчитано — выведено из замеров арифметикой, метод показан.
  • Зависит от установки — величина, которую задаёт ваша политика (частота продления, глубина хранения журнала), и подставить её можем только вы.

Ресурсы — не лицензионный лимит

Расчёт ресурсов не отменяет ограничения из действующей лицензии. Лимитов два: по числу устройств (базовая лицензия — 50, платная — max_devices) и, если лицензия их несёт, по числу машин на каждую цель отдельно. Железо, рассчитанное на 600 машин, само по себе не даёт права их обслуживать. См. Лицензирование.

Потребление в покое (замерено)

Демо-состав docker-compose.demo.yml целиком, четыре компонента, после инициализации и засева демо-данными. Три пробы docker stats с интервалом 5 с:

Компонент CPU Память
PostgreSQL 0,02–0,05 % 30 МиБ
Сервер 0,00–0,24 % 21 МиБ
Веб-интерфейс (nginx) 0,00 % 18 МиБ
Vault (dev-режим) 0,78–24,6 % 51 МиБ
Итого менее 0,3 % ядра в среднем около 120 МиБ

Всплеск CPU у Vault — периодическая внутренняя работа, не реакция на запросы: установка в этот момент не обслуживала никого.

Подъём с нуля — 110 секунд до состояния, когда API отвечает 200 на /health: сборка образов, миграции, инициализация PKI, засев.

Размеры образов: сервер 141 МБ, веб-интерфейс 84 МБ, PostgreSQL 417 МБ (alpine) или 633 МБ, Vault 740 МБ.

Профиль: пилот (до ~200 устройств)

Одна реплика на компонент, без отказоустойчивости. Значения requests разумно брать вдвое выше замеренного покоя — запас на выпуск и на пики опроса:

Компонент CPU (request / limit) Память (request / limit)
Сервер 100m / 500m 64Mi / 256Mi
PostgreSQL 100m / 500m 128Mi / 512Mi
Vault 100m / 500m 128Mi / 512Mi
Веб-интерфейс 25m / 100m 32Mi / 64Mi

Прежние значения на этой странице были завышены по памяти втрое-вчетверо: они задавались оценкой, а не замером.

Профиль: 600 машин, 5–6 целей на машину

Типичный корпоративный парк: 600 устройств, на каждом 5–6 целей (Wi-Fi, проводной 802.1X, вход по карте, mTLS, SSH, Kubernetes) — около 3300 действующих сертификатов.

Диск: как считалось

Замер: таблица заявок занимает 488 кБ при 766 строках, включая индексы, — 652 байта на строку. Но в демо-данных поля csr_pem и cert_pem заполнены заглушками (82 и 63 байта), а не настоящими PEM.

Настоящие размеры сняты выпуском сертификата тем же профилем, которым пользуется продукт:

Поле Замерено
CSR (PEM, RSA-2048) 911 байт
Сертификат (PEM) 1358 байт

Отсюда настоящая строка заявки: 652 − 145 + 2269 ≈ 2776 байт.

Величина Значение Вид
Таблица заявок, 3300 действующих 8,7 МБ посчитано
То же за 3 года при ежегодном продлении 26 МБ посчитано
Таблица устройств, 600 строк 1,1 МБ посчитано (замер: 1959 Б/строка)
Журнал аудита 18–70 МБ в год зависит от установки (замер: 1117 Б/строка)

Разброс по журналу — это 5 и 20 событий на сертификат в год: выпуск, продление, отзыв, вход, проверка. Глубину хранения задаёте вы.

Итого по диску: десятки мегабайт данных в год. Том PostgreSQL на 5–10 ГБ закрывает такой парк с многократным запасом; узким местом станет не объём, а резервное копирование и глубина хранения журнала.

Процессор и память

Сам по себе парк в 600 машин нагрузки почти не создаёт: обращения редки и коротки — заявка на выпуск раз в год на цель, периодическая отметка присутствия. Значения профиля «пилот» подходят и здесь; удваивать их стоит, если вы разворачиваете парк одномоментно.

Что НЕ замерено

Одновременная первичная регистрация всех 600 машин. При массовой раскатке агенты стартуют пачкой, и пик приходится не на установившийся режим, а на первый час. Агент разносит старт случайной задержкой (--tick-jitter, по умолчанию 120 с), но при 600 машинах планируйте раскатку волнами и следите за очередью заявок в веб-интерфейсе.

Профиль: тысячи устройств

Для тысяч устройств топология демо-чарта — не отправная точка, а только источник соотношений между компонентами. На таком масштабе потребуется платная лицензия с соответствующим max_devices. Развёртывание потребует:

  • нескольких реплик сервера за load balancer'ом — но прежде чем размещать N реплик API-сервера, посмотрите страницу Отказоустойчивость: там описаны ограничения, специфичные для SCEP-поллинга, которые влияют на то, как масштабировать сервер горизонтально;
  • production-режима Vault (не -dev): постоянный storage backend (Raft/Consul), ручной или auto-unseal через KMS, в идеале — HA-кластер Vault (нечётное число узлов), что выходит далеко за рамки одноподового демо-чарта;
  • PostgreSQL с ресурсами, пропорциональными реальному датасету, и отдельным планом на бэкапы/репликацию (демо-чарт даёт один под без реплики и без задачи резервного копирования).
Компонент CPU (request / limit) Memory (request / limit) Почему
Server (на реплику) 250–500m / 1 vCPU 128–256Mi / 512Mi Тот же лёгкий Go-бинарь; на тысячах устройств значение имеет число реплик (см. Отказоустойчивость) и частота /enroll/checkin-трафика, а не размер одного пода
PostgreSQL 500m–1 vCPU / 2 vCPU 512Mi–1Gi / 2Gi Датасет и WAL-нагрузка растут с числом устройств и историей заявок на выпуск и журнала аудита; на этом масштабе также рассмотрите read-реплику под отчётность
Vault (production, на узел HA-кластера) 250m–1 vCPU / 2 vCPU 256Mi–1Gi / 2Gi Требуемые ресурсы сильно зависят от выбранного storage backend (Raft/Consul) и числа узлов кластера (обычно 3+ для HA) — это оценка на узел, не на весь кластер
Frontend (на реплику) 10–25m / 100m 16–32Mi / 64Mi Статика; масштабируется по объёму HTTP-запросов от админки, не по числу устройств

Диск. На тысячах устройств 5Gi из демо-чарта, скорее всего, будет мало — рост журнала аудита и заявок на выпуск пропорционален числу операций выпуска/отзыва/проверки, что зависит от политики ротации сертификатов и retention-политики аудита у конкретного заказчика. Ориентируйтесь не на фиксированное число ГБ, а на мониторинг занятости тома с алертом задолго до заполнения, плюс план на расширение тома (storageClassName с поддержкой online-resize) или архивацию старых записей журнала аудита.