Вопрос с собеседования · DevOps

Чем requests отличаются от limits в Kubernetes и что такое OOMKilled и троттлинг CPU?

MiddleKubernetes
Ещё спрашивают так:
  • Почему под получает 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:

классусловиевыселяется
Guaranteedrequests = limits для всех ресурсовпоследним
Burstablerequests заданы, меньше limitsв середине
BestEffortничего не заданопервым

Подбор значений: по фактическому потреблению за неделю (p95 + запас), Vertical Pod Autoscaler в режиме рекомендаций, LimitRange и ResourceQuota на namespace.

Что хотят услышать

  • Requests для планирования, limits как потолок.
  • Различие поведения при превышении памяти и CPU.
  • QoS-классы и практика подбора.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Планировщик выбирает узел по limits
  • ✓Requests — резерв для планировщика; сверх лимита память — OOMKilled, CPU — троттлинг
  • ✗Превышение лимита CPU ведёт к OOMKilled, а лимита памяти — к троттлингу
  • ✗Requests не влияют на размещение подов

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования