Стадия жизненного цикла модуля: General Availability
В этом документе описано, как модуль Code подбирает ресурсы и масштабирует Kubernetes workloads на основе параметров
масштабирования в CodeInstance.
Ключевые параметры
spec.scaling.targetUserCount: профиль нагрузки (ожидаемое количество пользователей). Поддерживаемые значения:100,1000,3000,5000(10существует только для внутреннего использования разработчиками; см. предупреждение ниже).spec.scaling.highAvailability: переключатель HA-режима. Включает создание и настройку ресурсов autoscaling и защиты от вытеснений (см. следующий раздел).spec.gitData.resources: ручное переопределение CPU/памяти для Gitaly (имеет приоритет надspec.scaling.targetUserCount).spec.gitData.replicas: количество реплик Gitaly в HA-режиме (опционально; если не задано, используются значения по умолчанию).
За счёт чего обеспечивается отказоустойчивость и растёт производительность
При включенном HA-режиме (spec.scaling.highAvailability: true) оператор использует стандартные механизмы Kubernetes,
которые повышают устойчивость к сбоям и помогают держать производительность под нагрузкой:
- Несколько реплик (Deployments/StatefulSets): сервисы запускаются более чем в одной реплике, поэтому отказ одной поды/ноды не останавливает сервис.
- Horizontal Pod Autoscaler (HPA): автоматически увеличивает/уменьшает число реплик на основе CPU-метрик; для ключевых
компонентов настройки подбираются под
targetUserCount. Это даёт дополнительную пропускную способность в пике без постоянного использования большого количества физических ресурсов сервера. - PodDisruptionBudget (PDB): ограничивает количество Pod, которые можно вытеснить при планируемых событиях (drain нод, обновления), снижая риск простоя во время обслуживания.
- Pod anti-affinity (preferred): Pod предпочтительно разносятся по нодам (по
kubernetes.io/hostname). Это повышает отказоустойчивость — если одна нода выйдет из строя, остальные реплики приложения продолжат работать на других нодах. Кроме того, реплики не будут мешать друг другу при нехватке ресурсов (CPU, память) на одной ноде. Такое распределение работает, когда в кластере достаточно свободных нод.
При выключенном HA-режиме оператор использует более простую “standalone” топологию (для многих сервисов — одна реплика) и не создаются объекты HPA/PDB.
Внимание Не рекомендуется использовать любые экземпляры “burstable” в облачной инфраструктуре из-за непостоянной производительности.
spec.scaling.targetUserCount: 10предназначен исключительно для внутреннего использования разработчиками. Использование этого значения в иных средах не рекомендуется и может привести к нестабильной работе или непредвиденному поведению системы.
Справочник по ресурсам
Все расчёты выполняются на базе spec.scaling.targetUserCount.
В таблицах ниже приведены ресурсы, требуемые для одной реплики каждого компонента. В HA-режиме закладывайте как минимум 2 реплики для горизонтально масштабируемых сервисов (то есть как минимум ~2× от значений “на одну реплику”), плюс запас под autoscaling.
Standalone-режим (spec.scaling.highAvailability: false)
| Пользователи/Компонент | 100 | 300 | 500 | 1000 | 3000 | 5000 |
|---|---|---|---|---|---|---|
| Webservice default | requests: 3CPU / 6Gb limits: 3CPU / 6Gb 3 воркера, 8 тредов |
requests: 4CPU / 7Gb limits: 4CPU / 7Gb 4 воркера, 8 тредов |
requests: 4CPU / 7Gb limits: 4CPU / 7Gb 4 воркера, 8 тредов |
requests: 6CPU / 10Gb limits: 6CPU / 10Gb 6 воркеров, 8 тредов |
requests: 8CPU / 13Gb limits: 8CPU / 13Gb 8 воркеров, 8 тредов |
requests: 10CPU / 16Gb limits: 10CPU / 16Gb 10 воркеров, 8 тредов |
| Sidekiq | requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
| Shell | requests: 0.01CPU / 24Mb limits: 0.5CPU / 600Mb |
requests: 0.01CPU / 24Mb limits: 0.5CPU / 600Mb |
requests: 0.01CPU / 24Mb limits: 0.5CPU / 600Mb |
requests: 0.032CPU / 50Mb limits: 0.5CPU / 600Mb |
requests: 0.032CPU / 50Mb limits: 0.5CPU / 600Mb |
requests: 0.032CPU / 50Mb limits: 0.384CPU / 250Mb |
| Toolbox | requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
| Praefect | requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.6CPU / 1200Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
| Gitaly | requests: 1.5CPU / 2Gb limits: 1.5CPU / 2Gb |
requests: 1.5CPU / 2Gb limits: 1.5CPU / 2Gb |
requests: 1.5CPU / 2Gb limits: 1.5CPU / 2Gb |
requests: 2CPU / 4Gb limits: 2CPU / 4Gb |
requests: 6CPU / 16Gb limits: 6CPU / 16Gb |
requests: 6CPU / 16Gb limits: 6CPU / 16Gb |
| Code-operator | requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
| Registry* | requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
| Pages* | requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 3Gb |
requests: 0.9CPU / 2Gb limits: 1.5CPU / 4Gb |
| Mailroom* | requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
| HAProxy* | requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.5CPU / 256Mb limits: 1CPU / 512Mb |
requests: 0.75CPU / 512Mb limits: 1.5CPU / 1Gb |
| Всего(Мин компоненты) | requests: 6CPU / 10.5Gb limits: 8CPU / 14.5Gb |
requests: 7CPU / 11.5Gb limits: 9CPU / 15.5Gb |
requests: 7CPU / 11.5Gb limits: 9CPU / 15.5Gb |
requests: 9.5CPU / 16.5Gb limits: 11.5CPU / 20.5Gb |
requests: 15.5CPU / 31.5Gb limits: 18CPU / 36Gb |
requests: 17.5CPU / 34.5Gb limits: 19.5CPU / 38Gb |
| Всего(Все компоненты) | requests: 8CPU / 12.5Gb limits: 12CPU / 19.5Gb |
requests: 9CPU / 13.5Gb limits: 13CPU / 20.5Gb |
requests: 9CPU / 13.5Gb limits: 13CPU / 20.5Gb |
requests: 11.5CPU / 18.5Gb limits: 15.5CPU / 25.5Gb |
requests: 17.75CPU / 33.6Gb limits: 22CPU / 42.3Gb |
requests: 20CPU / 37.9Gb limits: 24CPU / 45.8Gb |
HA-режим (spec.scaling.highAvailability: true)
| Пользователи/Компонент | 100 | 300 | 500 | 1000 | 3000 | 5000 |
|---|---|---|---|---|---|---|
| Webservice default | requests: 3CPU / 6Gb limits: 3CPU / 6Gb 3 воркера, 8 тредов |
requests: 3CPU / 5.5Gb limits: 3CPU / 5.5Gb 3 воркера, 8 тредов |
requests: 4CPU / 7Gb limits: 4CPU / 7Gb 4 воркера, 8 тредов |
requests: 5CPU / 8.5Gb limits: 5CPU / 8.5Gb 5 воркеров, 8 тредов |
requests: 6CPU / 10Gb limits: 6CPU / 10Gb 6 воркеров, 8 тредов |
requests: 8CPU / 13Gb limits: 8CPU / 13Gb 8 воркеров, 8 тредов |
| Sidekiq | requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 3Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 2Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 2Gb |
requests: 1CPU / 1.5Gb limits: 1CPU / 2Gb |
| Shell | requests: 0.01CPU / 24Mb limits: 0.5CPU / 600Mb |
requests: 0.01CPU / 24Mb limits: 0.5CPU / 600Mb |
requests: 0.01CPU / 24Mb limits: 0.5CPU / 600Mb |
requests: 0.032CPU / 50Mb limits: 0.5CPU / 600Mb |
requests: 0.032CPU / 50Mb limits: 0.5CPU / 600Mb |
requests: 0.032CPU / 50Mb limits: 0.384CPU / 250Mb |
| Toolbox | requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
requests: 0.05CPU / 350Mb limits: 1CPU / 2Gb |
| Praefect | requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
requests: 0.1CPU / 128Mb limits: 0.6CPU / 1200Mb |
requests: 0.1CPU / 128Mb limits: 0.3CPU / 600Mb |
| Gitaly | requests: 1.5CPU / 2Gb limits: 1.5CPU / 2Gb |
requests: 1.5CPU / 2Gb limits: 1.5CPU / 2Gb |
requests: 1.5CPU / 2Gb limits: 1.5CPU / 2Gb |
requests: 2CPU / 4Gb limits: 2CPU / 4Gb |
requests: 6CPU / 16Gb limits: 6CPU / 16Gb |
requests: 6CPU / 16Gb limits: 6CPU / 16Gb |
| Code-operator | requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
requests: 0.01CPU / 64Mb limits: 0.5CPU / 128Mb |
| Registry* | requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 1CPU / 1Gb limits: 1.5CPU / 2Gb |
| Pages* | requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 2Gb |
requests: 0.9CPU / 1Gb limits: 1.5CPU / 3Gb |
requests: 0.9CPU / 2Gb limits: 1.5CPU / 4Gb |
| Mailroom* | requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
requests: 0.05CPU / 150Mb limits: 0.25CPU / 0.5Gb |
| HAProxy* | requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.25CPU / 128Mb limits: 0.5CPU / 256Mb |
requests: 0.5CPU / 256Mb limits: 1CPU / 512Mb |
requests: 0.75CPU / 512Mb limits: 1.5CPU / 1Gb |
| Всего(Мин компоненты) | requests: 6CPU / 10.5Gb limits: 8CPU / 14.5Gb |
requests: 6CPU / 10Gb limits: 8CPU / 14Gb |
requests: 7CPU / 11.5Gb limits: 9CPU / 15.5Gb |
requests: 8.5CPU / 15Gb limits: 10.5CPU / 18Gb |
requests: 13.5CPU / 28.5Gb limits: 16CPU / 32Gb |
requests: 15.5CPU / 31.5Gb limits: 17.5CPU / 34Gb |
| Всего(Все компоненты) | requests: 8CPU / 12.5Gb limits: 12CPU / 19.5Gb |
requests: 8CPU / 12Gb limits: 12CPU / 19Gb |
requests: 9CPU / 13.5Gb limits: 13CPU / 20.5Gb |
requests: 10.5CPU / 17Gb limits: 14.5CPU / 23Gb |
requests: 15.75CPU / 30.6Gb limits: 20CPU / 38.3Gb |
requests: 18CPU / 34.9Gb limits: 22CPU / 41.8Gb |
Опциональные компоненты отмечены в таблице символом
*.
Автоматическое масштабирование (HA-режим)
В HA-режиме для ключевых компонентов настраивается HPA. Для некоторых профилей targetUserCount заданы отдельные лимиты
на максимальное количество реплик:
| Пользователи/Компонент | 100 | 300 | 500 | 1000 | 3000 | 5000 |
|---|---|---|---|---|---|---|
| Webservice default | 2 | 2 | 2 | 4 | 5 | 6 |
| Sidekiq | 2 | 2 | 2 | 4 | 8 | 12 |
| Shell | 2 | 2 | 2 | 4 | 6 | 12 |
| HAProxy* | 2 | 2 | 2 | 2 | 3 | 4 |
| Registry* | 2 | 2 | 2 | 3 | 5 | 8 |
| Pages* | 2 | 2 | 2 | 3 | 6 | 6 |
Опциональные компоненты отмечены в таблице символом
*.
Настройка масштабирования ресурсов хранилища Git
Если вы видите непустую таблицу ‘OOM events’ в Grafana или срабатывающий алерт GitalyCgroupMemoryOOM в Prometheus,
вероятно, вам нужно скорректировать ресурсы памяти и CPU для Gitaly. Увеличьте значения spec.gitData.resources в вашей
конфигурации (например, установите память на 16Gi и CPU на 4). Примените изменения и наблюдайте за Gitaly.
При масштабировании Git-хранилища важно учитывать следующий приоритет параметров:
- Явно заданные ресурсы в
spec.gitData.resources - Значение
spec.scaling.targetUserCount(используется для автоматического расчёта ресурсов по таблице)
Пример 1:
`spec.gitData.resources.cpu`: 1
`spec.gitData.resources.memory`: 1Gi
`spec.scaling.targetUserCount`: 3000
Согласно таблице рекомендуемых ресурсов (описанной выше), ожидаемый результат при targetUserCount = 3000:
memory: 4Gicpu: 2
Однако из-за приоритета явно заданных значений фактический результат будет:
memory: 1Gicpu: 1
💡 Примечание: если явно указан параметр в
spec.gitData.resources, он всегда имеет приоритет над автоматическим расчётом.
Пример 2:
`spec.gitData.resources.cpu`: 5
`spec.gitData.resources.memory`: ***намеренно не указан***
`spec.scaling.targetUserCount`: 3000
Согласно таблице, ожидаемый результат при targetUserCount = 3000:
memory: 4Gicpu: 2
Но поскольку:
spec.gitData.resources.cpuзадан явно → используется значение 5,spec.gitData.resources.memoryне указан → используется значение из таблицы (4Gi),
фактический результат будет:
memory: 4Gi (из таблицы)cpu: 5 (изspec.gitData.resources.cpu)
💡 Важно: если какой-либо ресурс (CPU или память) не указан в
spec.gitData.resources, для него применяется значение из таблицы масштабирования.