Авторские статьи

LXD 2.0: Введение в LXD [1/12].


Первая, вводная статья от Стефана Грабера, который расскажет о диковинном звере LXD. Рекомендуется тем, кто отличает контейнер от виртуальной машины.

Что такое LXD?

Если кратко, то LXD - это демон, предоставляющий REST API для управления LXC контейнерами. Главная цель: предоставить схожий опыт взаимодействия, как при работе с виртуальными машинами под аппаратной виртуализацией, но только с использованием Linux контейнеров.

Как LXD соотносится с Docker/Rkt?

LXD фокусируется на системных контейнерах, которые ещё называют инфраструктурные контейнеры. То есть LXD манипулирует контейнерами с полноценной Linux системой внутри так же, как вы бы работали с системой, поставленной на чистое железо или в виртуальную машину. Традиционные системы управления конфигурациями и развёртывания приложений могут использовать LXD так же, как и в обычном использовании на физическом оборудовании, виртуальной или облачных средах.

В противоположность этому, Docker фокусируется на минималистичных, мимолётных контейнерах, которые обычно не обновляют или переконфигурируют, а вероятнее всего будут заменены целиком. Это делает Docker и подобные проекты ближе к механизму развёртывания приложений, чем к инструментам управления машинами.

Эти две модели не являются взаимоисключающими. Вы можете использовать LXD для предоставления полноценной Linux системы и ваши пользователи внутри контейнера могут с помощью Docker ставить нужный им софт.

Почему LXD?

Работа с LXC показала, что он обеспечивает прекрасным набором низкоуровневого инструментария и библиотеками для создания и управления контейнерами. Однако, такой инструмент не всегда дружественен к пользователю и требует от него много первоначальных знаний для понимания как это всё работает. Поддержание обратной совместимости со старыми контейнерами и методами развёртывания так же не даёт использовать некоторые настройки безопасности LXC по умолчанию и требует от пользователя ручной правки.

LXD - это попытка избавиться от перечисленных недостатков, к тому же LXD решает часть ограничений LXC в вопросах динамического ограничения ресурсов, миграции контейнера и эффективной миграции в режиме реального времени. LXD безопасен по умолчанию и больше ориентирован на пользователя.

Основные компоненты LXD.

Есть целый ряд компонент, из которых состоит LXD и они видны в структуре каталогов, в клиенте командной строки и в самом API.

Контейнеры. Containers.

Контейнеры LXD:

  • Файловая система (rootfs).
  • Список опций конфигурации, включая лимиты ресурсов. Опции безопасности, окружение и т.д.
  • Перечисление устройств типа дисков, сетевых интерфейсов.
  • Набор профилей для контейнера откуда наследуются конфигурации.
  • Некоторые свойства данного контейнера: архитектура, имя
  • Состояние при использовании CRIU.

Снимки. Snapshots.

Снимки контейнера неизменны в том смысле, что их нельзя вам модифицировать, кроме переименования, уничтожения или восстановления. Стоит отметить, что поскольку сохраняется всё состояние контейнера, то фактически вы обладаете концепцией 'stateful' снимков. Это даёт возможность откатить контейнер, включая состояние его CPU и памяти.

Образы. Images.

LXD основан на использовании образов. Все контейнеры созданы из образов. Образы обычно представляют собой какой-либо чистый Linux дистрибутив, подобно тем что вы используете в виртуальной машине или в облачных средах.

Возможно публиковать (publish) контейнер, делая из него образ, который уже используется локальными или удалёнными LXD хостами.

Образы однозначно идентифицируются своими sha256 хэшами и вы можете ссылаться, используя его целиком или часть. Так как набирать длинные хэши не удобно для пользователя, то каждый образ имеет свойства, помогающее его легко найти в хранилище. Псевдоним (alias) из уникальной строки пользователя может быть дан хэшу образа.

LXD идёт с 3 преднастроенными удалёнными хранилищами образов:

  • ubuntu: обеспечивает стабильными образами Ubuntu.
  • ubuntu-daily: обеспечивает дневными сборками Ubuntu.
  • images: сервер от сообщества с образами различных дистрибутивов Linux, созданные по upstream шаблонам.

Образы с удалённых серверов автоматически кэшируются демоном LXD и хранятся некоторое время, по умолчанию 10 дней. Дополнительно LXD автоматически обновляет используемые вами образы, если не указано иное, так что самая свежая версия образа доступна вам локально.

Профили. Profiles.

Профили предоставляют механизм определения конфигурации контейнера и доступных ему устройств в одном месте и возможность применять профиль к любому количеству контейнеров.

Контейнеры могут иметь несколько профилей, применённых к нему. При построении окончательной конфигурации, известной как expanded, профиля применяются в порядке определения, перекрывая-перезаписывая совпадающие опции и устройства. Любая локальная конфигурация применяется в конце, затирая абсолютно всё, что шло из профиля.

LXD идёт с 2 преднастроенными профилями:

  • default. Автоматически применяется ко всем контейнерам, если пользователь не укажет свой профиль. В настоящее время профиль делает только одну вещь - определяет eth0 для контейнера.
  • docker. Разрешает вложенность контейнеров (container nesting), делает запрос на загрузку нужных модулей ядра и нескольких устройств в контейнере.

Удалёнка. Remotes.

LXD - сетевой демон. Клиент командной строки позволяет общаться с несколькими удалёнными LXD серверами, а также серверами образов.

По умолчанию определены:

  • local: по умолчанию связь с локальным LXD демоном через unix сокет.
  • ubuntu: сервер со стабильными образами Ubuntu.
  • ubuntu-daily: сервер с дневными сборками Ubuntu.
  • images: сервер images.linuxcontainers.org.

Можно добавлять любое количество удалённых LXD хостов: анонимных в случае публичных серверов с образами или с аутентификацией для управления контейнерами.

Безопасность. Security.

Одним из аспектов при построении LXD было создание безопасных контейнеров, позволяющих запуск современных, немодифицированных Linux дистрибутивов.

Основные функции безопасности:

  • Kernel namespaces. LXD использует по умолчанию более безопасное пользовательское пространство имён (user namespace) в отличии от LXC (Непривилегированные контейнеры). Это позволяет гарантировать изоляцию действий в контейнере от системы-хоста. Вам доступна возможность сделать контейнер привилегированным, если вам это реально нужно.
  • Seccomp. Фильтры для потенциально опасных системных вызовов.
  • AppArmor. Дополнительные ограничения для mount, сокетов, ptrace и доступ к файлам. Ограничение межконтейнерного взаимодействия.
  • Capabilities. Предотвращение загрузки модулей ядра, изменение времени хост-системы и т.д.
  • CGroups. Ограничение использования ресурсов и защита хоста от DoS из контейнера.

Вместо того чтобы заставлять пользователя напрямую заниматься безопасностью через параметры, как это делается в LXC, в LXD реализован "конфигурационный язык", который абстрагирует большинство параметров, делая дружественный шаг к пользователю. Для примера, можно легко попросить LXD пробросить устройство хоста внутрь контейнера, без ручного вмешательства при создании major/minor номеров устройства и обновлении политик cgroup.

Связь в LXD защищается TLS 1.2 с ограниченным набором шифров.

REST API.

Всё в 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].

Дата последней правки: 2016-04-06 11:50:59

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта