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