Как стать автором
Обновить

Комментарии 58

Давно я такого на хабре не видел. Образцово-показательный пример того, как правильно писать и оформлять статьи.
Вы бы знали, друзья, как я натрахался с хабровским редактором. Чтобы хоть как-то смотрелось читаемо, пришлось натыкать 100500 <br>. Так еще и preview показывает не то, что будет в действительности.
Превью они сломали. Даже сложные комменты приходится «отлаживать» через сохранённый черновик поста.
Хорошая статья. А по производительности не сравнивали контейнеры и виртуализацию?
У LXC производительность должна быть такой же как у OpenVZ. Важным отличием является то, что lxc есть в ванильной ветке и не является набором хаков и кривых патчей на ядро.
НЛО прилетело и опубликовало эту надпись здесь
+1
Насколько мне известно OpenVZ с удовольствием перенесли бы свои патчи в ядро и с успехом это делают (LXC во многом их работа). Только вот протолкнуть патч в ядро это весьма и весьма сложная задача, причём далеко не только техническая.
Любые патчи в ядро могут привести к внезапной неработе чегонибудь. + Вы ограничены набором ядер, на которых это хоть как-то тестировалось.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Я так подозреваю, в ванильной ветке будет дополнительный функционал в namespaces и cgroups.

После этого, lxc и openvz будут их одинаково использовать, возможно предоставляя различные интерфейсы в userspace.

Ведь на самом деле, в ядре нет ни lxc, ни kvm ни т.д. — там есть несколько другие вещи, которые могут использоваться множеством продуктов.
Предложите общедоступный тест и сравним :)
НЛО прилетело и опубликовало эту надпись здесь
Есть, но он без пароля. По этому вход им невозможен.
НЛО прилетело и опубликовало эту надпись здесь
Если вы ставите пароль для root в Ubuntu то без проблем на него логинетесь.
root есть везде. Это такая штука, которая в ядро вшита намертво.
На самом деле уже практически нет. Сравнений типа euid == 0 не осталось эдак с средних версий Linux 2.2.
есть, но пока ему не выставить пароль руками, под него не зайти… и правильно… используем sudo
НЛО прилетело и опубликовало эту надпись здесь
В контейнер разворачивается система не задавая вопросов, в том числе про пользователя.Поэтому у вас будет только root с паролем root. Это не проблема, пока вы об этом помните.

Как я писал, «шаблон» lxc-контейнера — это просто shell скрипт, так что если нужно, можно это скрипт доработать и добавить туда все что угодно, в том числе создание обычного пользователя.
Хорошая статья. Как время появится, попробую с её помощью «поиграть» с контейнерами.
Автору — спасибо!
А можно ещё небольшое сравнение OpenVZ vs LXC?

Поверхностный поиск показал, что полноценных виртуалок на нём пока не сделать — нет возможности выставлять ограничения по RAM и ограничивать нагрузку на CPU.
Т.е. LXC фактически — значительно улучшенный вариант обычного chroot'а.

Всё действительно так и есть?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Да, коллеги. Обязательно прочитайие эту заметку, чтобы лучше понять, что такое OpenVZ и LXC.
Кое-где Колышкин лукавит.
Особенно о том чего нет в LXC.
К примеру впрыгнуть в контейнер там можно без проблем.
Лучше бы рассказал что там есть по сравнению с OVZ.
К примеру нормальные контроллеры io.
Хороший сетевой стек, который почти полностью абстрагируется от хостового.
etc
LXC не предназначен для распродажи виртуалок хостерами. Это програмно-изолированный контейнер со своим пространством процессов (нельзя по pid стучаться между виртуалками), имеющий свой сетевой стек, etc. Что-то типа jail в BSD-системах. Какие либо решения с ограничением ресурсов lxc-контейнеров на текущий момент носят характер костылей.
Зачем же сразу продавать?
Если у меня есть DNS сервер и я чётко понимаю его потребности в RAM, то есть смысл (на всякий случай) ему подобные лимиты выставить жестко.
Аналогично с другим софтом.

Но в принципе понятно, спасибо.
Ну если так, то можно использовать cgroup.
FirstVDS (и не только они) уже много лет продает виртуалки на FreeBSD jail и прекрасно себя чувствует.
НЛО прилетело и опубликовало эту надпись здесь
Я вот буду краток.
lxc.tl/
Идем туда и радостно админим lxc в стиле «я привык к openvz и не люблю думать». Проект пишут 3 сисадмина из Яндекса.
О, спасибо. Я привык к openvz и я не люблю думать.
Это не обидно, кстати. Если сисадмину на рутинной работе приходится думать — значит сисадмин неправильно работает. А управление виртуалками — это вполне себе рутина.
Абсолютно согласен
Не любить и не уметь — две большие разницы же.
tnx, завтра буду опробую :)
Слово «кухня» прочёл правильно с третьего раза :-)
мм… можно и так :)
Все прекрасно, но поправьте пожалуйста «Promiscuous mode» («Неразборчивый режим»)
Все же это «смешанный» режим.
Это не перевод термина. Я всего лишь имел ввиду, что так написано в VirtualBox в русском интерфейсе.
И правда, не сразу заметил, прошу прощения. Ужас какой-то >_<
> Установить прокси apt-cacher-ng, чтобы не качать одни и те же пакеты по нескольку раз
А может вариант сделать общий /var/cache/apt/archives/?
Меньше сервисов )
Да, можно. Я так и сделал в итоге.
Следовал по инструкции вроде и получил следующее:
root@sicness:/usr/lib/lxc/templates# lxc-start -n node02
lxc-start: cgroup is not mounted
lxc-start: failed to spawn 'node02'
lxc-start: cgroup is not mounted
хотя
root@sicness:/var/lib/lxc/node02# mount | grep cgr
none on /cgroup type cgroup (rw)
Не произошел chroot, наверное потому что в том fstab не указан корень:
root@sicness:/var/lib/lxc/node02# cat fstab
proc /var/lib/lxc/node02/rootfs/proc proc nodev,noexec,nosuid 0 0
sysfs /var/lib/lxc/node02/rootfs/sys sysfs defaults 0 0

Подскажите, пожалуйста, где ошибся.
С fstab все впорядке. Откуда будет «расти» корень контейнера — задается в конфиге в lxc.rootfs.
Неплохо бы запустить скрипт lxc-checkconfig (проверяет конфигурацию ядра).

Если не разобрался — пиши в личку или почту.
Перезагрузился. Ввел mount /cgroup сказал что уже. Ввел umount /cgroup скажал что не примонтирован. Ввел еще раз mount /cgroup сработало. Все стартануло.
Толи система проключила, то ли я :)
Спасибо за статью, весьма юзабилити.
По поводу облагораживания здесь кое-что можно подчерпнуть.
В Ubuntu 11.10 Server поставил LXC

Не смотря на то что в файле /etc/default/lxc параметр указывающий путь конфиг файлов контейнеров для автостарта CONF_DIR=/etc/lxc

Файлы .conf всё-же нужно располагать в /etc/lxc/auto/
Может кому пригодиться.
Здравствуйте. Как быть, если дополнительные адреса для виртуалок настоящие «белые» и по ним контейнеры должны быть видны снаружи из мира?

То есть имеется железный сервак на Hetzner, а на нём требуется развернуть пару виртуалок для изолированных задач. Текущий конфиг сети хоста такой:

auto lo
iface lo inet loopback

auto  eth0
iface eth0 inet static
 address   176.9.51.109
 broadcast 176.9.51.127
 netmask   255.255.255.224
 gateway   176.9.51.97

up route add -net 176.9.51.96 netmask 255.255.255.224 gw 176.9.51.97 eth0

Есть два дополнительных адреса (Hetzner их даёт из другой подсети почему-то):

176.9.69.13
176.9.69.14

Создал через LXC гостевую машину vm1 с помощью lxc-create. Машина завелась, но сеть в ней по дефолту не работает (как и ожидалось, в общем-то).

А надо в итоге сделать две виртуальных гостевых машины (vm1 и vm2) доступными из вне по 176.9.69.13 и 176.9.69.14, соответственно. Текущий IP хоста 176.9.51.109 при этом никак с пользой дела использовать не требуется (пусть остаётся исключительно для хост-машины).

В связи с чем три вопроса:

1. Чего понаписать в конфиге хоста /etc/network/interfaces (как его изменить, чтобы начались слушаться два дополнительных IP и их можно было прокинуть к виртуалькам)?

2. Чего добавить в /var/lib/lxc/vm1/config (какие имена интерфейсов, какой IP)?

3. Чего написать в конфиг /etc/network/interfaces на гостевой виртуальной машине?

Буду очень признателен за конкретные указания.
1. На хост-машине нужно настроить бридж br0 и связать его с интерфейсом eth0:

auto br0
iface br0 inet static
address 176.9.51.109
netmask 255.255.255.224
gateway 176.9.51.97
bridge_ports eth0
bridge_fd 0
К слову, «up route add», по-моему, здесь не нужен.

2. В конфиге /var/lib/lxc/vm1/config нужно указать ваш IP-адрес (176.9.69.13) и маску (в формате /NN)
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.ipv4 = 176.9.69.13/NN

3. В контейнере в /etc/network/interfaces нужно тоже указать ваш IP-адрес (176.9.69.13), маску (в формате 255.255.255.MMM)
и шлюз, который сказал провайдер.
Огромное спасибо! Буду пробовать и позже расскажу, что получилось (или не получилось).

> К слову, «up route add», по-моему, здесь не нужен.

Это дефолтная настройка от самого Hetzner, они её там комментируют вот так:
# default route to access subnet
Всё заработало! Спасибо вам.

/NN посчитал этим калькулятором (вышло /29), а шлюз и маску Hetzner высылает в письме с подтверждением о выделение дополнительного IP, ищите соответствующие письма по теме «Additional IP address for server...» (это примечание для тех, кто также как и я безуспешно попытается найти реквизиты сетей в веб-интерфейсе robot`а).
Скажите, я правильно понимаю, что root в контейнере = root в хосте?
нет, не правильно
Отличная статья. Спасибо! Но проясните один момент: зачем интерфейсы eth* заменяются на br*. Я не силен в конфигурировании сетей, особенно под Linux, а быстрый поиск мне не помог. Кстати у меня на Ubuntu 12.04 после перезагрузки интерфейсы eth* сохранились (в выводе ifconfig) и мешали запустить контейнеры (сообщение близко к тексту):
Coudn't rename <...> into eth0: File already exists

Причем ifdown почему-то их не выключал. Пришлось в конфигурации контейнеров использовать eth2 и eth3. После этого заработало.
К слову, OpenVZ тоже без проблем работает внутри VirtualBOX виртуалки.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории