|
||||||||||||||||||||||||||||||||||||||||||
LXD
Время создания: 09.03.2020 13:12
Автор: alensav
Текстовые метки: LXD
Раздел: !!LXD
Запись: alensav/MyTetra2/main/base/1583748774yvbycruag8/text.html на raw.githubusercontent.com
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
LXD ==================================== 1.Управление контейнерами с LXD: краткое введение Андрей Емельянов 16 августа 2016 Время чтения: 6 мин. Продолжаем наш цикл статей о контейнеризации. Если первые две статьи (1 и 2 ) были посвящены теории, то сегодня мы поговорим о вполне конкретном инструменте и об особенностях его практического использования. Предметом нашего рассмотрения будет LXD (сокращение от Linux Container Daemon), созданный канадцем Стефаном Грабе из компании Canonical. Имя создателя LXD хорошо известно в профессиональном сообществе: он также является одним из авторв другого популярного контейнерного решения — LXC. Собственно, LXD представляет собой надстройку над LXC, которая упрощает работу с контейнерами и добавляет широкий спектр новых возможностей. В рамках этой статьи мы ограничимся лишь кратким введением в LXD: сравним его с Docker, приведём инструкцию по установке и настройке, а также продемонстрируем базовые возможности управления контейнерами. LXD и Docker LXD — инструмент относительно новый: первая версия вышла в свет в 2014 году, когда Docker уже получил широкое распространение и хорошо зарекомендовал себя на практике. При этом cфера применения у двух инструментов совершенно разная: если Docker предназначен для запуска в контейнерах приложений, то LXD — для запуска полноценных операционных систем. С помощью LXD можно создавать даже не контейнеры в буквальном смысле этого слова, а легковесные виртуальные машины. Чтобы подчеркнуть этот момент и одновременно указать на отличие от других инструментов контейнеризации, авторы многих публикаций называют LXD словом lightvisor (на русский язык его уже переводят как «легковизор»). В публикациях Canonical отмечается, что LXD-контейнеры могут работать в 10 раз быстрее, чем традиционные виртуальные машины на базе KVM. В LXD предпринята попытка решить целый ряд проблем, с которыми приходится сталкиваться при работе с другими инструментами контейнеризации: продуман механизм динамического управления ресурсами, расширены возможности миграции контейнеров (в том числе и в режиме реального времени), устранены проблемы безопасности. По сравнению с Docker у LXD гораздо шире возможности переконфигурации контейнеров. LXD оснащён открытым API; имеются клиенты для различных языков программирования. Создан плагин для OpenStack , позволяющий управлять контейнерами с помощью клиента Nova. . Установка и настройка Здесь и далее мы будем описывать особенности работы c LXD на материале Ubuntu 16.04. В этой ОС LXD включён в официальные репозитории и устанавливается стандартным способом:
Стефан Грабе в своей статье рекомендует в качестве бэкенда для хранения контейнеров использовать файловую систему ZFS. Чтобы работать с ZFS, нужно установить соответствующие пакеты:
Если ZFS вам по тем или иным причинам не подходит, вы можете воспользоваться BTRFS или LVM (подробнее об этом см. здесь ).
Программа настройки задаст несколько простых вопросов, после чего всё будет сконфигурировано автоматически. Подробнее об особенностях настройки LXD можно прочитать в этой статье . Создание контейнера Все контейнеры в LXD создаются на базе образов. Образы можно получить как из локального, так и из удалённого репозитория. Просмотрим список доступных репозиториев:
Для первого знакомства с LXD вполне подойдёт локальный репозиторий (local). Запустим в контейнере ОС Ubuntu 16.04:
В результате выполнения этой команды LXD создаст на базе указанного образа контейнер и запустит его. Запустить в этом контейнере командную оболочку можно с помощью команды:
Если нужно просто создать контейнер, но не запускать его, достаточно выполнить команду:
Для последующего запуска и остановки контейнера используются команды lxc start и lxc stop. LXC предоставляет хорошие возможности для управления контейнерами «на лету». Вот так, например, можно поместить созданный на основном хосте файл внутрь контейнера:
Можно совершить и обратную операцию — загрузить файл из контейнера на основной хост
Можно и редактировать файлы в контейнере напрямую:
Основные команды для создания и запуска контейнеров мы уже рассмотрели; желающих узнать больше отсылаем к подробной статье Стефана Грабе. Управление ресурсами Управление изолированными окружениями немыслимо без контроля ресурсов: мы должны предоставить контейнеру достаточное количество ресурсов для работы и в то же время быть уверенными в том, что контейнер не будет потреблять лишних ресурсов, нарушая тем самым работу остальной системы. В LXD можно выделять контейнерам ресурсы при помощи специального набора команд:
Более подробно почитать об управлении ресурсами можно в этой статье . Просмотреть статистику потребления ресурсов для контейнера можно с помощью простой команды:
Работа со снапшотами В LXD имеется возможность создания снапшотов и восстановления контейнеров из снапшотов. Посмотрим, как это работает на практике (пример взят из интерактивного туториала LXD ). Внесём некоторые изменения в уже созданный нами контейнер container1:
Сделаем снапшот этого контейнера и назовём его, например, new:
Попробуем что-нибудь «поломать» в нашем первом контейнере:
Поcле этого запустим в нём в нём командную оболочку:
Выполним команду exit и вернёмся на основной хост. Восстановим работу контейнера container1 из снапшота:
Запустим командную оболочку в восстановленном контейнере:
Всё работает так же, как раньше! В приведённом выше примере мы рассмотрели так называемые stateless-снапшоты В LXD есть и другой тип снапшотов — stateful, в которых сохраняется текущее состояние всех процессов в контейнере. Со stateful-снапшотами связаны ряд интересных и полезных функций. Чтобы создавать stateful-снапшоты, нам понадобится установить программу CRIU (CheckPoint/Restore in Userspace). C её помощью можно сохранить текущее состояние всех процессов, а затем восстановить их хоть на текущей, хоть на другой машине.
После этого можно переходить к созданию снапшотов:
В некоторых ситуациях такие снапшоты могут оказаться очень полезными. Представим себе, например, что нам нужно перезагрузить сервер, на котором запущены один или несколько контейнеров. Чтобы после перезагрузки не запускать всё заново, а продолжить с прерванного места, достаточно выполнить:
На базе stateful-снапшотов реализован механизм «живой» миграции контейнеров, который пока что находится в несколько «сыром» состоянии. Заключение LXD представляет собой удобную систему управления контейнерами, обладающую целым рядом полезных функций. Надеемся, что проект LXD будет успешно развиваться и займёт достойное место в ряду современных инструментов контейнеризации. Естественно, в рамках одной статьи рассказать обо всех функциях LXD вряд ли возможно. Для желающих узнать больше приводим несколько полезных ссылок:
Андрей Емельянов 16 августа 2016 Теги: контейнеры |
||||||||||||||||||||||||||||||||||||||||||
Прикрепленные файлы:
|
||||||||||||||||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
|