Назад | Перейти на главную страницу

Правильный способ обращения с контейнерами LXC на БТРФ

Допустим, у нас есть один сервер с установленным lxc и контейнер lxc, используемый в качестве базового img. /var/lib/lxc/ubuntu_base. Для простоты забудем об изменениях конфигурации после копирования базового img.

некоторые люди Предлагаем использовать подтомы и снимки для создания новых контейнеров, но можно легко выполнить cp --reflink с аналогичными результатами.

Итак, каков правильный (или лучший) способ управления несколькими контейнерами?

Этот способ кажется лучшим, но такие команды, как lxc-destroy, не будут работать, так как он не сможет удалить каталог.

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1

Я не уверен, есть ли разница в производительности между этим или снимками

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1

редактировать:

Одна вещь, которую я видел с опцией reflink, заключается в том, что вы не можете удалить базовый контейнер, если другие работают, потому что /proc и /dev монтируются и никогда не меняются, ссылка всегда одна и та же. Но, кажется, помогает закрытие всех скопированных контейнеров.

Думаю, это зависит от размера вашего базового изображения. Я бы наверное lxc-create новый контейнер и использовать Salt / Puppet и т. д. для подготовки моих контейнеров и только lxc-clone для относительно больших контейнеров (например, dev-контейнеры с множеством установленных и настроенных инструментов).

Обратите внимание, что lxc-clone будет использовать то же хранилище резервных копий, что и исходный. Итак, чтобы использовать subvolume, вам нужно будет создать свои контейнеры с помощью "-B btrfs". Например:

lxc-create -B btrfs -n mycontainer -t ubuntu

Затем клонируйте его с помощью:

lxc-clone -s mycontainer mynewcontainer

Если вы используете zfs для хранения контейнеров, есть дополнительная --zfsroot вариант lxc-create, чтобы вы могли выбрать zpool, отличный от "tank" по умолчанию. Например:

lxc-create -B zfs --zfsroot=data/lxc

Делитесь и наслаждайтесь!

если вы будете использовать подтомы btrfs для lxc, вам нужно добавить опцию user_subvol_rm_allowed в твоем /etc/fstab. Пример, извлеченный из одного файла fstab:

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

эта опция позволит вам удалить подобъект, не будучи суперпользователем, только обычным пользователем. Эта возможность используется lxc, когда снимки входят в подтомы btrfs.

Я использую Ubuntu LTS 14 и просто запустил следующее (даже впервые), и это сработало как шарм:

lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1

Использование -s с lxc-clone сделает снимок, если резервное хранилище - btrfs (в вашем случае).

Подтвердите новый клон / снимки с помощью

lxc-ls -f
btrfs subvolume list /var/lib/lxc

Надеюсь, это поможет!