Управление квотами проекта
В этом руководстве объясняется, как ACP расширяет Kubernetes ResourceQuota с помощью агрегированной квоты на уровне проекта (ProjectQuota). ProjectQuota позволяет ограничить сумму ResourceQuota по всем namespace в проекте, что позволяет планировать и управлять ресурсами на уровне проекта, при этом делегируя лимиты отдельным namespace.
Содержание
Что такое ProjectQuota?Как это работаетКогда использовать ProjectQuotaКлючи квот и единицы измеренияСоветы по стратегии распределенияЛучшие практики и часто задаваемые вопросыЧто такое 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. В противном случае изменение отклоняется с объяснением ошибки.
- При создании или обновлении ResourceQuota namespace платформа вычисляет сумму по тем же ключам (например,
- Модель исполнения:
- 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 в рамках обычного процесса контроля изменений, согласованного с планированием ёмкости (узлы/хранилище) и управлением бюджетом.