Установка и настройка LXC на Debian 8

от автора

На предыдущих версиях Debian я успешно использовал технологию виртуализации OpenVZ. Она меня полностью устраивала, несмотря на наличие некоторых спорных моментов. На Debian 8 Jessie установка этой технологии не шла ни под каким соусом. Позже мои догадки о невозможности существования OpenVZ на Debian 8 и старше нашли свое подтверждение на toster.ru. Там же была предложена альтернатива — LXC, что я и решил попробовать.

Кратко опишу способ установки и настройки LXC на Debian Jessie.

Установку LXC будем делать традиционным способом – из репозиториев.

Пока всё просто:

apt-get install lxc lxctl lxc-templates 

Далее, наша задача создать виртуалки в той же сети, что и хост-машина. Адрес хост-машины: 192.168.0.10, виртуалки 192.168.0.11-192.168.0.20. Создадим виртуальный сетевой интерфейс и настроим мост. Для этого понадобится пакет bridge-utils:

apt-get install bridge-utils 

Производим манипуляции с сетевым интерфейсом. Лучше это проделывать непосредственно на терминале хост-машины.
Комментируем текущую конфигурацию сети в /etc/networks/interfaces:

# allow-hotplug eth0 # iface eth0 inet dhcp 

Добавляем настройки моста туда же:

auto br0    iface br0 inet static     bridge_ports eth0     bridge_fd 0     bridge_hello 2     bridge_maxage 12     bridge_stp off     address 192.168.0.10     netmask 255.255.255.0     gateway 192.168.0.1     broadcast 192.168.0.255 

Далее настраиваем мост:

brctl addbr br0 ifconfig eth0 down brctl setfd br0 0 brctl addif br0 eth0 ifconfig eth0 0.0.0.0 up ifconfig bdr0 192.168.1.2/24 up route add default gw 192.168.1.1 

Данный этап настройки крайне важен. Так как создав виртуалку, связь с внешним миром она может получить только через сетевой мост. После всех изменений можно ребутнуться и убедиться, что все сетевые интерфейсы поднялись как надо.

#ifconfig br0       Link encap:Ethernet  HWaddr 3c:d9:2b:0c:26:91           inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0           inet6 addr: fe80::3ed9:2bff:fe0c:2691/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:4424607 errors:0 dropped:0 overruns:0 frame:0           TX packets:7829837 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:268042187 (255.6 MiB)  TX bytes:11251410291 (10.4 GiB)  eth0      Link encap:Ethernet  HWaddr 3c:d9:2b:0c:26:91           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:4509932 errors:0 dropped:0 overruns:0 frame:0           TX packets:8137429 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000           RX bytes:475678060 (453.6 MiB)  TX bytes:11302104498 (10.5 GiB)           Interrupt:18  lo        Link encap:Local Loopback           inet addr:127.0.0.1  Mask:255.0.0.0           inet6 addr: ::1/128 Scope:Host           UP LOOPBACK RUNNING  MTU:65536  Metric:1           RX packets:122 errors:0 dropped:0 overruns:0 frame:0           TX packets:122 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:11992 (11.7 KiB)  TX bytes:11992 (11.7 KiB) 

Теперь наш основной интерфейс br0, и он будет прокидывать все пакеты на наши виртуалки. Создаем виртуалки. Я не стал мудрить с дисковыми квотами, дав всем виртуалкам всё свободное место в разделе.

lxc-create -t debian -n test_01 

Создается виртуалка в /var/lib/lxc/<имя контейнера>

Там же лежит config. Заходим в него и правим сетевые настройки.

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

# тип сети виртуальной машины lxc.network.type = veth # включаем контейнеру сеть lxc.network.flags = up # обозначение сетевого интерфейса в контейнере lxc.network.name = eth0 # его "пара" в хост-машине lxc.network.veth.pair = veth-01 # интерфейс для связи с внешним миром lxc.network.link = br0 # шлюз lxc.network.ipv4.gateway = 192.168.0.1 # MAC адрес виртуалки lxc.network.hwaddr = 00:16:3e:6b:c7:5b # IP и именно в таком виде для создания корректной маски lxc.network.ipv4 = 192.168.0.11/24 

Далее, пробуем запустить виртуалку:

lxc-start -n test_01 

Данная команда запускает контейнер и сразу делает login в неё. Пользователю предлагается ввести имя пользователя и пароль к виртуалке. Пароль создается во время первого запуска виртуалки и показывается на экране. Важно не забыть его записать! Но даже если забыли, можно сбросить пароль из хост-машины командой:

chroot /var/lib/lxc/<имя виртуалки>/rootfs 

затем:

passwd 

ввести новый пароль. И возвращаемся в хост-машину:

exit 

Чтобы запустить контейнер не входя в него, используем команду:

lxc-start -n test_01 –d 

Остановить:

lxc-stop –n test_01 

Если по каким-то причинам контейнер не запустился, можно включить лог командой:

lxc-start --logfile=/var/log/lxc.log -d -n test_01 

Если всё прошло удачно и контейнер запустился, то на хост-машине можно увидеть сетевой интерфейс без IP с именем, указанным в конфиге контейнера.

veth-01   Link encap:Ethernet  HWaddr fe:2b:3a:ea:60:3f           inet6 addr: fe80::fc2b:3aff:feea:603f/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:21888 errors:0 dropped:0 overruns:0 frame:0           TX packets:83943 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000           RX bytes:1688238 (1.6 MiB)  TX bytes:65591423 (62.5 MiB) 

Далее можно проверить связь, пропинговав виртуалку и зайти в неё через консоль. С хост-машины в неё можно зайти командой:

lxc-console -n test_01 

Выйти из консоли можно, нажав сочетания «Ctrl+a» и затем «q». Просмотр всех виртуалок:

lxc-ls –f 

Для удобства управления и мониторинга можно установить LXC Web Panel:

wget https://lxc-webpanel.github.io/tools/install.sh -O - | bash 

После того, как установится, можно зайти на неё, набрав в браузере your_ip_address:5000/. Логин admin, пароль admin. Для периодического обновления web-панели используем команду:

wget https://lxc-webpanel.github.io/tools/update.sh -O - | bash 

Вывод

Данная система виртуализации на первый взгляд кажется несколько неудобной в настройке, но мне она понравилась из-за своей лаконичности и простоты использования. Когда надо поднять и протестировать какой-то сервис, но при этом не хочется забивать мусором боевой сервер, LXC – подходящее решение. Изучив эту технологию, я вижу в ней довольно широкие возможности по настройке и перспективы проекта в будущем.

PS: Надеюсь, данная статья не даст наступить на одни и те же грабли и сэкономит время тем, кто решит попробовать LXC в качестве системы виртуализации на уровне операционной системы.

Статьи, которые вдохновили и помогли в написании этого топика:

Наш опыт тестирования LXC (Linux Containers) на примере Debian Wheezy
http://xgu.ru/wiki/LXC
lxc — нативные контейнеры Linux

ссылка на оригинал статьи http://habrahabr.ru/post/271537/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *