На предыдущих версиях 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/
Добавить комментарий