Настройка LXC виртуализации в Ubuntu 14.04
В этой статье рассматривается настройка LXC версии 1.0.3 в Ubuntu 14.04 Server.
20 февраля 2014 года вышла 1-я версия Linux Containers (LXC). По сравнению с технологиями полной виртуализации (такими как VMware, VirtualBox, Hyper-V и т.д.) контейнер позволяет с меньшими накладными расходами изолировать процессы и ресурсы если они работают под управлением операционной системы одной версии. Linux Containers можно считать развитием других «контейнерных» технологий, таких как OpenVZ или Vserver. В отличие от них не требуется специальная версия ядра, что значительно расширяет возможности применения.
Установка
sudo apt-get install lxc
Создание и удаление LXC контейнера
Создадим контейнер с именем name
sudo lxc-create -t ubuntu -n name
Опция -t указывает на один из предопределенных шаблонов, которые находятся в каталоге /usr/share/lxc/templates. При создании контейнера этого типа будет создан пользователь ubuntu (пароль ubuntu), и добавлен в sudo группу.
У каждого из шаблонов могут быть свои параметры, список которых можно посмотреть командой
lxc-create -t ubuntu -h
Параметры передаются шаблону после ключа —, например так
sudo lxc-create -t ubuntu -n name -- -b username
Здесь опция -b задает имя пользователя хост-системы который будет связан с контейнером. В контейнер будет скопирована учетная запись и смонтирован домашний каталог. Пользователь будет автоматически попадать в контейнер при входе на хост-систему.
Файловая система контейнера находися в /var/lib/lxc/websrv/rootfs , конфигурация в файлах /var/lib/lxc/websrv/config и /var/lib/lxc/websrv/fstab.
По умолчанию используется файл конфигурации /etc/lxc/default.conf который определяет контейнеру один сетевой интерфейс подключенный к lxcbr0 мосту. Файл с другими настройками можно задать опцией -f.
При создании контейнера образ его файловой системы кэшируется. Для обновления используется опция -F.
Удалить созданный контейнер можно командой
sudo lxc-destroy -n name
Запуск и остановка контейнера
Запускается контейнер командой
sudo lxc-start -n name -d
Уберите опцию -d если хотите вывести консоль (/dev/console) контейнера на терминал. Опцией -c filename можно перенаправить консоль в файл. Для записи отладочной информации можно использовать такую команду
sudo lxc-start -o lxc.debug -l DEBUG -n name
При запуске в контейнере будет выполнен /sbin/init, если нужно выполнить другую программу укажите её в качестве аргумента, например
sudo lxc-start -n name /sbin/init loglevel=debug
Контролировать как запустился контейнер можно командами lxc-wait или lxc-monitor.
Чтобы настроить автоматический запуск контейнера во время загрузки хост-системы нужно добавить следующие строки в файл /var/lib/lxc/name/config
lxc.start.auto = 1 lxc.start.delay = 5
Вторая строка устанавливает паузу в 5 секунд перед стартом следующего контейнера.
Корректно остановить контейнер следующей командой
sudo lxc-stop -n name
По умолчанию процессу init будет отправлен сигнал SIGPWR. Если в течении 60 секунд контейнер не остановится, то будет отпрален SIGKILL для выхода. Опция -r позволяет перезагрузить контейнер, опция -k для немедленной принудительной остановки всех процессов и выхода.
В случае корректного выключения хост-системы контейнер будет пытаться корректно выключить работающие контейнеры.
Приостановить и потом продолжить работу всех процессов в контейнере можно следующими командами соответственно
sudo lxc-freeze -n name sudo lxc-unfreeze -n name
Команда lxc-kill может быть использована для передачи любого сигнала в программу initконтейнера.
Администрирование
Подключиться к свободной консоли контейнера можно командой
sudo lxc-console -n name
Выход из консоли осуществляется последовательностью Crtl + A потом Q. Параметром -t N можно выбрать номер дополнительной консоли. Количество консолей задается параметром lxc.tty в файле /usr/share/lxc/config/ubuntu.common.conf и обычно равно 4.
Посмотреть список контейнеров включая информацию о выполнении и об IP адресе можно командой
sudo lxc-ls -f
Список процессов выполняемых в контейнере можно получить командой
sudo lxc-ps -n name -- -ef
Команду lxc-cgroup можно использовать для управления параметрами контрольной группы контейнера.
Ограничить используемое дисковое пространство можно монтируя файловую систему контейнера в образ фиксированного размера (через loop) или на отдельный раздел диска.