Управление квотами проекта
В этом руководстве объясняется, как 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 в рамках обычного процесса контроля изменений, согласованного с планированием ёмкости (узлы/хранилище) и управлением бюджетом.