Вторая статья из цикла статей про LXD от Стефана Грабера (Stéphane Graber). Получим последнюю версию и сделаем первоначальное конфигурирование.
Есть много способов получить последнюю версию LXD. Рекомендуется использовать LXD с последними версиями LXC и ядра Linux, чтобы извлечь максимальную выгоду от всех возможностей, хотя для старых дистрибутивов разработчики стараются "деградировать изящно".
Новые релизы LXD заливаются в Ubuntu development репозиторий в течение нескольких минут после выхода релиза в upstream. Пакет из Ubuntu development становится основой для всех других пакетов, доступных Убунту пользователям. Если вы используете разрабатываемый релиз Ubuntu 16.04 (выход в апреле 2016), то можете просто скомандовать: sudo apt-get install lxd
Если вы используете Ubuntu 14.04, то можете поставить: sudo apt-get -t trusty-backports install lxd
Пользователям системы Ubuntu Core с технологией Snappy можно установить: sudo snappy install lxd.stgraber
Пользователи версий Убунту типа 15.10 могут воспользоваться следующим PPA:
sudo apt-add-repository ppa:ubuntu-lxc/stable
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install lxd
Последнюю версию LXD в Генту поставьте sudo emerge --ask lxd
Компиляция LXD из исходников не очень сложна, если вы знакомы с проектами Go. Обратите внимание, что вам будут нужны последние заголовочные файлы LXC. Прежде чем запускать LXD, вам понадобится ядро Linux старше 3.13, LXC старше 1.1.5, LXCFS и версия shadow с поддержкой uid/gid allocations. Актуальные инструкции по компиляции LXD из исходников вы можете найти в файле README.
LXD поддерживает несколько storage backend. Лучше вам заранее изучить их возможности ДО начала их использования, так как НЕ поддерживается перемещение существующих контейнеров или образов между backend.
Разработчики рекомендуют использовать ZFS для поддержки всех возможностей LXD, чтобы получить самый быстрый и надёжный опыт взаимодействия с контейнерами, включая квоты на "диск" контейнера, быстрое создание/восстановление снимков, оптимизированную миграцию (отправка/приёмка) и мгновенное создание контейнеров из образов. ZFS считается более зрелой чем btrfs.
Для использования ZFS с LXD нужно установить её в систему:
sudo apt-get install zfsutils-linux
sudo apt-get install zfsutils-linux zfs-dkms
sudo apt-add-repository ppa:zfs-native/stable
sudo apt-get update
sudo apt-get install ubuntu-zfs
Для конфигурирования LXD используйте sudo lxd init
Вам зададут несколько вопросов про конфигурацию zfs и настроят.
Если ZFS не для вас, то файловая система btrfs предлагает схожий уровень интеграции с тем исключением, что она не совсем корректно предоставляет информацию об использовании диска внутри контейнера. Btrfs отлично работает со вложенностью (nest), так что если вы планируете использовать LXD внутри LXD, то стоит приглядеться к btrfs. LXD не нуждается в дополнительной конфигурации для работы с btrfs. Сделайте /var/lib/lxd на разделе с btrfs и LXD автоматически будет использовать его для вас.
Если ZFS и btrfs не вариант для вас, то можете применять LVM. LXD использует LVM для выделения ресурсов, создавая LV для каждого образа или контейнера и используя LVM снимки при необходимости.
Для конфигурирования LXD для LVM создайте LVM VG и запустите lxc config set storage.lvm_vg_name "THE-NAME-OF-YOUR-VG"
По умолчанию LXD использует ext4 для всех LV. Вы можете указать при желании XFS так: lxc config set storage.lvm_fstype xfs
Если по ряду причин все вышеперечисленные варианты не подходят вам, то LXD будет работать. LXD будет создавать отдельный каталог под каждый контейнер, распаковывать тарбол образа при каждом создании контейнера и делать полное копирование файловой системы при создании копии контейнера или снимка. Все возможности вам будут доступны, кроме дисковых квот, но работать будет медленно и расточительно для дискового пространства хоста. Если у вас действительно нет другого выбора, то LXD будет работать, но вам реально нужно рассмотреть вышеперечисленные альтернативы.
По умолчанию LXD не слушает сеть. Единственный способ говорить с ним - через локальный unix сокет /var/lib/lxd/unix.socket. Для начала прослушивания сети вам понадобятся:
lxc config set core.https_address [::]
lxc config set core.trust_password some-secret-string
Первая инструкция предписывает LXD привязаться (bind) на все сетевые интерфейсы данной машины. Вы можете указать конкретные IPv4 или IPv6 адреса и указать другой порт (по умолчанию используется 8443).
Вторая инструкция устанавливает пароль, который используется удалёнными клиентами при добавлении себя в хранилище доверенных сертификатов LXD (certificate trust store). Когда клиент добавляет LXD хост, то ему будет предложено ввести пароль и если он введён корректно, то LXD сохранит сертификат клиента и будет ему доверять впредь, не требуя впоследствии пароля (это можно изменить или отключить клиента).
Вы можете выбрать путь без установки пароля и вручную удостоверять (trust) каждого нового клиента. Возьмите ~/.config/lxc/client.crt и добавьте его в trust store - lxc config trust add client.crt
Вам может понадобиться, чтобы LXD мог забирать образы с удалённых серверов. Если в вашей среде нужно проходить через HTTP(S) прокси, то можете использовать опции конфигурации LXD вместо стандартных переменных PROXY.
lxc config set core.proxy_http http://squid01.internal:3128
lxc config set core.proxy_https http://squid01.internal:3128
lxc config set core.proxy_ignore_hosts image-server.local
В примере мы указываем использовать ваш внутренний прокси squid01.internal, исключая обращения к image-server.local (на прямую).
LXD динамически кэширует образы. Когда вы требуете создать контейнер из удалённого образа, то он скачивается в ваше хранилище образов (image store), помечается как кэшируемый и используется. После нескольких дней использования (по умолчанию 10 дней) образ автоматически удаляется. Каждые несколько часов (по умолчанию 6 часов) LXD ищет новые версии ваших образов и обновляет локальную копию.
Всё можно настроить так:
lxc config set images.remote_cache_expiry 5
lxc config set images.auto_update_interval 24
lxc config set images.auto_update_cached false
В примере переопределяем дефолтные настройки. Кэширование образов выставили в 5 дней, поиск новых образов каждые 24 часа и обновлять образы только при указании флага --auto-update, без автоматического обновления кэшированных образов.
На данном этапе у вас есть рабочая версия последнего LXD, вы готовы начать самостоятельное изучение или подождать следующей статьи из серии, где мы создадим первый контейнер и поиграем командами LXD.
Главный сайт LXD - linuxcontainers.org/lxd
Github - github.com/lxd
Почтовая рассылка - lists.linuxcontainers.org
IRC #lxcontainers irc.freenode.net
Оглавление цикла статей про LXD 2.0.
Предыдущая статья LXD 2.0: Введение в LXD [1/12].
Следующая статья LXD 2.0: Ваш первый LXD контейнер [3/12].