Оглавление
LXC-контейнеры совместимы с файловыми системами ZFS, Btrfs и томами LVM. При размещении контейнеров на хранилищах такого типа, будут использоваться их встроенные средства для создания моментальных снимков и даже задействована дедупликация (ZFS).
В случае, если хранилище контейнеров находится на томе с файловой системой Btrfs, средства администрирования LXC-контейнеров, будут создавать, логический подтом (subvolume) для каждого нового контейнера. Подобная ситуация и с LVM. В качестве хранилища может быть указанна группа томов (volume group) в которой автоматически будет создан логический раздел для создаваемого экземпляра ОС. Явно задать тип хранилища можно с помощью ключа -B. Вот как выглядит создание нового контейнера на этих хранилищах:
$ sudo lxc-create -t ubuntu -n u001 -B Btrfs
после выполнения команды, можно увидеть новый, одноименный под-том (subvolum) Btrfs:
$ sudo Btrfs subvolume list /var/lib/lxc_x000D_ _x000D_ ID 256 gen 17 top level 5 path u001/rootfs
создать контейнер на LVM можно следующим образом:
$ sudo lxc-create -t ubuntu -n u001 -B lvm --vgname <имяГруппыТомов> --fssize 5G --fstype <типФайловойСистемы>
В качестве имени LV будет использовано имя контейнера, что удобно.
Что касается ZFS, то она не особо поддерживается в современных дистрибутивах Linux. Например, ее установка в Ununtu, не простая задача. По этой причине, я не стал ее использовать. На мой взгляд, использование Btrfs для хранения контейнеров, является самым оптимальным выбором. Это даст возможность использовать снапшоты максимально удобно без каких либо сложностей как в случае с LVM.
Создание снимков
Для управления моментальными снимками, предназначена утилита lxc-snapshot. Здесь, самым главным недостатком, является то, что при создании снимка, контейнер должен быть остановлен. То есть на лету, сделать снапшот не получиться. LXC не умеет сохранять состояние процессов и содержимое памяти в файл, по этому, снимок — это всего лишь копия файловой системы контейнера. Возможно, в будущем, ситуация изменится к лучшему.
Чтобы сделать снимок остановленного контейнера необходимо выполнить:
$ sudo lxc-snapshot -n u001
Созданные снимки помещаются в /var/lib/lxcsnap/<имяКонтейнера> под именами вида snap0, snap1 и так далее.
Посмотреть список доступных снимков можно добавив ключ -L
$ sudo lxc-snapshot -n u001 –L
В ответ система выдаст на экран что то подобное:
snap0 (/var/lib/lxcsnaps/u-001) 2014:02:04 17:12:12
snap1 (/var/lib/lxcsnaps/u-001) 2014:02:04 18:02:34
Откатиться к одному из них:
$ sudo lxc-snapshot -n u001 -r snap0
Так же, можно создать новый контейнер из снимка:
$ sudo lxc-snapshot -n u001 -r snap0 u002
Удалить снимок, поможет опция -d
.
Клонирование
Как и в случае со снимками, клонировать можно лишь остановленный контейнер:
$ sudo lxc-clone -o <существующийКонт.> -n <новыйКонт.> -B Btrfs
Ключ —Bнеобходим, чтобы новому контейнеру был создан под-том, если используется Btrfs. Ключ -s (—snapshot) задействует механизм снапшотов файловой системы, вместо полного копирования, в результате чего, клонирование происходит мгновенно.
Существует возможность создавать связанные клоны (overlayfs).
$ sudo lxc-clone -o <существующийКонт.> -n <новыйКонт.> -B Btrfs
В этом случае, будет создан новый контейнер u001-test, который будет использовать файловую систему u001, а все изменения будут сохраняться в специальном дельта-каталоге. Этот вариант позволяет сэкономить дисковое пространство, особенно в случае с большими экземплярами, с не значительными потерями производительности.
$ sudo Btrfs subvolume list /var/lib/lxc_x000D_ ID 256 gen 17 top level 5 path u001/rootfs_x000D_ ID 259 gen 16 top level 5 path s001/rootfs
при клонировании, в новом контейнере будет изменено имя системы и MAC-адреса сетевых интерфейсов. Данный механизм очень удобен и позволяет быстро развернуть множество однотипных экземпляров ОС.
Автозапуск контейнеров
Если необходимо, что бы некоторые или все контейнеры автоматически запускались при старте хост-системы, необходимо в их конфигурационных файлах определить несколько ключей.
Фото dekorexpert.ru.
lxc.start.auto = 0 или 1 (авто-включение активно и не активно соответственно)
lxc.start.delay = 0 (задержка в секундах)
lxc.start.order = 0 (произвольное числовое значение приоритета. чем выше значение, тем раньше запускается контейнер)
Эти параметры, можно задать в конфигурационном файле по умолчанию что бы не прописывать вручную в каждой машине.
Помогла ли вам статья?