Контейнер 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/