Перестаньте использовать CPU Limits в k8s

Перестаньте использовать CPU Limits в k8s
Photo by Jason Leung / Unsplash

Многие люди думают, что вам нужны ограничения по использованию ЦПУ на Kubernetes, но это не так. В большинстве случаев, ограничения по использованию ЦПУ на Kubernetes только вредят. Фактически, они являются одной из главных причин ограничения использования ЦПУ на Kubernetes.

Ограничения по CPU в Kubernetes - это антипаттерн

Многие считают, что в Kubernetes необходимы ограничения по CPU, но это не так. В большинстве случаев ограничения по CPU в Kubernetes больше вредят, чем помогают.

Я объясню, почему ограничения по CPU вредны, используя три аналогии между подами, испытывающими нехватку CPU, и жаждущими исследователями, заблудившимися в пустыне. Давайте назовем наших отважных исследователей Маркусом и Терезой.

В наших историях CPU будет водой, а нехватка CPU будет означать смерть. Как и CPU, вода в нашем рассказе будет возобновляемым ресурсом. Простыми словами, если у вас 100% использования CPU в определенную минуту, это не "исчерпывает" CPU на следующую минуту. CPU возобновляется в каждый следующий момент времени.

Три красочные аналогии о лимитах CPU в Kubernetes

Маркус и Тереза путешествуют по пустыне. У них есть волшебная бутылка с водой, которая производит 3 литра в день. Каждому человеку нужен 1 литр в день, чтобы выжить.

История 1 - без лимитов, без запросов: Маркус жадный и выпивает всю воду до того, как Тереза успеет выпить. Тереза умирает от жажды. Это произошло из-за отсутствия лимитов и запросов. Маркус мог выпить всю воду, вызвав нехватку CPU, и Тереза была ограничена в использовании CPU.

История 2 - с лимитами, с или без запросов: Однажды Терезе становится очень плохо, и ей нужно дополнительно воды. Маркус выпивает свой литр, и остается два литра. Тереза пьет один литр, и остается один литр. Маркус не позволяет Терезе выпить его, потому что ее лимит составляет 1 литр в день, и она умирает от жажды. Это происходит, когда есть лимиты CPU. Ресурсы доступны, но их нельзя использовать.

История 3 - без лимитов, с запросами: Однажды Маркусу становится очень плохо, и ему нужно дополнительно воды. Он пытается выпить всю бутылку, но его останавливают, когда остается только 1 литр. Этот литр сохраняется для Терезы, потому что ей нужен 1 литр в день. Она пьет свой 1 литр. Ничего не остается. Они оба выживают. Это происходит, когда у вас нет лимитов CPU, но есть запросы. Все в порядке.

Вышеуказанные истории удивительно точно объясняют, почему лимиты CPU считаются вредными.

Не нравятся аналогии? Я написал более техническое объяснение этого, объясняя предупреждение Prometheus о троттлинге CPU, CPUThrottlingHigh.

Предотвращение троттлинга CPU и нехватки CPU без лимитов

Многие люди считают, что для предотвращения взаимного влияния одного пода на другой под необходимы лимиты. Это не так! Вы можете удалить лимиты CPU в Kubernetes и всё равно предотвратить ситуацию, когда ресурсоемкий под может вызвать нехватку CPU! Секрет заключается в определении только запросов CPU.

Вот фрагмент из оригинальной документации Kubernetes:

Важная часть выделена. Поды всегда получают CPU, указанный в их запросах CPU! (Они также могут использовать избыточный CPU, если у них нет лимита.)

Отключите лимиты CPU! Если вы укажете точные запросы CPU для всех ваших подов в Kubernetes, то никто не сможет ограничивать их, потому что CPU будет зарезервирован для них, если им это нужно. Это не имеет ничего общего с лимитами.

Запросы против Лимитов в Kubernetes

Давайте суммируем разницу между лимитами и запросами CPU в таблице:

Я понимаю, что мы упрощаем сценарий и предполагаем, что либо все поды имеют лимиты CPU, либо ни один из них их не имеет, и аналогично для запросов CPU, то это действительно облегчает логику управления ресурсами в Kubernetes. Этот подход делает все проще для понимания причин.

Лучшие практики для лимитов и запросов CPU в Kubernetes

Давайте подведем итог:

  • Используйте запросы CPU для всех подов (если вам нужна помощь в их настройке, обратитесь к KRR).
  • Убедитесь, что они точно определены.
  • Не используйте лимиты CPU.
  • Тим Хокин (один из оригинальных сопровождающих Kubernetes в Google) рекомендует то же самое уже несколько лет.

А что насчет лимитов и запросов памяти?

Все в этой заметке касается CPU, а не памяти. Память отличается, потому что она несжимаема - после предоставления памяти вы не можете ее отнять без завершения процесса. Кратко говоря, нашей основной рекомендацией является:

  • Всегда использовать лимиты памяти.
  • Всегда использовать запросы памяти.
  • Всегда устанавливать запросы памяти равными лимитам.

Ссылка на оригинал статьи

Read more

Самохостинг (часть 2) - Динамический роутинг на Keenetic

Самохостинг (часть 2) - Динамический роутинг на Keenetic

Допустим у нас есть роутер Keenetic. Нам нужно, чтоб некоторые сайты грузились через поднятый на нем туннель (это может быть Wireguard, L2TP или даже банальный Socks5 proxy). Например, нас забанил Youtube по нашему внешнему IP адресу 😉, но мы все равно хотим его смотреть, да не на телефоне, а на нормальном

Самохостинг - стиль жизни

Самохостинг - стиль жизни

Я тут и тут писал про свой домашний сервер, но нигде не упоминал, что есть еще один сервер в ДЦ, где хостятся сайтики и кучка еще разных сервисов. Да и времени прошло с момента написания тех статей не мало. Сервер тот остался в другой стране и, как результат, все, что

Мониторинг долгих запросов PostgreSQL в Prometheus

Мониторинг долгих запросов PostgreSQL в Prometheus

Предположим, что у вас есть PostgreSQL (AWS RDS или классический PostgreSQL server), Prometheus, postgres exporter и alertmanager с Grafana. Стоит задача присылать уведомления о том, что в Postgres подвис запрос. Причина и т.п. нас мало интересует. Нужно просто сказать всем, кому положено, что есть проблема и ее нужно решить.

Почему я всё ещё люблю Fish Shell

Почему я всё ещё люблю Fish Shell

В 2017 году я написала о том, как сильно люблю Fish Shell, и спустя 7 лет ежедневного использования, я нашла ещё больше причин для восхищения. Поэтому решила написать новый пост, где соберу старые и новые причины моей любви к этой оболочке. Сегодня я задумалась об этом, потому что пыталась понять,