Работа с LXC-контейнерами в Ubuntu Linux

HELP-ME-24.COM (Freelance Team), Черноусов Антон

LXC-контейнеры - один из методов контейнерной изоляции наиболее приближенный к понятию виртуальная машина Linux с минимальными издержками на обслуживание. Используется единая память хоста, единое ядро и при помощи cgroups. Механизм напоминает OpenVZ, но в отличие от OVZ может работать с современными ядрами.

Для установки системы контейнерной изоляции LXC, выполните следующую команду:

# aptitude install lxc lxc-templates

Рассмотрим основные команды для работы с контейнерами в консоли Linux.

Основы работы с LXC-контейнерами

Создание контейнера гостевой ОС:

Создание контейнера из шаблона посредством сборки минимального окружения идентичного системе хоста (занимает довольно много времени, так как производится сборка системы из пакетов в виртуальном окружении)

# lxc-create --name web-server -t ubuntu

  • -t - тип системы для контейнера
  • --name - имя контейнера (уникальное имя используемое в операциях управления контейнерами)

Создание контейнера путем загрузки образа из репозитария (быстро и ограничено только скоростью загрузки образа)

# lxc-create -t download -n test -- -d ubuntu -r trusty -a amd64 --name web-server-01

Получение списка контейнеров хост-системы и их текущего статуса:

# lxc-ls -f

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

Запуск контейнера:

# lxc-start --name web-server

Остановка контейнера:

# lxc-stop --name web-server

Удаление контейнера:

# lxc-destroy --name test

Подключение к консоли контейнера:

# lxc-attach --name web-server

Подключение осуществляется с учетными данными пользователя root. Обратите внимание, что по умолчанию для работы создается пользователь ubuntu с паролем ubuntu, а шаблон контейнера в свою очередь по умолчанию содержит sshd-сервер, поэтому обязательно смените пароль или вообще удалите пользователя ubuntu в целях обеспечения безопасности.

Некоторые особенности использования системы контейнерной изоляции LXC.

1. Контейнеры расположены в каталоге /var/lib/lxc/ файловая система контейнера находится в каталоге rootfs контейнера, а конфигурационным файлом является файл /var/lib/lxc/<Имя контейнера>/config.

Для включения режима автозапуска контейнера при старте хост системы в случае ее перезагрузки, в конфигурационный файл необходимо добавить следующие параметры:

lxc.start.auto = 1
lxc.start.delay = 5

  • lxc.start.auto - включает режим автостарта контейнера
  • lxc.start.delay - задержка запуска в секундах

2. В минимальном варианте контейнер идет без настроенной поддержки кодовой таблицы ru_RU.UTF-8, это вызывает ошибки вида:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "ru_RU.UTF-8",
LC_MONETARY = "ru_RU.UTF-8",
LC_ADDRESS = "ru_RU.UTF-8",
LC_TELEPHONE = "ru_RU.UTF-8",
LC_NAME = "ru_RU.UTF-8",
LC_MEASUREMENT = "ru_RU.UTF-8",
LC_IDENTIFICATION = "ru_RU.UTF-8",
LC_NUMERIC = "ru_RU.UTF-8",
LC_PAPER = "ru_RU.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.

Для устранения этой ошибки выполните следующую команду:

# locale-gen ru_RU.UTF-8

3. Сетевая подсистема по умолчанию настроена в режим сетевого моста с интерфейсом lxcbr0, автоматическое назначение сетевых адресов производится средствами dnsmasq. По умолчанию используется подсеть 10.0.3.0/24, для смены текущей подсети и имени интерфейса внесите соответствующие изменения в файл /etc/default/lxc-net:

LXC_BRIDGE="lxc-bridge"
LXC_ADDR="10.4.0.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.4.0.0/24"
LXC_DHCP_RANGE="10.4.0.2,10.4.0.200"
LXC_DHCP_MAX="198"

Вы также можете настроить сетевую подсистему lxc при помощи мастера конфигурирования вызываемого командой:

# dpkg-reconfigure -p medium lxd

Обязательно переконфигурируйте уже созданные контейнеры изменив файл config в каталоге /var/lib/lxc/<название контейнера>:

lxc.network.type = veth
lxc.network.link = lxc-bridge

Для изменения имени интерфейса для будущих контейнеров отредактируйте имя интерфейса в файле шаблона /etc/lxc/default.conf:

lxc.network.link = lxc-bridge

Для более сложных вариантов сетевая подсистема настраивается вручную.

Выделение IP-адресов производится автоматически средствами DHCP-сервера dnsmasq. Вы можете или полностью отключить управление сетевой подсистемой lxc отключив службу lxc-net или назначать статические адреса контейнерам. Для реализации второго варианта расскомментируйте в файле /etc/default/lxc-net строку:

LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf

Параметры статической адресаций прописываются в файле /etc/lxc/dnsmasq.conf, посредством указания параметра:

dhcp-hostsfile=/etc/lxc/dnsmasq-hosts.conf

Обратите внимание, что при указании связки имя -> ip-адрес используется не имя контейнера, а имя хоста в контейнерое прописанное в файле /etc/hostname. Файл dnsmasq-hosts.conf содержит пары значений "имя хоста - ip-адрес", например:

postgresql-server, 10.4.0.3
web-server, 10.4.0.2

Проверить назначенные контейнерам сетевые адреса можно командой lxc-ls -f, результат ее работы выглядит следующим образом:

NAME STATE AUTOSTART GROUPS IPV4 IPV6
postgresql-server RUNNING 1 - 10.4.0.3 -
web-server RUNNING 1 - 10.4.0.2 -

В файле dnsmasq-hosts можно указать любые параметры конфигурации демона dnsmasq, а не только привязку статического ip-адреса.

4. По умолчанию, работа с TUN/TAP интерфейсами в LXC заблокирована, следовательно попытка создать виртуальный интерфейс (например при запуске OpenVPN сервера или клиента) вызовет ошибку:

ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)

Для включения требуемого функционала, добавьте в конфигурацию контейнера (файл config контейнера) параметр:

lxc.cgroup.devices.allow = c 10:200 rwm

На стороне контейнера создайте требуемое блочное устройство выполнив последовательность команд:

mkdir /dev/net
mknod /dev/net/tun c 10 200
chmod 666 /dev/net/tun

Эту операцию требуется выполнять при каждом перезапуске хост-машины (можно добавить их в файл rc.local).

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий