понедельник, 4 марта 2019 г.

Контейнеры LXD - краткий обзор


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

LXD (или LinuX container Daemon) - это менеджер контейнеров или некое подобие гипервизора.
Хотя если быть более точным - это демон с набором различных удобных утилит.
Кроме этого, предоставляется репозиторий образов самых часто используемых дистрибутивов Linux (https://uk.images.linuxcontainers.org/) и неплохой REST API. Среди них можно найти как полновесные centos и ubuntu, так и легковесный alpine (размером пару мегабайт).
При этом очень удобно то что и локальная работа, и удаленная (да, можно установить LXD на удаленном сервере и затем подключиться к нему и управлять контейнерами по сети) ничем не отличается и единообразна.







Проект этот относительно новый, первый релиз LXD вышел в 2015 году.
Но разработка ведется настолько активно, что новые версии с новыми фичами выходят буквально каждый месяц.
На момент написания этой заметки последний стабильный релиз 3.10, если устанавливать пакет из snap https://snapcraft.io/lxd

К слову, проект LXD финансируется и разрабатывается компанией Canonical, что обещает ему неплохое будущее.


Основые фичи LXD

  • Безопасность (не просто голословное утверждение, контейнеры LXD непривилегированные, и даже недавний нашумевший баг https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736 не затронул LXD)
  • Неплохая масштабируемость (на обычном ноуте можно запустить полтысячи контейнеров и это будет нормально работать, очевидно что с полной виртуализацией такое невозможно)
  • Кластеризация (любое количество LXD инстансов можно объединить в один кластер, который будет использовать одну распределенную БД)
  • Репозиторий образов (образы автоматически обновляются каждый день, есть функция автообновления скаченных образов)
  • Снапшоты (в том числе создание снапшотов по расписанию, так же из любого снапшота можно создать новый контейнер)
  • Управление ресурсами (можно настраивать сколько памяти/CPU будет доступно контейнерам)
  • Проброс устройств (есть возможность подключать к контейнеру блочные устройства или например USB)
  • Сеть (идущий в комплекте сетевой мост, NAT и возможность проброса портов в контейнеры без использования iptables)
  • Хранилище (поддерживается широкий выбор бэкэнда для хранения контейнеров - от ZFS до LVM и BTRFS)

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

LXD и LXC

LXC (LinuX Containers) - это контейнерная система виртуализации (если можно так выразиться), которая действует в пределах одной операционной системы. Оверхед (накладные расходы) на создание контейнеров в таком случае небольшие, и ничто не мешает запускать их сотнями или даже тысячами. Что невозможно при использовании полноценной виртуализации, такой, как VMware/KVM/XEN/VirtualBox. LXC - это не какая-то отдельно стоящая технология. На самом деле, LXC работает на нескольких фичах ядра Linux. Это cgroups и namespaces.

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

LXD и Docker

Между ними очень много общего и многие не могут сразу разобраться в чём же между ними основные отличия.
А на самом деле отличий много, и технически и в идеологии.
LXD заточен на контейнеризацию всей ОС, а docker же - на контейнеризацию (или другими словами пакетирование) одного конкретно выбранного приложения со всеми его зависимостями.
Технически, LXD опирается на liblxc, а docker - на docker engine.
И да, внутри LXD контейнеров можно запускать docker контейнеры.

Документация

Официальная документация LXD (https://lxd.readthedocs.io) неплохая, хотя и не всегда успевает за новыми релизами с новыми фичами.
Но зато есть форум (https://discuss.linuxcontainers.org/) где на вопросы обычно отвечают сами разработчики и делают это хорошо.

Итоги

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

Комментариев нет:

Отправить комментарий