Статья по докладу о CPU Limits в Kubernetes объясняет их влияние на производительность контейнеров. Автор разбирает концепцию CPU Requests и Limits, их связь с cgroups v2 и даёт рекомендации по использованию.
Самое главное ниже 👇
CPU Requests задают минимально гарантированное процессорное время для контейнера, а CPU Limits — максимальное.
Limits ограничивают использование процессора в "окне" 100 мс (например, при лимите 0.4 ядра контейнер получит 40 мс из 100 мс). Это реализуется через cgroups v2 в Linux, которые управляют распределением ресурсов.
Проблемы с CPU Limits:
Для приложений, чувствительных к задержкам, throttling критичен: могут не сработать
liveness probes, пропуститься heartbeat-события, увеличиться задержка ответа.Даже при низкой загрузке процессора (например, 50%) контейнер может троттлиться из-за многопоточности или ошибок в ядре Linux.
Как работает throttling:
Если задаче нужно 200 мс процессорного времени, но у вас лимит 0.4 (40 мс на 100 мс), то 160 мс придётся ждать новых "окон". Итог: задача займёт 440 мс вместо 200 мс, так как 60 мс в каждом окне — это простой. Throttling (замедление) возникает, даже если у узла есть свободные ресурсы.
Когда использовать CPU Limits:
⚪️ Нужно: в редких случаях, например, для пакетных задач (
batch jobs), где задержки некритичны, или если есть баг в приложении, из-за которого оно потребляет слишком много CPU.⚪️ Не нужно: для большинства приложений, особенно чувствительных к задержкам (веб-серверы, базы данных). Лучше полагаться на
CPU Requests, чтобы гарантировать минимум ресурсов без искусственного замедления.Рекомендации:
➖ Устанавливайте только CPU Requests, чтобы гарантировать минимум ресурсов без троттлинга.
➖ Если Limits всё же нужны, делайте их значительно выше Requests (например, в 2–3 раза), чтобы учесть пиковые нагрузки.
➖ Регулярно мониторьте метрики и корректируйте настройки, особенно при росте нагрузки.
➖ Проверяйте логи приложений на увеличение времени обработки запросов.
➖ Обновляйте ядро Linux до версий без багов CFS (Completely Fair Scheduler), которые могут вызывать лишний троттлинг.
@DevOpsKaz 😛
