Первая, вводная статья от Стефана Грабера, который расскажет о диковинном звере LXD. Рекомендуется тем, кто отличает контейнер от виртуальной машины.
Если кратко, то LXD - это демон, предоставляющий REST API для управления LXC контейнерами. Главная цель: предоставить схожий опыт взаимодействия, как при работе с виртуальными машинами под аппаратной виртуализацией, но только с использованием Linux контейнеров.
LXD фокусируется на системных контейнерах, которые ещё называют инфраструктурные контейнеры. То есть LXD манипулирует контейнерами с полноценной Linux системой внутри так же, как вы бы работали с системой, поставленной на чистое железо или в виртуальную машину. Традиционные системы управления конфигурациями и развёртывания приложений могут использовать LXD так же, как и в обычном использовании на физическом оборудовании, виртуальной или облачных средах.
В противоположность этому, Docker фокусируется на минималистичных, мимолётных контейнерах, которые обычно не обновляют или переконфигурируют, а вероятнее всего будут заменены целиком. Это делает Docker и подобные проекты ближе к механизму развёртывания приложений, чем к инструментам управления машинами.
Эти две модели не являются взаимоисключающими. Вы можете использовать LXD для предоставления полноценной Linux системы и ваши пользователи внутри контейнера могут с помощью Docker ставить нужный им софт.
Работа с LXC показала, что он обеспечивает прекрасным набором низкоуровневого инструментария и библиотеками для создания и управления контейнерами. Однако, такой инструмент не всегда дружественен к пользователю и требует от него много первоначальных знаний для понимания как это всё работает. Поддержание обратной совместимости со старыми контейнерами и методами развёртывания так же не даёт использовать некоторые настройки безопасности LXC по умолчанию и требует от пользователя ручной правки.
LXD - это попытка избавиться от перечисленных недостатков, к тому же LXD решает часть ограничений LXC в вопросах динамического ограничения ресурсов, миграции контейнера и эффективной миграции в режиме реального времени. LXD безопасен по умолчанию и больше ориентирован на пользователя.
Есть целый ряд компонент, из которых состоит LXD и они видны в структуре каталогов, в клиенте командной строки и в самом API.
Контейнеры LXD:
Снимки контейнера неизменны в том смысле, что их нельзя вам модифицировать, кроме переименования, уничтожения или восстановления. Стоит отметить, что поскольку сохраняется всё состояние контейнера, то фактически вы обладаете концепцией 'stateful' снимков. Это даёт возможность откатить контейнер, включая состояние его CPU и памяти.
LXD основан на использовании образов. Все контейнеры созданы из образов. Образы обычно представляют собой какой-либо чистый Linux дистрибутив, подобно тем что вы используете в виртуальной машине или в облачных средах.
Возможно публиковать (publish) контейнер, делая из него образ, который уже используется локальными или удалёнными LXD хостами.
Образы однозначно идентифицируются своими sha256 хэшами и вы можете ссылаться, используя его целиком или часть. Так как набирать длинные хэши не удобно для пользователя, то каждый образ имеет свойства, помогающее его легко найти в хранилище. Псевдоним (alias) из уникальной строки пользователя может быть дан хэшу образа.
LXD идёт с 3 преднастроенными удалёнными хранилищами образов:
Образы с удалённых серверов автоматически кэшируются демоном LXD и хранятся некоторое время, по умолчанию 10 дней. Дополнительно LXD автоматически обновляет используемые вами образы, если не указано иное, так что самая свежая версия образа доступна вам локально.
Профили предоставляют механизм определения конфигурации контейнера и доступных ему устройств в одном месте и возможность применять профиль к любому количеству контейнеров.
Контейнеры могут иметь несколько профилей, применённых к нему. При построении окончательной конфигурации, известной как expanded, профиля применяются в порядке определения, перекрывая-перезаписывая совпадающие опции и устройства. Любая локальная конфигурация применяется в конце, затирая абсолютно всё, что шло из профиля.
LXD идёт с 2 преднастроенными профилями:
LXD - сетевой демон. Клиент командной строки позволяет общаться с несколькими удалёнными LXD серверами, а также серверами образов.
По умолчанию определены:
Можно добавлять любое количество удалённых LXD хостов: анонимных в случае публичных серверов с образами или с аутентификацией для управления контейнерами.
Одним из аспектов при построении LXD было создание безопасных контейнеров, позволяющих запуск современных, немодифицированных Linux дистрибутивов.
Основные функции безопасности:
Вместо того чтобы заставлять пользователя напрямую заниматься безопасностью через параметры, как это делается в LXC, в LXD реализован "конфигурационный язык", который абстрагирует большинство параметров, делая дружественный шаг к пользователю. Для примера, можно легко попросить LXD пробросить устройство хоста внутрь контейнера, без ручного вмешательства при создании major/minor номеров устройства и обновлении политик cgroup.
Связь в LXD защищается TLS 1.2 с ограниченным набором шифров.
Всё в LXD делается через REST API. Нет других способов взаимодействия между клиентом и демоном. REST API может быть доступен через локальный unix сокет, требуя только членства в группе для проверки подлинности, или через HTTPS, используя сертификат при аутентификации.
Структура REST API соответствует описанным выше компонентам, проста и понятна.
Когда требуется сложная схема взаимодействия, LXD может разговаривать через websockets. Это используется в интерактивной консоли, миграции контейнера и при уведомлениях о событии.
С LXD 2.0 идёт стабильный API 1.0, в рамках которого не будет нарушаться обратная совместимость. В будущем будут добавлены дополнительные расширения API.
LXD предоставляет хороший инструмент командной строки, но он не предназначен для управления тысячами контейнеров на множестве хостов. Для таких случаев используйте плагин nova-lxd в OpenStack, чтобы управлять контейнерами подобно виртуальными машинами. Это позволит вам воспользоваться уже OpenStack API для управления сетью, хранилищами, балансировкой нагрузкой и т.д.
Главный сайт LXD - linuxcontainers.org/lxd
Github - github.com/lxd
Почтовая рассылка - lists.linuxcontainers.org
IRC #lxcontainers irc.freenode.net
Оглавление цикла статей про LXD 2.0.
Следующая статья LXD 2.0: Установка и конфигурирование LXD [2/12].