tgoop.com/devopsslib/3482
Last Update:
🤔 Динамический расчёт ресурсов CPU в k8s
Контейнеры едят CPU как подростки пиццу: сначала вяло, потом жадно, потом — «а где ещё?». И вот вы сидите, смотрите на график использования — кто-то недогружен, кто-то перегрет, а бюджеты летят в трубу. Разберёмся как рассчитывать выделение ресурсов динамически.
Три подхода к динамическому расчёту CPU для контейнеров
Если приложение стабильно использует 0.5 CPU, логично задать лимит в 0.625, чтобы 80% этого значения приходилось на реальную загрузку.
✅ Простой и понятный подход.
❌ Неясно, насколько увеличивать ресурсы, если контейнер начинает использовать 100% — особенно если это происходит часто.
Для более гибкого поведения при высоких нагрузках можно использовать формулу:
new_request = current_request * (actual_usage / 0.8)^2
При достижении 100% загрузки, ресурсы увеличиваются не линейно, а экспоненциально. Это позволяет:
✅ Быстрее реагировать на рост нагрузки.
❌ Требует вычислений и точного контроля за логикой перерасчёта. Повышается сложность реализации.
Вместо анализа только текущей загрузки CPU, отслеживаются показатели давления на процессор (например,
cpu_throttled_seconds_total
или node_cpu_pressure
). При их росте можно автоматически увеличивать ресурсы.✅ Ориентируется на реальную потерю производительности, а не просто на высокий usage.
❌ Подход зависит от поведения конкретного приложения. Не все нагрузки отражаются через throttling одинаково. Необходимо тестирование и калибровка.
Делитесь как вы выделяете ресурсы, в частности CPU, в kubernetes 👇