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

LXD - контейнерный лёгковизор.


Когда речь идёт о виртуализации, то нельзя не сказать о гипервизоре. 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?

LXD - Linux Container Daemon. Произносить LXD следует как lex-dee. LXD это то, что мы называем лёгковизор. Ядром LXD является демон, который предлагает API REST для управления контейнерами подобно виртуальным машинам. LXD запущен на каждом хосте где будут обслуживаться контейнеры и с клиентской машины есть возможность перемещать контейнеры с хоста на хост.

Есть 2 способа:

  • инструмент командной строки по имени lxc.
  • плагин OpenStack Nova по имени nova-compute-lxd.

Последний бесшовно интегрируется в инфраструктуру OpenStack и позволяет управлять контейнерами подобно виртуальным машинам.

Почему LXD?

LXC за 7 лет своего развития превратилась из кучки ограниченных инструментов для изоляции чуть лучше чем chroot в стабильный набор инструментов, стабильную библиотеку и активное сообщество пользователей и разработчиков.

За эти годы было добавлено много дополнительных фичей безопасности в ядро линукс и LXC их поддерживает. Всё это время разработчики видели интерес людей к данной технологии и решили создать LXD на плечах LXC, с открытым API и набором привязок для языков программирования (bindings).

Разработчики давно хотят сделать несколько больших изменений:

  • Сделать LXC более безопасной по умолчанию, вместо опциональной.
  • Переделать инструментарий, чтобы они стали проще и менее запутаными для новичков.
  • Больше положиться на контейнерные образы, а не шаблоны при создании контейнера.
  • Более правильная поддержка состояний контейнера checkpoint и restore для живой миграции (live migration).

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

Как LXD соотносится с LXC, Docker, Rocket и другими проектами?

LXD базируется на LXC и находится на его вершине. Используется LXC API, чтобы с помощью REST API скрыть детали работы и дать пользователю более простой и надёжный механизм. LXD фокусируется на контейнерах с системами (system container managers), то есть внутри работает полноценная операционная система на базе линукс. С точки зрения дизайна LXD не волнует что работает в контейнере.

Это отличает LXD от Docker или Rocket, которые позиционируют себя как менеджеры приложений-в-контейнере (application container managers). Но нет ничего плохого в использовании LXD для создания полноценного контейнера, который будет ограничен в ресурсах по вашему требованию и в рамках безопасности, а потом использовать любой механизм дистрибьюции приложений.

Начало работы с 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 за год расцветёт ещё краше.


Теперь пару слов от меня лично.

  • Стефан Грабер является разработчиком LXC и LXD и поэтому его статья "Getting started with LXD – the container lightervisor" особенно ценна. Человек знает обе технологии и его слова на вес золота.
  • Я пробовал LXC в лабораторных условиях, НЕ в производстве, на этапах перевода цикла статей LXC и не сказал бы что LXC сложен. Но если LXD ещё упростит работу с контейнерами, то это здорово!
  • Хочется разжевать вам один момент в статье, который может показаться не понятным. Стефан пишет, что LXD хочет положиться на контейнерные образы, а не шаблоны. Речь идёт вот о чём. LXC поддерживает привилегированные и непривилегированные контейнеры. В привилегированных контейнерах UID=0 (root) в контейнере по-прежнему равен UID=0 вне контейнера в хосте. Это означает, что если каким-то образом получить доступ к ресурсам хоста через proc, sys или системные вызовы (syscalls), то потенциально можно сбежать из контейнера и стать root'ом в хосте. Настоящая безопасность гарантируется в непривилегированных контейнерах, где root внутри гостя отображается на UID и GID обычной учётной записи хоста. Но механизм ограничений непривилегированных контейнеров идёт с рядом ограничений, которые усложняют пользователю развёртывание системы из шаблона. Чтобы не требовать от пользователей знаний операционной системы был придуман шаблон download, который представлял собой инструкции не по разворачиванию чистой системы, а скачиванию готового образа этой конкретной системы. Эту систему развили и она будет приоритетной в LXD. Кратко говоря, проще скачать один раз нужный образ конкретной линукс системы, чем мучительно пытаться самому развернуть систему через шаблоны.
  • Мне чуток не понятно решение разработчиков LXD переопределить утилиту lxc. Более логично командовать демоном LXD, вызывая одноимённую команду lxd.

Разработчик Тихо Андерсен рассказывает о LXD.

Контейнеры, ящики, докеры, грузчики:
Canonical представила LXD.
Безопасны ли контейнеры LXC и Docker?
Docker в Ubuntu, Ubuntu в Docker.
Моя внедрённая система на базе KVM (проект ProxmoxVE) и программное хранилище Ceph.

Дата последней правки: 2015-06-18 13:34:24

RSS vasilisc.com   


Разделы

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