Чем requests отличаются от limits в Kubernetes и что такое OOMKilled и троттлинг CPU?
- Почему под получает OOMKilled?
- Нужно ли ставить лимиты по CPU?
requests — сколько ресурсов зарезервировать: по ним планировщик выбирает узел. limits — потолок: превышение памяти → контейнер убивают (OOMKilled, код 137), превышение CPU → троттлинг (процесс притормаживают, но не убивают). Requests слишком малы — узлы переполнены и поды мешают друг другу; слишком велики — кластер простаивает.
- Память: request = limit — предсказуемо, без внезапных OOM соседей
- CPU-лимит даёт троттлинг и рост задержек даже при свободных ядрах; многие ставят только request
- QoS-классы: Guaranteed, Burstable, BestEffort — порядок выселения при нехватке памяти на узле
А ещё Для JVM размер кучи задают долей от лимита (MaxRAMPercentage), а не жёстким -Xmx
Подробно
Как работает CPU-лимит. Лимит реализован квотой CFS: за период 100 мс контейнер может использовать limit × 100 мс процессорного времени. Многопоточное приложение с лимитом 1 CPU, запустив 8 потоков, исчерпает квоту за 12,5 мс и будет стоять до конца периода — задержки p99 растут. Метрика: container_cpu_cfs_throttled_periods_total.
Память. Превысить лимит нельзя: cgroup вызывает OOM, kubelet перезапускает контейнер. Учитывается вся память процесса: куча, метаспейс, стеки потоков, буферы вне кучи, page cache частично.
QoS:
| класс | условие | выселяется |
|---|---|---|
| Guaranteed | requests = limits для всех ресурсов | последним |
| Burstable | requests заданы, меньше limits | в середине |
| BestEffort | ничего не задано | первым |
Подбор значений: по фактическому потреблению за неделю (p95 + запас), Vertical Pod Autoscaler в режиме рекомендаций, LimitRange и ResourceQuota на namespace.
Что хотят услышать
- Requests для планирования, limits как потолок.
- Различие поведения при превышении памяти и CPU.
- QoS-классы и практика подбора.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Планировщик выбирает узел по limits
- ✓Requests — резерв для планировщика; сверх лимита память — OOMKilled, CPU — троттлинг
- ✗Превышение лимита CPU ведёт к OOMKilled, а лимита памяти — к троттлингу
- ✗Requests не влияют на размещение подов
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.