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

LXD переносит контейнеры на новое хранилище с поддержкой

На моем хосте у меня Ubuntu 16.10:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.10
Release:    16.10
Codename:   yakkety

и я использую LXD из стабильного репо:

lxc --version
2.12

В настоящее время у меня есть несколько контейнеров, созданных с помощью DIR в качестве серверной части хранилища:

root@Ubuntu-1610-yakkety-64-minimal ~ # lxc storage show default
config:
  source: /var/lib/lxd/storage-pools/default
name: default
driver: dir
used_by:
- /1.0/containers/elasticsearch-internal
- /1.0/containers/yyy-dev
- /1.0/containers/yyy-pre-prod
- /1.0/containers/xxx-dev
- /1.0/containers/xxx-dev/snapshots/snap1
- /1.0/containers/mysql-dev
- /1.0/containers/mysql-dev/snapshots/snap01
- /1.0/containers/mysql-preprod
- /1.0/images/2cab90c0c342346ea154bc2e8cacdae752a70747a755ce1f2970c9a9ebb5fe8c
- /1.0/images/d51e7b34d5f470912bc45a6270278d7990b049d826e33dd8affe9b54aaf0d7ee
- /1.0/profiles/default

У меня также есть 2 жестких диска SATA III по 2 ТБ с зеркалированием ZFS:

root@Ubuntu-1610-yakkety-64-minimal ~ # zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
lxdstorage  1.81T   361M  1.81T         -     0%     0%  1.00x  ONLINE  -
  mirror  1.81T   361M  1.81T         -     0%     0%
    sdc      -      -      -         -      -      -
    sdd      -      -      -         -      -      -

Теперь, начиная с версии 2.12, LXD имеет новый API хранилища: lxd / хранилище-бэкэнд

Мне нужно переместить фактические контейнеры из DIR в хранилище ZFS. Что я сделал до сих пор, так это создание нового хранилища:

lxc storage create pool1 zfs source=lxdstorage/containers

root@Ubuntu-1610-yakkety-64-minimal ~ # lxc storage list
+---------+--------+------------------------------------+---------+
|  NAME   | DRIVER |               SOURCE               | USED BY |
+---------+--------+------------------------------------+---------+
| default | dir    | /var/lib/lxd/storage-pools/default | 11      |
+---------+--------+------------------------------------+---------+
| pool1   | zfs    | lxdstorage/containers              | 0       |
+---------+--------+------------------------------------+---------+

Как переместить контейнеры из default к pool1?

Прямого способа сделать это до сих пор нет (сегодня версия 2.14).

Обходной путь - остановить контейнер, опубликовать как изображение, удалить исходный контейнер и инициализировать его в новом пуле хранения:

lcx stop c1
lxc lxc publish -f c1 --alias c1
lxc delete c1
lxc init c1 c1 -s <new pool>
lxc start c1
lxc image delete c1

LXC Ручная миграция с dir: на zfs: backend на Debian Stretch

Я не мог найти способ в SE, который работал у меня, похоже, у меня нет опции публикации в debian lxc.

dpkg -l lxc 
#  1:3.1.0+really3.0.3-8 

Мои контейнеры живут в ext4 в / var / lib / lxc (установка по умолчанию), и они мне нужны в zfs в / tank / lxc / container

0) Остановите контейнер (ы):

lxc-stop mycontainer

1) Создайте файл /etc/lxc/lxc.conf - lxc подхватит его и работает из zfs. Если вы забыли остановить контейнер (как я), переместите файл, затем остановите контейнер и снова верните этот файл.

# /etc/lxc/lxc.conf
lxc.lxcpath = /tank/lxc/containers
lxc.bdev.zfs.root = tank/lxc/containers

2) Создайте наборы данных:

zfs create tank/lxc
zfs create tank/lxc/containers

3) Создайте новый контейнер с тем же именем (теперь он появится в zfs)

lxc-create mycontainer

Оказывается, mycontainer - это набор данных ZFS, который не смонтирован. Вы можете сначала запустить его, чтобы инициализировать, или вы также можете скопировать старую конфигурацию (MAC-адрес, автозапуск и что еще вы установили).

4) Второй набор данных, который вы здесь монтируете, на самом деле является rootfs контейнера (!)

zfs mount tank/lxc/containers
zfs mount tank/lxc/containers/mycontainer
# this is attaching on /tank/lxc/containers/mycontainer/rootfs 

5) синхронизировать старый рут с новым

rsync -av --delete /var/lib/lxc/mycontainer/rootfs/ /tank/lxc/containers/mycontainer/rootfs/

6) скопируйте конфиг, если он вам нужен

cp /var/lib/lxc/mycontainer/config /tank/lxc/containers/mycontainer/config

7) размонтируйте наборы данных и запустите свой контейнер из ZFS

zfs umount tank/lxc/containers/mycontainer
zfs umount tank/lxc/containers
lxc-start mycontainer

Повторите для всех - Удачного сдерживания ZFS!