Управление квотами проекта

В этом руководстве объясняется, как ACP расширяет Kubernetes ResourceQuota с помощью агрегированной квоты на уровне проекта (ProjectQuota). ProjectQuota позволяет ограничить сумму ResourceQuota по всем namespace в проекте, что позволяет планировать и управлять ресурсами на уровне проекта, при этом делегируя лимиты отдельным namespace.

Содержание

Что такое ProjectQuota?

  • ResourceQuota (встроенный в Kubernetes) ограничивает ресурсы на уровне namespace (CPU, память, количество объектов и т.д.). Для понятий, ключей и использования см.:
  • ProjectQuota задаёт верхний предел для всего проекта: сумма всех ResourceQuota по namespace в проекте не должна превышать жёсткие лимиты проекта по тем же ключам.

Проще говоря: ResourceQuota ограничивает один namespace; ProjectQuota ограничивает сумму по всем namespace в проекте.

Как это работает

  • Порядок работы: сначала определите или скорректируйте ProjectQuota, затем распределяйте ResourceQuota по namespace в рамках бюджета проекта.
  • Область действия: ProjectQuota применяется к платформенному проекту и управляет всеми namespace, которые к нему принадлежат.
  • Агрегированное применение при приёме запроса:
    • При создании или обновлении ResourceQuota namespace платформа вычисляет сумму по тем же ключам (например, limits.cpu, requests.memory, pods) по всем namespace проекта, включая вносимое изменение.
    • Запрос разрешается только если новая сумма остаётся меньше или равна соответствующим жёстким лимитам ProjectQuota. В противном случае изменение отклоняется с объяснением ошибки.
  • Модель исполнения:
    • ProjectQuota ограничивает то, что можно выделить через ResourceQuota namespace (предварительное выделение), а не текущее использование ресурсов. Фактическое потребление регулируется ResourceQuota каждого namespace и планировщиком.

Когда использовать ProjectQuota

  • Управление бюджетом/ёмкостью по проекту: выделить фиксированный бюджет CPU/памяти/объектов и затем распределить его по namespace.
  • Много командные или много средовые проекты (например, dev/staging/prod), которые используют общий верхний предел.
  • Предотвращение «дрейфа» квот: поддерживать один «большой контейнер» на уровне проекта, чтобы квоты namespace не увеличивались незаметно со временем.

Ключи квот и единицы измерения

ProjectQuota поддерживает те же распространённые ключи, что и ResourceQuota (неполный список):

  • Вычислительные ресурсы и память: limits.cpu, limits.memory, requests.cpu, requests.memory
  • Количество рабочих нагрузок/объектов: pods, services, configmaps, secrets, pvc и другие

Единицы и правила подсчёта:

  • CPU измеряется в ядрах (например, 2, 500m)
  • Память измеряется в байтах (например, 8Gi)
  • Ключи, связанные с объектами, считаются целыми числами

Если сумма соответствующих ключей по всем namespace приближается или превышает жёсткий лимит ProjectQuota, ACP блокирует создание или расширение ResourceQuota для этого ключа.

Советы по стратегии распределения

  • Сначала определите «большой контейнер» проекта (ProjectQuota), затем разделите его на ResourceQuota по namespace для команд/сред.
  • Оставляйте запас 10% - 30% для пиков и эластичного масштабирования.
  • Регулярно проверяйте: возвращайте неиспользуемые квоты и перераспределяйте; увеличивайте квоты для постоянно ограниченных namespace и корректируйте общий лимит проекта.

Лучшие практики и часто задаваемые вопросы

  • В: При увеличении limits.memory в namespace возникает ошибка о превышении квоты проекта. Почему?
    • О: Жёсткий лимит ProjectQuota по этому ключу будет превышен запрашиваемым изменением. Уменьшите квоты в других namespace или сначала увеличьте лимит проекта, затем повторите изменение namespace.
  • В: Я увеличил ProjectQuota, но рабочие нагрузки всё равно не запускаются.
    • О: Убедитесь, что ResourceQuota каждого namespace также увеличена соответствующим образом, и проверьте доступную ёмкость кластера/узлов.
  • Рекомендация: Управляйте ProjectQuota в рамках обычного процесса контроля изменений, согласованного с планированием ёмкости (узлы/хранилище) и управлением бюджетом.