Контейнер LXC показывает полный объем оперативной памяти хоста и количество процессоров

Я использую контейнеры LXC в течение нескольких лет и недавно расширил типы приложений, которые работают внутри контейнерных сред.

Я начинаю ограничивать ресурсы на уровне контейнера с помощью параметров конфигурации, таких как:

lxc.cgroup.cpuset.cpus                 = 16-23
lxc.cgroup.memory.limit_in_bytes       = 30720M
lxc.cgroup.memory.memsw.limit_in_bytes = 32768M

Я работаю с разработчиком, который использует инструмент "настройки" ( pgtune) для создания конфигурации базы данных Postgres, которая будет работать внутри среды LXC. Этот инструмент более старый и не совсем поддерживает VM или контейнер. Это делает рекомендации по размеру на основе ОЗУ видимыми для системы.

Именно тогда я понял, что просмотр всей оперативной памяти хост-системы (96 ГБ) видим для экземпляра контейнера в некоторых случаях может быть вредным.

Есть ли обходной путь для этого, или это просто дано при использовании LXC?

2 ответа

Решение

В настоящее время proc файловая система не "осведомлена о контейнере" в пространствах имен монтирования, поэтому инструменты, основанные на ее логике, будут получать значения, связанные с хостом, а не значения, связанные с контейнером.

Но работа находится в стадии разработки, она называется lxc-fs, и здесь доступно несколько выпусков. Это обходной путь в пользовательском пространстве, который сделает возможным монтирование привязки /proc чтобы все было согласованно внутри контейнера.

Там, кажется, нет никакого способа обойти это. LXC использует cgroups для ограничения ОЗУ, а инструменты, не поддерживающие виртуализацию, читают такую ​​статистику, как /proc/meminfo который не содержится в LXC и будет выводить общий объем оперативной памяти в системе. Вы можете увидеть это поведение с free или же top а также при запуске внутри контейнера.

Источник: http://fabiokung.com/2014/03/13/memory-inside-linux-containers/

Другие вопросы по тегам