Сложная терминология в некоторых темах, касающихся IT, иногда заводит в тупик. Простой и понятный процесс может быть описан очень комплексным языком, из-за чего, даже после изучения темы, могут остаться вопросы. Это касается и контейнеризации. В рамках этой темы ответим на вопрос - в чем разница между LXC, LXD и LXCFS.
О LXC
LXC (Linux Containers) представляет собой интерфейс в пользовательской среде, функция которого - сдерживать ядро Linux. Имея в активе эффективный API и набор простых инструментов, LXC дает пользователю возможность администрировать любые использующиеся контейнеры.
Важные характеристики
Текущая версия LXC задействует ряд функций ядра, чтобы обеспечить контейнеризацию следующих процессов:
- namespaces (ipc, uts, mount, pid);
- профиль AppArmor (та же SELinux);
- правила Seccomp;
- Chroots (задействуя pivot _root);
- потенциал ядра;
- группы контроля (CGroups).
Как правило, контейнеры LXC обычно воспринимаются пользователями как нечто усредненное между Chroot и VM. Эта технология нацелена на то, чтобы создать среду, аналогичную стандартно установленной Linux, но сделать это без необходимости в дополнительном ядре.
Компоненты
Ниже в списке, несколько актуальных компонентов LXC:
- liblxc;
- языковые привязки для AP (Python (2 и 3 ), Lua, Go, Ruby, Haskell);
- стандартные инструменты администрирования контейнеров;
- готовые варианты контейнеров;
LXD - решение для LXC
LXD (Linux Container Daemon) является базирующимся на LXC гипервизором контейнеров.
Основные части LXD:
- системный daemon (lxd);
- клиент LXC;
- плагин (nova-compute-lxd);
REST API предоставляется демоном в локальном или сетевом режиме. Эффективная утилита управления, клиент командной строки, отличается своей интуитивностью и простотой. Именно с помощью него реализовано управление каждым контейнером. Клиент обрабатывает подключение одновременно к разному количеству контейнеров, отображает уже созданные и создает новые. Есть возможность их перемещения в процессе функционирования.
Упомянутый плагин “превращает” все LXD-host в вычислительные узлы, которые работают для поддержки контейнеров, а не VM.
Преимущества
Основные преимущества LXD:
- обеспечение безопасности (контейнеры не обладают привилегированностью, ресурсы ограничиваются и так далее.)
- любой масштаб использования;
- интуитивность (простое управление через ввод в командной строке);
- образ-ориентированность (использование надежных образов, вместо шаблонов);
- возможность активной миграции;
Связь с LXC
LXD не является новой версией LXC, скорее, он использует ее как базу. Чтобы администрирование контейнеров стало еще проще, LXD задействует LXC, влияя на библиотеку последней. Также во взаимодействии участвует прослойка, написанная на Go. Таким образом, LXD является, по сути, альтернативой LXC с расширенными возможностями (отличный пример - управление через сеть).
LXCFS: настройка контейнеризации
LXCFS - это небольшая архитектура файлов в среде пользователя, которая способна оптимизировать работу ядра Linux.
LXCFS включает в себя:
- файлы, которые монтируются над оригинальными аналогами и предоставляют CGroup-совместимые значения;
- дерево cgroupfs, функционирующее в независимости от контейнеров.
Архитектура представляет из себя простой код, созданный в C. Задача, которую необходимо было решить - запуск контейнера systemdпод базовым пользователем с параллельным запуском systemd внутри контейнера, с целью взаимодействовать с cgroups.
Если говорить простым языком, цель создания этой архитектуры - ощущение активного контейнера, как независимой системы.
Так в чем же разница?
Сравнивать LXC, LXD, LXCFS не имеет смысла, так как они не представляют из себя 3 разных продукта с одинаковым функционалом. Грубо можно описать их как программу, дополнение к ней и патч, который позволяет среде пользователя адаптироваться под ее нужды.