Допустим, у нас есть один сервер с установленным 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
Надеюсь, это поможет!