LXC: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 150: Строка 150:
 
</PRE>
 
</PRE>
   
==Ссылки===
+
==Ссылки==
   
 
* http://www.mail-archive.com/lxc-users@lists.sourceforge.net/msg01423.html
 
* http://www.mail-archive.com/lxc-users@lists.sourceforge.net/msg01423.html

Версия 18:44, 11 февраля 2013

LXC

Это такие контейнеры. Как jail но другие, если Вы понимаете о чем я =)


Предварительная настройка

none /cgroup cgroup defaults 0 0 to /etc/fstab and mount the new entry using
sudo mount /cgroup
sudo apt-get install dkms build-essential bridge-utils lxc

Настроить бридж:/etc/network/interfaces (у меня убунта 11ю10)

iface br1 inet static
   address 192.168.56.2
   netmask 255.255.255.0
   bridge_ports eth1
   bridge_fd 0

Проверка

Первым делом надо на всякий случай проверить, всё ли готово для работы с LXC-контейнерами с помощью команды lxc-checkconfig. Напротив каждого пункта в её выводе должно стоять значение enabled.

# lxc-checkconfig
Kernel config /proc/config.gz not found, looking in other places...
Found kernel config file /boot/config-3.0.0-24-generic
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

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

lxc-create --name vmh1 --template ubuntu

Вся файловая система контейнеров фактически находится в каталоге /var/lib/lxc/имя_контейнера/rootfs (а значит, мы можем легко монтировать туда папки с опцией bind).

  • открытый вопрос - как лимитировать размер?

Там же находится и конфигурационный файл config, в котором описаны все параметры. В принципе, параметры и файлы можно на лету менять с хост-машины, но это не всегда безопасно. Кстати, шаблонами пользоваться совсем необязательно. Практически для каждого популярного дистрибутива можно найти пример оформления config-файла или же создать его самому. В нашем случае надо добавить информацию о сетевых интерфейсах для только что созданного контейнера.

/var/lib/lxc/vmh1/config

В конец файла необходимо добавить следующие строки:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.ipv4 = 10.0.2.201/24

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br1
lxc.network.name = eth1
lxc.network.ipv4 = 192.168.56.201/24


Из названия сетевых переменных в общем-то ясно, за что они отвечают. Тип veth выбирается при использовании сетевого моста, флаг up даёт команду на поднятие сетевого интерфейса при старте контейнера, в link прописывается используемый интерфейс хост-машины, а в name — имя адаптера внутри контейнера. В примере прописано два интерфейса. Один для выхода в Сеть, второй для обмена данными между контейнерами и хост машиной. IP-адрес прописывается вручную из выбранных выше диапазонов, чтобы потом не выяснять, как подключиться к тому или иному контейнеру. Внутри самого контейнера править сетевые настройки не требуется.

Это все так (выше была цитата) но для этого надо уже иметь предварительно настроенные 2 бриджа. К тому же у меня контейнер при старте пробовал получить адрес по DHCP

Проблема №1

Локаль. У меня выпадало куча предупреждений. не увеерн что фатально, но я выставил LANG=C для текущего сеанса.

Проблема №2

Не использовать mc при старте машины у меня проблема выглядела так:

# lxc-start  -name vmh1
lxc-start: inherited fd 6 on pipe:[2401332881]

fd (file descriptor) был другой, но сути это не меняет. Гугление привело к мысли что есть workaround

lxc-start -n vmh1 6<&-

Но вообще-то все портит mc и запускать из-под него плохая идея. Проверка показала что из голой сессии все работает

Раз уже LXC использует механизмы cgroups, то можно использовать в конфигурационном файле множество различных параметров. В примере выше мы задали следующие ограничения: memory.limit_in_bytes — максимальный объём памяти для контейнера, memory.memsw.limit_in_bytes — максимальный размер подкачки (swap), cpuset.cpus — доступные процессоры/ядра (первый и третий, в VirtualBox мы указали использование трёх ядер). Параметр cpu.shares чуть хитрей. Если у одного контейнера он принимает значение x, а у второго 2x, то в каждый конкретный промежуток времени второй получит в два раза больше процессорных циклов, чем первый. Остальные параметры можно посмотреть, пролистав каталог /sys/fs/cgroup либо просто поискав документацию в Сети.


lxc.cgroup.memory.limit_in_bytes = 512M
lxc.cgroup.memory.memsw.limit_in_bytes = 1G
lxc.cgroup.cpu.shares = 1024
lxc.cgroup.cpuset.cpus = 0

Внимательно с последним параметром - попытка дать больше процессоров чем есть на самом деле чревата фейлом.


Полезные для дебага ключи:

-logfile /путь/до/log-файла и --logpriority DEBUG
lxc-start --name vmh1

Если всё нормально, то через несколько секунд контейнер заработает и выдаст приглашение для входа в консоль. По умолчанию логин и пароль совпадают и равны root. Лучше сразу же создать нового пользователя без root-полномочий, а заодно проверить работоспособность сети — например, пропинговать хост-машину (у нас в примере это была 192.168.56.2) и какой-нибудь домен в Интернете. Возможно, придётся прописать хотя бы один IP-адрес DNS-сервера в файле /var/lib/lxc/имя_контейнера/rootfs/etc/resolv.conf, да и вообще настроить ОС в контейнере под свои нужды.

Выключение контейнера

sudo shutdown -h now
lxc-stop --name vmh1

Цитата:
Чтобы запустить контейнер в фоновом режиме, надо добавить к команде lxc-start параметр --daemon (-d). В этом случае подключиться к консоли контейнера можно командой lxc-console с указанием имени контейнера, а отключиться последовательным нажатием клавиш Ctrl+A и Q. Полезно узнать ещё пару команд. lxc-info показывает текущее состояние контейнера, а lxc-freeze «замораживает» его — при последующем размораживании (команда lxc-unfreeze) будет полностью восстановлено его состояние до заморозки (процессы, содержимое памяти и так далее).

Ctr-A Q у меня не заработало - лучше сразу в скрине запускать.


Проще всего для изучения команд lxc ввести в консоли lxc- и нажать Tab — вы увидите все доступные команды. Каждую из них можно запустить с ключом --help и посмотреть доступные параметры. Впрочем, в Сети документации тоже полно. Напоследок мы склонируем наш, пока что единственный, контейнер во второй, с именем vmh2. Не забудьте в конфигурационном файле новой копии поменять как минимум IP-адреса. Для удаления любого контейнера воспользуйтесь командой lxc-destroy.

Клонирование

lxc-clone -o vmh1 -n vmh2

В дальнейшем можно клонировать готовую конфигурацию сколько угодно раз и выстраивать свой виртуальный кластер. Для автоматического запуска контейнеров надо поместить их конфигурационные файлы с расширением .conf в папку /etc/lxc. Проще сделать символическую ссылку. Также в файле /etc/default/lxc надо раскомментировать строку RUN=yes.

sudo ln -s /var/lib/lxc/vmh1/config /etc/lxc/auto/vmh1.conf
sudo nano /etc/default/lxc

Ссылки