Новый под не помещается в квоту пространства имён
«Error creating: pods "..." is forbidden: exceeded quota: ..., requested: limits.memory=..., used: ..., limited: ...» в событиях Kubernetes: под не создаётся, потому что квота ресурсов пространства имён исчерпана. Особенно часто при обновлении, когда старые и новые поды живут одновременно.
Что это значит
В пространстве имён задана квота (ResourceQuota) на сумму запросов и лимитов процессора и памяти всех подов. Новый под не создаётся, если вместе с уже работающими он выходит за квоту. В тексте видно, чего не хватило: requested сколько просит под, used сколько уже занято, limited предел квоты.
Чаще всего это всплывает при обновлении приложения. По умолчанию Kubernetes сначала поднимает новый под и только потом гасит старый, и на это время приложение занимает квоту дважды. Обновление зависает: новые поды не создаются, старые не уходят.
Ещё одна связанная ошибка: если квота задана на лимиты, под без явных лимитов не создастся вовсе, с ошибкой must specify limits.
Как проверить
kubectl describe resourcequota -n <namespace>
kubectl get events -n <namespace> --field-selector reason=FailedCreate
kubectl get rs -n <namespace> # набор подов с желаемым числом больше текущего
Что сделать
- Поднять квоту, если ресурсы кластера позволяют.
- Для тяжёлых приложений настроить обновление без одновременного запуска лишних подов:
maxSurge: 0иmaxUnavailable: 1в стратегии развёртывания. - Проверить лимиты: если они завышены относительно реального потребления, их снижение освобождает квоту без изменения квоты.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать