-Поиск по дневнику

Поиск сообщений в eugene20237

 -Подписка по e-mail

 


LINUX: Настройка LXD

Четверг, 26 Января 2017 г. 23:45 + в цитатник
LXD - это более быстрый аналог OpenVZ. Работал над ней вот этот парниша:

Стефан Грабер (Stéphane Graber). И мне кажется, что он - молодец!

Базовая статья на хабре с которой я начинал: https://habrahabr.ru/company/selectel/blog/308208/
Базовые консольные команды и откуда лучше качать образы: https://linuxcontainers.org/lxd/getting-started-cli/
Сравнение файловых систем: https://github.com/lxc/lxd/blob/master/doc/storage-backends.md
Работа со снапшотапи: https://s3hh.wordpress.com/2016/05/08/using-lxd-snapshots/
Серия статей на русском (перевод): http://vasilisc.com/lxd-2-0-series
Оффициальная статья на сайте Убунту: https://help.ubuntu.com/lts/serverguide/lxd.html
Официальная документация по настройке: https://github.com/lxc/lxd/blob/master/doc/configuration.md
Статья по настройке сети: http://vasilisc.com/network-management-lxd-2-3
Статья по настройке сетевого моста: https://bayton.org/2016/05/lxd-zfs-and-bridged-networking-on-ubuntu-16-04-lts/
Статья по автостарт контейнеров: https://bitsandslices.wordpress.com/2015/08/26/autostarting-lxd-containers/
Способы проброса портов в контейнер: http://askubuntu.com/questions/749063/reach-lxd-container-from-local-network
Более интересные способы проброса портов: https://github.com/lxc/lxd/issues/1363
Утилита lxd-port-forward: https://dev.justinjudd.org/justin/lxd-port-forward
Отличный способ перенаправления портов через uPnP: http://bartsimons.me/lxc-lxd-port-forwarding-containers-using-upnp/

Полагаю, этого материала достаточно чтобы начать использовать LXD. А вот мои личные заметки по поводу LXD в Ubuntu 16.04.

0. Устанавливать lxd на свежий! Следующие шаги работают только со свежей версией lxd.
apt-get install software-properties-common
add-apt-repository ppa:ubuntu-lxc/lxd-stable
apt-get update
apt-get dist-upgrade
apt-get install lxd


1. Сам сервис lxd должен запускать через system.d, а не через init.d. Тогда при выключении хоста виртуальные машины будут также корректно выключаться - внутри контейнеров будет вызываться нечто вроде shutdown -h now с выполнением всех положенных скриптов. Чтобы так работало необходимо сделать следующее:

update-rc.d -f lxd remove
rm -f /etc/init.d/lxd
systemctl enable lxd.service
systemctl enable lxd-containers.service


2. Для настройки перенаправления портов используем эту статью. Делаем всё как в ней за исключением правки файла /usr/lib/lxd/lxd-bridge.start - его уже не существует в новой версии LXD. Вместо этого, переходим к моему пункту 3.

3. Контейнеры при этом НЕ должны запускаться автоматически. Это необходимо для настройки перенаправления портов через uPnP. Посему отключаем автозапуск машин:

lxc config set название_машины boot.autostart 0

Также мы должны сделать это:
systemctl disable linux-igd.service
update-rc.d -f linux-igd remove


Теперь автозапуск машин можно настроить в /etc/rc.local:

sleep 5
systemctl start linux-igd.service
lxc start название_машины
sleep 30
lxc exec cpa -- upnpc -a 10.10.128.2 8888 8888 tcp


Кроме того, мы тут запускаем сервис для uPnP (linux-igd), который будем использовать для проброса портов. А через 30 секунд после запуска машины выполняем ВНУТРИ её контейнера команду для проброса порта 8888 (первое число - порт на хосте, второе число - порт внутри контейнера). 10.10.128.2 - адрес сетевого интерфейса контейнера во внутренней сети LXD.

4. If you don’t want hard memory limit enforcement:
lxc config set my-container limits.memory.enforce soft

5. Increasing file and inode limits
Since it’s entirely possible we may in the future wish to run multiple LXD containers, it’s a good idea to already increase the number of open files and inode limits, this will prevent the dreaded “too many open files” errors which commonly occur with container solutions.

For the inode limits, open the /etc/sysctl.conf and add the following lines, as recommended by the LXD project:

fs.inotify.max_queued_events = 1048576
fs.inotify.max_user_instances = 1048576
fs.inotify.max_user_watches = 1048576


6. Статический IP можно назначить контейнеру примерно так:
lxc network device add template-yakkety eth0 nic nictype=bridged parent=lxdbr0 name=eth0
cat | lxc config set template-yakkety raw.lxc - << EOF
lxc.network.0.ipv4 = 144.217.33.2/24
lxc.network.0.ipv4.gateway = 144.217.33.1
EOF

template-yakkety - это имя контейнера.
А вот другой путь и мне кажется, что он проще!
Но всё это ненадёжно и глюкаво, поэтому сам Стефан рекомендует вот что:
"The recommendation is that you configure the distribution in the container to have a static IP.
On Ubuntu/Debian, that's done through /etc/network/interfaces
LXC does support setting those for you from outside the container, but most distributions will then fail to boot or will just unset that preset data."

7. Собственные контейнеры нужно создавать привилегированными:
lxc config set имя_контейнера security.privileged true
Иначе будет неизменяемое ограничение по количеству открытых файлов в контейнере и ещё какая-нибудь хрень.
Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку