Правильний спосіб роботи з контейнерами LXC на btrfs


11

Скажімо, у нас встановлений один сервер з lxc та контейнер lxc, який використовується як базовий img /var/lib/lxc/ubuntu_base. Для простоти забудемо зміни конфігурації після копіювання базового img.

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

То який спосіб проппер (або який краще) для управління кількома контейнерами?

  • знімки

Цей спосіб здається найкращим, але такі команди, як lxc-знищення, не працюватимуть, оскільки не зможуть видалити каталог.

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • cp з рефлексією

Я не впевнений, чи є різниця між продуктивністю між цим чи знімком

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • або Чи є інший кращий спосіб зробити це, про який я не знаю.

редагувати:

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


Я використовував функцію знімка btrfs для створення нових контейнерів - і вона працює добре (досить швидке надання тощо). Однак у btrfs є кеш сторінок на підшир - тому, хоча використання знімків є швидким / простором на диску, ви, швидше за все, матимете кілька копій того, що фактично є тим самим бінарним у пам'яті.
Девід Гудвін

Відповіді:


2

Я на 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-клоном зробить знімок, якщо резервним сховищем є btrfs (у вашому випадку).

Перевірте новий клон / знімки за допомогою

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

Сподіваюся, що це допомагає!


1
Зауважте, що в ці дні вам потрібно вказати btrfs як резервну сховище, коли ви запускаєте lxc-create або lxc-клон , замість цього ви отримаєте накладення .
Лестер Чеун

Щойно створити новий "легкий" контейнер, здається, що двох перших рядків достатньо (lxc-stop і lxc-клон), завдяки -sопції, і що три останніх (lxc_start, lxc_stop, lxc_snapshot) є лише допоміжний процес для управління майбутніми еволюціями контейнерів. Це правильно ?
lalebarde

3

якщо ви будете використовувати підрозділи btrfs для lxc, вам потрібно додати параметр user_subvol_rm_allowedу свій /etc/fstab. Приклад, витягнутий з одного файлу fstab:

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

опція дозволить видалити subvol без root, тільки звичайного користувача. Цю можливість lxc використовує, коли знімки надходять у підтомники btrfs


3

Здогадайтесь, це залежить від того, наскільки великий ваш базовий образ. Я, мабуть, lxc-створити новий контейнер і використовувати Salt / Puppet і т.д., щоб забезпечити свої контейнери і тільки lxc-клон для відносно більших контейнерів (наприклад, контейнери для розробників з великою кількістю інструментів, встановлених і налаштованих).

Зауважте, що lxc-клон буде використовувати той самий резервний запас, що і джерело. Тому для використання підтомника вам потрібно буде створити свої контейнери з "-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

Діліться та насолоджуйтесь!


Я на Debian хрипі з BTRFS. Здається, що параметр -B btrfsвикористовується за замовчуванням - я вважаю, що мій debian налаштований з BTRFS. Власне, я створив свій перший контейнер (32-бітну дебійн-хрип) без цієї опції, і для нього був створений підпункт.
lalebarde

@lalebarde, що, мабуть, -B bestдіє, але добре знати!
Лестер Чеун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.