→
Перестаньте использовать CPU Limits в k8s (перевод)
Публичный пост для комнаты «Тех»
Тех
8 сентября 2023
265
Многие люди думают, что вам нужны ограничения по использованию ЦПУ на Kubernetes, но это не так. В большинстве случаев, ограничения по использованию ЦПУ на Kubernetes только вредят. Фактически, они являются одной из главных причин ограничения использования ЦПУ на Kubernetes.
Мой перевод статьи о том, почему использование CPU Limits в Kubernetes - не всегда хорошо.
Возможно у вас другое мнение - давайте обсудим. :)
Ох уж эти кликбейтные заголовки.
манипуляция, преувеличение и ложный посыл
вот это уже больше похоже на правду, действительно есть кейсы, когда CPU Limits могут навредить
Если у вас идеальный продукт в идеальном мире - не используйте лимиты.
Спасибо за перевод и приглашение к дискуссии.
На мой взгляд тема изначально холиварная, а выводы в статье не могут быть однозначны для всех случаев (при этом для узких кейсов справедливы)
Да, получают, потому что requests используются scheduler'ом для понимания на какой ноде запустить под с таким запросом. Scheduler проводит скоринг нод и если реквест подходит под доступные ресурсы на ноде он может быть на нее назначен. При этом получается что механизм реквестов никак не ограничивает под и гарантия получения CPU исходит из того что в теории для всех подов на ноде определены реквесты достаточные для предполагаемой нагрузки. Такой случай (не использовать лимиты) вполне реален когда целая нода предназначена для 1-2-3 жирных подов которым позволено утилизировать все на этой ноде их юзкейсом, при этом вероятность одновременных пиковых нагрузок на всех разом сведена к минимуму. Но если ноду делят десятки подов, это становится весьма рискованным мероприятием.
Зарезервирован только теоретически scheduler'ом при планировании, а после старта на ноде если другой такой же под без лимитов решить сожрать весь CPU кто гарантирует запрашиваемый нами CPU? Отсюда получается есть другой бест практис: сумма лимитов <= сумме ресурсов на ноде?
Да, общего с лимитами ничего нет. Реквесты - инструмент планирования, лимиты - инструмент ограничения.
Кажется что этот бестпрактис
должен звучать как: ИСПОЛЬЗУЙТЕ лимиты так, чтобы под их не достигал. А если произошел троттлинг, то это аномалия с которой нужно разбираться и искать причину.
А по памяти тоже очень спорный бест практис. Получается что для памяти все-таки лимиты необходимы, а для CPU можем их скипнуть (???)
Как и с CPU: реквесты - механизм планирования, лимиты - механизм ограничения после которых приходит OOM killer.
😱 Комментарий удален его автором...
CPU лимиты это как минимум еще важный механизм ограничения в случае запуска недоверенной нагрузки\внешних сервисов.
Доверяете ли вы настолько поставщикам софта (или зависимостям в вашем софте), чтобы дать теоретическую возможность использовать все доступные ресурсы ЦП на ноде и заафектить тем самым другую нагрузку.
Второй вопрос, как вы будете реагировать если под это сделает, вот сожрал он все доступные ему ресурсы по той или иной причине пойдете убивать его руками?
Ну и третий вопрос, это утилизация ресурсов - высокие реквесты, без лимитов в случае если поды ведут себя прилично, будет приводить к тому что условных 4 пода с реквестом в 2CPU будут полностью занимать ноду на 8 ядер, при этом реальная утилизация может быть и меньше одного. Но это вопрос паттернов нагрузки в вашей среде, где-то может и не так критично.