понеділок, 27 січня 2014 р.

LXC 1.0: Хранилище контейнеров

Статья 5 из 10, в которой речь пойдёт об LXC: виды хранилищ, используемые пути, клонирование и снимки.

Хранилища.

LXC поддерживает различные хранилища (storage backends - backingstore). По умолчанию используется none, обозначая место контейнера как /var/lib/lxc/имя-контейнера/rootfs/. Но можно переопределить хранилище в утилитах lxc-create или lxc-clone с помощью ключа -B.

Хранилище на базе каталога (none и dir).

Это хранилище используется по умолчанию и контейнер будет находиться в /var/lib/lxc/имя-контейнера/rootfs/. Опция --dir при использовании -B dir позволит указать свой каталог для создания там контейнера.

btrfs.

С этим backingstore LXC создаст новый подтом (subvolume) для контейнера, что позволит легко делать снимки (snapshots) средствами btrfs.

lvm.

LV может быть установлен --lvname (по умолчанию имя контейнера).
VG может быть установлен --vgname (по умолчанию lxc).
Файловая система может быть установлена --fstype (по умолчанию ext4).
Размер может быть установлен --fssize (по умолчанию 1 Гб).
Для использования LVM thinpools --thinpool.

overlayfs.

Используется в основном при клонировании контейнера, создавая копию другого контейнера и сохраняя изменения от оригинала в виде overlay.

Создавая контейнер через lxc-create, мы получим обычный контейнер, но изменения после первоначального образа будут сохраняться в delta0 каталоге.

zfs.

Подобно btrfs, использование zfs позволит применять возможности, но уже ZFS: подтом (subvolume) для контейнера, быстрое создание снимков и клонов, более эффективное использование места на диске за счёт дедупликации.


Стандартные пути.

LXC обычно использует:

  • /var/lib/lxc/ - дефолтное место для контейнеров.
  • /var/lib/lxcsnap/ - дефолтное место снимков.
  • /var/cache/lxc/ - дефолтное место для кэша шаблонов.
  • $HOME/.local/share/lxc/ - дефолтное место для непривилегированных контейнеров.
  • $HOME/.local/share/lxcsnap/ - дефолтное место для непривилегированных снимков.
  • $HOME/.cache/lxc/ - дефолтное место для непривилегированного кэша шаблонов.

Дефолтный путь, называемый lxcpath, может быть переопределён в командной строке ключом -P или навсегда через
lxcpath = /новый/путь
в /etc/lxc/lxc.conf или $HOME/.config/lxc/lxc.conf для непривилегированных контейнеров.

Если вы переопределяете lxcpath, то каталог снимков snap добавляется к lxcpath и магическим образом за ним следует. Кэш шаблонов, к сожалению, жёстко вшит и не просто его сменить. Дефолтная конфигурация для всех контейнеров находится в /etc/lxc/default.conf и нет эквивалента для непривилегированных контейнеров. Шаблоны операционных систем хранятся в /usr/share/lxc/templates/

Клонирование контейнеров.

Каждое хранилище по своему облегчает возможности клонирования контейнера.

Создадим копию p1 под именем p4, где -o (--orig) и -n (--new)
sudo lxc-clone -o p1 -n p4

Мы создали простую копию контейнера методом полного копирования файлов, что на некоторых файловых системах может занять приличное время. Допустим, мы не собираемся сильно изменять копию p1, тогда можно использовать клонирование так:
sudo lxc-clone -o p1 -n p1-test -B overlayfs -s

Мы получим клон p1 по имени p1-test, который будет использовать rootfs p1 и малейшие изменения будут сохраняться в каталоге delta0 у p1-test. Ключ -s (--snapshot) позволит использовать возможности создания снимков btrfs, zfs, LVM вместо полного копирования.

Создание снимков.

Рассмотренное выше клонирование является хорошим и удобным инструментом и отлично подходит в среде разработки программистов, когда контейнеры клонируются и уничтожаются за ненадобностью. Но в производстве гораздо полезнее снимки для создания резервных копий или для страхования перед опасными изменениями.

В LXC есть утилита lxc-snapshot, которая позволяет создавать, выводить список, восстанавливать и удалять снимки контейнеров. Тут нужно сделать замечание о том, что только в версии LXC 1.0 стало возможно использовать так же хранилища на основе каталога (none и dir). До версии 1.0 снимок получался пустой.

Представим для примера, что у нас есть контейнер p1-lvm и мы хотим поставить apache2 и нужно подстраховаться. Делаем файл с комментарием и командуем

echo "before installing apache2" > snap-comment
sudo lxc-snapshot -n p1-lvm -c snap-comment

Можно подвериться и посмотреть - создался ли снимок? sudo lxc-snapshot -n p1-lvm -L -C

Теперь можно смело ставить Апач в контейнере. Если, гипотетически, что-то пошло не так, то можно откатиться назад: sudo lxc-snapshot -n p1-lvm -r snap0 или восстановить снимок как отдельный контейнер: sudo lxc-snapshot -n p1-lvm -r snap0 p1-lvm-snap0.

Новый контейнер p1-lvm-snap0 содержит рабочую копию p1-lvm как это было до изменений.


Предыдущая статья LXC 1.0: Более углублённое использование контейнера.
Следующая статья LXC 1.0: Безопасность.

Дополнительные материалы:
Серия статей LXC 1.0. от Стефана Грабера.
Btrfs в Ubuntu.
ZFS в Ubuntu.
Резервное копирование разделов с CloneZilla.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments