Зачем отключать своп на кубернетес


35

Начиная с Kubernetes 1.8, кажется, мне нужно отключить своп на моих узлах (или установить --fail-swap-onна false).

Я не могу найти техническую причину, по которой Кубернетес настаивает на отключении свопа. Это из соображений производительности? Причины безопасности? Почему причина этого не задокументирована?

Ответы:


28

Идея kubernetes состоит в том, чтобы плотно упаковать экземпляры, чтобы использовать их как можно ближе к 100%. Все развертывания должны быть закреплены с ограничениями ЦП / памяти. Поэтому, если планировщик отправляет модуль на машину, он вообще не должен использовать своп. Вы не хотите менять местами, потому что это замедлит ход событий.

Это в основном для производительности.


2
Идея в том, что если у узла есть только 3 гигабайта, который можно использовать бесплатно, а ваш новый модуль хочет 4 ... он собирается перейти на другой узел.
— Майк

Это не имеет особого смысла для меня, конечно, вы могли бы упаковать свои узлы немного дальше, позволив операционной системе поместить некоторые редко используемые страницы памяти в swap, не нанося заметного ущерба производительности?
— Фредерик Бетенс

13

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

из этого выпуска

Поддержка свопа нетривиальна. Гарантированные стручки никогда не должны требовать обмена. Бустабильные стручки должны удовлетворять свои запросы без необходимости замены. Бобы BestEffort не имеют никаких гарантий. В настоящее время в кубеле не хватает умных способностей, чтобы обеспечить правильное количество предсказуемого поведения в разных стручках.


10

TL; DR неправильно использует swap, это просто ленивый хак, который демонстрирует плохое понимание подсистем памяти и отсутствие фундаментальных навыков системного администрирования. Проектирование инфраструктурных сервисов и непонимание этих систем обречено на провал.

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

Кроме того, ядро ​​Linux предназначено для использования подкачки, и полное его отключение будет иметь негативные последствия. Лучший способ справиться с этим - прикрепить модули в основную память и не позволять им переключаться на диск, снижать нагрузку на кэш vfs, чтобы она не менялась, если в этом нет крайней необходимости, и даже тогда вы могли бы вызвать закрепление процессов. Сбой MALLOC в случае исчерпания основной памяти.

В зависимости от процессов в контейнерах, в которых произошел серьезный сбой контейнера или его уничтожение убийцей OOM может привести к довольно катастрофическим последствиям. Однако я понимаю, что процессы, выполняемые в этих контейнерах, в идеале должны быть без сохранения состояния и эфемерными, но за 20 лет работы систем я ни разу не видел, чтобы все следовали намеченному замыслу буквально 100% времени.

Кроме того, это не учитывает будущие технологии, такие как энергонезависимая память, и более новые системы памяти, такие как Intel xpoint, которые можно использовать для значительного расширения основной памяти с использованием гибридных систем диск / память. В системах такого типа они могут использовать их непосредственно в качестве дополнительной основной памяти или использовать файлы подкачки для расширения основной памяти с незначительным влиянием на производительность.


2
Я очень сомневаюсь, что сторонники проекта kubernetes ленивы. Кажется, что ни один из указанных аргументов не входит в контекст контейнерной экосистемы, работающей в kubernetes.
— spuder

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.