Допустим, у нас есть один сервер с установленным 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
Я не уверен, есть ли разница в производительности между этим или снимками
cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
- или есть какой-то другой лучший способ сделать это, о котором я не знаю.
редактировать:
Одна вещь, которую я видел с опцией reflink, состоит в том, что вы не можете удалить базовый контейнер, если работают другие, потому что /proc
и /dev
смонтированы и никогда не меняются, так как ссылка всегда одинакова. Но закрытие всех скопированных контейнеров, кажется, помогает.
источник
Ответы:
Я на Ubuntu LTS 14 и только что запустил следующее (даже впервые), и это сработало как шарм:
Использование -s с lxc-clone сделает снимок, если резервным хранилищем является btrfs (в вашем случае).
Проверьте новый клон / снимки с
Надеюсь, это поможет!
источник
-s
опции, и что три последних (lxc_start, lxc_stop, lxc_snapshot) являются просто вспомогательный процесс для управления будущим развитием контейнеров. Это правильно?если вы будете использовать btrfs subvolumes для lxc, вам нужно добавить опцию
user_subvol_rm_allowed
в ваш/etc/fstab
. Пример, извлеченный из одного файла fstab:UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0
Опция позволит вам удалить subvol без прав root, только обычный пользователь. Эта возможность используется lxc, когда снимки идут в подобъемах btrfs
источник
Думаю, это зависит от того, насколько велик ваш базовый образ. Вероятно, я бы lxc-создал новый контейнер и использовал бы Salt / Puppet и т. Д., Чтобы подготовить свои контейнеры, и только lxc-clone для относительно больших контейнеров (например, контейнеров dev с множеством установленных и настроенных инструментов).
Обратите внимание, что lxc-clone будет использовать то же резервное хранилище, что и источник. Таким образом, чтобы использовать подобъем, вам нужно будет создать ваши контейнеры с "-B btrfs". Например:
Затем клонируйте его с помощью:
Если вы используете zfs для хранения своих контейнеров,
--zfsroot
для lxc-create есть дополнительная опция, так что вы можете выбрать zpool, отличный от «tank» по умолчанию. Например:Поделитесь и наслаждайтесь!
источник
-B btrfs
используется по умолчанию - я полагаю, потому что мой debian настроен с использованием BTRFS. На самом деле я создал свой первый контейнер (32-битный debian wheezy) без этой опции, и для него был создан подобъем.-B best
в действии, но приятно знать!