...

среда, 25 июня 2014 г.

[Из песочницы] Создание метода клонирования LXC-контейнеров

Создание основы файловой системы для контейнеров



Устанавливаем основные компоненты, которые понадобятся для создания общей файловой системы, командой:

$ apt-get install debootstrap lxc lxc-templates lxctl cgroup-lite rsync




Далее включим две управляющие опции.

В конфигурации сети включим сетевой мост для контейнеров:

$ nano /etc/init/lxc-net.conf
USE_LXC_BRIDGE="true"




А для автозапуска контейнеров при старте системы включим:

LXC_AUTO="true"




В файле lxc.conf, командой:

$ nano /etc/init/lxc.conf




Далее отредактируем конфигурационный файл:

$ nano /etc/default/lxc




И добавим в него следующие строки:

Введем переменную:

$ lxcRoot="/lxc"




Создадим каталог /lxc:

$ mkdir -p ${lxcRoot}




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

$ mkdir /${lxcRoot}/lxclib /${lxcRoot}/lxccache




Удалим старый каталог:

$ rm -rf /var/lib/lxc /var/cache/lxc




Создадим ссылки на каталоги:

$ ln -s /${lxcRoot}/lxclib /var/lib/lxc
$ ln -s /${lxcRoot}/lxccache /var/cache/lxc




Создаем базовый LXC-контейнер на основе Ubuntu с именем hName и с версией Trusty:

$ lxc-create -t ubuntu -n hName -r trusty




Далее приступим к созданию неизменяемой части LXC-контейнера.

Переходим в каталог созданного контейнера:

$ cd /lxc/lxclib/hName/rootfs




В нем создаем каталог с общей частью, назовем его common:

$ mkdir common




Переносим в него неизменяемые каталоги:

$ mv bin lib lib64 sbin usr common/




Создаем символические ссылки на них:

$ ln -s common/bin
$ ln -s common/sbin
$ ln -s common/lib
$ ln -s common/lib64
$ ln -s common/usr




Создание контейнера LXC



После подготовки базового образа системы приступим непосредственно к созданию первого контейнера в системе. Назовем его просто «Node1»:

Создаем каталог для первого контейнера:

$ mkdir -p /lxc/lxclib/Node1/rootfs




Переходим в него:

$ cd /lxc/lxclib/Node1/rootfs




При помощи программы rsync копируем неизменяемую часть в первый контейнер:

$ rsync --exclude=/dev/* --exclude=/common/* -avz /lxc/lxclib/hName/rootfs/* ./




Далее для первого контейнера создаем два каталога для общей части и для устройств:

$ mkdir /lxc/lxclib/Node1/rootfs/common
$ mkdir /lxc/lxclib/Node1/rootfs/dev




Монтируем их при помощи программы Bind:

$ mount --bind /lxc/lxclib/hName/rootfs/dev /lxc/lxclib/Node1/rootfs/dev
$ mount --bind /lxc/lxclib/hName/rootfs/common /lxc/lxclib/Node1/rootfs/common
$ mount -o remount,ro /lxc/lxclib/Node1/rootfs/common




Копируем файл конфигурации и файл fstab из базового контейнера в первый:

$ cp /lxc/lxclib/hName/config /lxc/lxclib/Node1/
$ cp /lxc/lxclib/hName/fstab /lxc/lxclib/Node1/




Меняем имя в конфигурации первого контейнера на Node1, а также MAC-адрес:

$ nano /lxc/lxclib/Node1/config




This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий