Как выставить requests и limits
Вопрос
Как ты определишь requests и limits для нового сервиса и почему?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Измерить реальное потребление под нагрузкой: p95/p99 CPU и памяти по метрикам или нагрузочному тесту
Память: requests = limits с запасом над пиком, иначе OOMKilled или вытеснение
CPU: requests по типичному потреблению; лимит либо не ставить, либо с запасом, учитывая троттлинг
Лимиты рантайма согласовать с лимитом контейнера: куча JVM, Node, `GOMEMLIMIT`, число потоков
QoS-класс: критичным сервисам Guaranteed по памяти
Пересматривать по метрикам, VPA в режиме рекомендаций, LimitRange для значений по умолчанию
Что могут спросить следом
- Почему некоторые не ставят CPU-лимиты?
- Как связаны requests и HPA?
Разбор
Начинаю с измерений: нагрузочный тест или метрики с похожего сервиса, смотрю p95 и p99 потребления CPU и памяти, а не среднее. Память для меня несжимаемый ресурс, поэтому ставлю requests равным limits с запасом над пиком: так планировщик не поставит под на узел, где памяти не хватит, и поведение предсказуемо, а под не станет первым кандидатом на вытеснение. CPU requests ставлю по типичному потреблению, от них зависит и планирование, и доля процессора при конкуренции. С лимитом CPU осторожно: он вызывает троттлинг, который бьёт по задержкам даже при невысокой средней загрузке, поэтому многие ставят его с большим запасом или не ставят вовсе, если узлы не делят критичные нагрузки. Согласую рантайм: куча JVM через MaxRAMPercentage, --max-old-space-size для Node, GOMEMLIMIT для Go, и число потоков под лимит CPU. HPA считает процент от requests, так что заниженные requests дадут лишнее масштабирование. Дальше пересматриваю по метрикам, VPA в режиме рекомендаций помогает, а LimitRange в namespace задаёт разумные значения по умолчанию.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.