OpenStack - это платформа, которая может вам помочь с созданием своего приватного облака. В своей работе OpenStack не привязывается к какому-то конкретному гипервизору и, на сегодняшний день, умеет создавать/запускать/останавливать KVM, VMware, Xen, Hyper-V и LXC. В этой одиннадцатой статье мы с помощью Стефана Грабера научимся использовать контейнеры LXD вместо виртуальных машин и самое потрясающее, что всё это будет внутри контейнера LXD, благодаря вложенности (nesting).
Подразумевается, что вы уже освоились с LXD, контейнеры можете вывести в сеть и ваш тестовый полигон достаточно мощный. Для развёртывания полного стека OpenStack вам не помешает мощный процессор, примерно 50 Гб дискового пространства и 16 Гб ОЗУ.
OpenStack состоит из различных компонентов, каждый занимающийся своим делом. Некоторым компонентам требуются дополнительные привилегии и, чтобы сделать нам жизнь проще, мы будем использовать привилегированные контейнеры.
Нужно сконфигурировать контейнер с поддержкой вложенности, обеспечить загрузку нужных модулей ядра и разрешить доступ к /dev/mem.
Напомню, что большинство фичей безопасности LXD будет для привилегированного контейнера отключено, но внутри его OpenStack будет создавать уже непривилегированные контейнеры и функционал безопасности будет на высоте.
lxc launch ubuntu:16.04 openstack -c security.privileged=true -c security.nesting=true -c "linux.kernel_modules=iptable_nat, ip6table_nat, ebtables, openvswitch"
lxc config device add openstack mem unix-char path=/dev/mem
Есть досадный баг в LXD, который исправлен в версии 2.5. LXD пытается подгрузить модули ядра, которые уже подгружены на хосте. Используйте обходной путь - lxc exec openstack -- ln -s /bin/true /usr/local/bin/modprobe
Нужно добавить парочку PPA и поставить conjure-up, инструмент развёртывания OpenStack.
lxc exec openstack -- apt-add-repository ppa:conjure-up/next -y
lxc exec openstack -- apt-add-repository ppa:juju/stable -y
lxc exec openstack -- apt update
lxc exec openstack -- apt dist-upgrade -y
lxc exec openstack -- apt install conjure-up -y
Последний штрих. Внутри контейнера нужно настроить сеть. На все вопросы отвечайте значениями по умолчанию, кроме:
lxc exec openstack -- lxd init
Теперь контейнер готов и можно приступить собственно к развёртыванию OpenStack.
Conjure-up - это очень приятный, удобный инструмент, который может взаимодействовать с JuJu для развёртывания сложных комплексов.
Начните с lxc exec openstack -- sudo -u ubuntu -i conjure-up
Теперь просто ждите, так как процесс может занять часы в зависимости от мощности вашего тестового полигона. В конце процесса вы увидите все сервисы, размещённые в своих контейнерах и связанные с друг другом.
После окончания развёртывания нужно сделать парочку полирующих шагов: импорт некоторых образов, настройка SSH аутентификации, настройка сети и получение IP dashboard.
Dashboard работает внутри контейнера и вам нельзя просто взять и подсоединиться к ней с помощью браузера. Самый простой способ настроить правило NAT так:
lxc exec openstack -- iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to _IP_
_IP_ - это IP адрес dashboard, который вы могли видеть в конце установки conjure-up. Теперь если вы возьмёте IP адрес контейнера (lxc info openstack), то сможете указать его в браузере в виде http://IP_container/horizon
В первый раз появление веб интерфейса может занять некоторое время, будьте терпеливы. Дождавшись появления входа в систему, введите дефолтный логин admin и пароль openstack.
Слева в Project -> Instance вы можете с помощью Launch instance выбрать желаемый образ операционной системы, настроить ей сеть и запустить её.
OpenStack очень сложный программный комплекс, который не предназначен для домашнего использования или запуска на единственном сервере. Но для обучения (развёртывания и использования) очень удобно использовать контейнер LXD. Conjure-Up отличный инструмент, который с помощью JuJu под капотом, так легко развёртывает такой сложный комплекс, создавая нужные LXD контейнеры вместо виртуальных машин или физических серверов. Данный пример развёртывания OpenStack как-никак лучше показывает замечательную возможность - вложенность контейнеров в друг друга.
Предыдущая статья LXD 2.0: LXD и Juju [10/12].
Серия статей про LXD.
Следующая статья LXD 2.0: Отладка и вклад в LXD [12/12].
Сотрудник Canonical в статусе Ubuntu Product Manager Дастин Киркленд (Dustin Kirkland) и разработчик LXD Тихо Андерсен (Tycho Andersen) показывают как создать очень быстрый OpenStack на контейнерах LXD вместо виртуальных машин.