Когда речь идёт о виртуализации, то нельзя не сказать о гипервизоре. Hypervisor, неожиданно для вас, это hyper и visor. Hyper = сверх. Visor = директор или художественный руководитель. Получаем, что гипервизор - это важнейший компонент конкретной системы виртуализации, который дирижирует гостевыми операционными системами. Но есть контейнеры, которые "легче" виртуализации и там нет эмуляции аппаратуры, поэтому разработчики контейнерной технологии стали активно внедрять в английском сегменте Интернета слово lightervisor. Вот от этих разработчиков в лице Стефана Грабера и предлагается вашему вниманию статья о LXD - контейнерном лёгковизоре.
Последние 6 месяцев Серж Халлин (Serge Hallyn), Тихо Андерсен (Tycho Andersen), Чак Шорт (Chuck Short), Райн Харпер (Ryan Harper) и Стефан Грабе (Stéphane Graber) активно работали над проектом LXD.
Ubuntu 15.04, который выйдет 23 апреля 2015 года, будет обладать в своих репозиториях LXD 0.7. Хоть это и первые шаги данной технологии, но для экспериментов она готова. Для производственного использования ещё нужно потрудиться над ней.
LXD - Linux Container Daemon. Произносить LXD следует как lex-dee. LXD это то, что мы называем лёгковизор. Ядром LXD является демон, который предлагает API REST для управления контейнерами подобно виртуальным машинам. LXD запущен на каждом хосте где будут обслуживаться контейнеры и с клиентской машины есть возможность перемещать контейнеры с хоста на хост.
Есть 2 способа:
Последний бесшовно интегрируется в инфраструктуру OpenStack и позволяет управлять контейнерами подобно виртуальным машинам.
LXC за 7 лет своего развития превратилась из кучки ограниченных инструментов для изоляции чуть лучше чем chroot в стабильный набор инструментов, стабильную библиотеку и активное сообщество пользователей и разработчиков.
За эти годы было добавлено много дополнительных фичей безопасности в ядро линукс и LXC их поддерживает. Всё это время разработчики видели интерес людей к данной технологии и решили создать LXD на плечах LXC, с открытым API и набором привязок для языков программирования (bindings).
Разработчики давно хотят сделать несколько больших изменений:
К сожалению, решение каких-либо вышеперечисленных пунктов сделает резкие изменения в LXC, что может поломать работу существующих решений на базе LXC или заставит, как минимум, переосмыслить многие вещи. LXD - это возможность начать с чистого листа. Мы оставим LXC как отличный низкоуровневый менеджер контейнеров и сделаем LXD поверх него, используя LXC API. Это позволит взять лучшее из двух миров: будет использоваться низкоуровневый контейнерный менеджер с его API и привязками, но пропущены его инструменты и шаблоны, которые будут заменены новыми возможностями LXD.
LXD базируется на LXC и находится на его вершине. Используется LXC API, чтобы с помощью REST API скрыть детали работы и дать пользователю более простой и надёжный механизм. LXD фокусируется на контейнерах с системами (system container managers), то есть внутри работает полноценная операционная система на базе линукс. С точки зрения дизайна LXD не волнует что работает в контейнере.
Это отличает LXD от Docker или Rocket, которые позиционируют себя как менеджеры приложений-в-контейнере (application container managers). Но нет ничего плохого в использовании LXD для создания полноценного контейнера, который будет ограничен в ресурсах по вашему требованию и в рамках безопасности, а потом использовать любой механизм дистрибьюции приложений.
Самый простой способ попробовать LXD на своём ноутбуке или десктопе это использование инструмента командной строки.
Для Ubuntu 15.04 (более ранние через ppa:ubuntu-lxc/lxd-stable) нужно установить sudo apt-get install lxd
. Нужно перелогиниться в систему, чтобы вступили в силу новое членство в группе, или вызовите newgrp lxd
. Теперь вы сможете взаимодействовать с установленным демоном LXD.
Команда lxc позволит взаимодействовать с одним или несколькими LXD, но по умолчанию идёт работа только с локальными. Для упрощения первого старта вы можете добавить публичный LXD сервер https://images.linuxcontainers.org:8443
Это сервер, хранящий только образы и доступный только для чтения. Вы можете получить список образов, хранящиеся на нём, скопировать себе интересующий вас образ и запустить его в контейнере.
lxc remote add images images.linuxcontainers.org
lxc image list images:
lxc launch images:ubuntu/trusty/i386 ubuntu-32
"remote" начинает указывать на "images" сервера images.linuxcontainers.org. Затем вы смотрите список на сервере, который выведет ASCII таблицу
+--------------------------------+--------------+--------+-------------------------+---------+-------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | UPLOAD DATE | +--------------------------------+--------------+--------+-------------------------+---------+-------------------------------+ .... урезано ... | | 38c6f4023504 | yes | Ubuntu vivid (amd64) | x86_64 | Apr 21, 2015 at 4:23am (MSK) | | | 443d7b9bf265 | yes | Ubuntu vivid (amd64) | x86_64 | Apr 21, 2015 at 7:29am (MSK) | | ubuntu/vivid/amd64 (1 more) | 98ea382481a2 | yes | Ubuntu vivid (amd64) | x86_64 | Apr 22, 2015 at 7:33am (MSK) | | | d2600080b23a | yes | Ubuntu vivid (armhf) | armv7l | Apr 21, 2015 at 4:26am (MSK) | | | 1e561e64e326 | yes | Ubuntu vivid (armhf) | armv7l | Apr 21, 2015 at 9:21am (MSK) | | ubuntu/vivid/armhf (1 more) | 807147633e0c | yes | Ubuntu vivid (armhf) | armv7l | Apr 22, 2015 at 9:21am (MSK) | | | 4e151bc29e97 | yes | Ubuntu vivid (i386) | i686 | Apr 18, 2015 at 7:46am (MSK) | | | 8e548325920b | yes | Ubuntu vivid (i386) | i686 | Apr 21, 2015 at 4:29am (MSK) | | ubuntu/vivid/i386 (1 more) | 601c71f01332 | yes | Ubuntu vivid (i386) | i686 | Apr 21, 2015 at 7:32am (MSK) | | | 0bc387046443 | yes | Ubuntu vivid (ppc64el) | ppc64le | Apr 21, 2015 at 4:32am (MSK) | | | 177a7b4a6fd2 | yes | Ubuntu vivid (ppc64el) | ppc64le | Apr 21, 2015 at 7:35am (MSK) | | ubuntu/vivid/ppc64el (1 more) | 679c7066f939 | yes | Ubuntu vivid (ppc64el) | ppc64le | Apr 22, 2015 at 7:37am (MSK) | +--------------------------------+--------------+--------+-------------------------+---------+-------------------------------+
Затем запускаете локально контейнер ubuntu-32, так как он будет скачан и запущен. Последующие старты контейнера будут мгновенными, так как образ уже будет храниться локально. Синтаксис "<remote name>:" используется повсеместно в lxc, если его не указывать, то будет подразумеваться local.
Так как есть запущенный контейнер с Убунту, то можно посмотреть статус и IP:lxc list
Больше деталей: lxc info ubuntu-32
Получить шелл внутри контейнера: lxc exec ubuntu-32 /bin/bash
Брать и класть файлы в контейнере:
lxc file pull ubuntu-32/path/to/file .
lxc file push /path/to/file ubuntu-32/
Остановить и удалить контейнер:
lxc stop ubuntu-32
lxc delete ubuntu-32
Вышеописанное не является полным руководством, так как простой старт показан на единственной машине. LXD раскрывается, когда вы удалённо манипулируете контейнерами на разных узлах: создаёте, перемещаете, копируете и так далее. LXD поддерживает живую миграцию, снимки, профили конфигурации, прокидывание устройств внутрь контейнера и многое другое. Вскоре будет по аналогии с циклом статей про LXC написан цикл статей о возможностях LXD. LXD очень юный проект, но его поддерживают разработчики LXC.
Больше информации на официальном веб сайте - linuxcontainers.org
Код и вопросы на ГитХабе - github.com/lxc/lxd
Обзор дизайна LXD и его API - github.com/lxc/lxd/tree/master/specs
LXD - новый и интересный проект. Это удивительная возможность сделать рывок в области контейнеров для систем (system containers), сделав много функций и предоставив отличный пользовательский опыт использования с непробиваемой безопасностью.
Уже 7 релизов у LXD с тысячами коммитов от 20 активных разработчиков - очень быстрый темп. Хотя остаётся реализовать много задумок до выхода релиза 1.0 в начале 2016 года. Но глядя на уже реализованное за 5 месяцев, разработчики уверены, что LXD за год расцветёт ещё краше.
Теперь пару слов от меня лично.
Разработчик Тихо Андерсен рассказывает о LXD.
Контейнеры, ящики, докеры, грузчики:
Canonical представила LXD.
Безопасны ли контейнеры LXC и Docker?
Docker в Ubuntu, Ubuntu в Docker.
Моя внедрённая система на базе KVM (проект ProxmoxVE) и программное хранилище Ceph.