Контейнеры LXC на OpenVZ VPS

Контейнеры LXC на OpenVZ VPS

Я пытаюсь запустить LXC на VPN, размещенном в OpenVZ. Я пробовал делать это с несколькими вариантами образов, Ubuntu, Centos, Debian... но безуспешно. LXC устанавливается правильно, но контейнеры не запускаются из-за сетевых проблем. Похоже, это связано с мостовым соединением интерфейсов!

У кого-нибудь были подобные проблемы? Кто-нибудь знает, это ограничение OpenVZ?

Начинаем с новой установки Ubuntu 14.04:

sudo apt-get update 
sudo apt-get install lxc
sudo lxc-create -n p1 -t ubuntu 
sudo lxc-start -n p1 --logfile log.txt
cat log.txt
    lxc-start 1434379565.265 ERROR    lxc_conf - conf.c:instantiate_veth:2949 - failed to create veth pair (vethP4LPC8 and vethO6MP73): Operation not supported
    lxc-start 1434379565.265 ERROR    lxc_conf - conf.c:lxc_create_network:3261 - failed to create netdev
    lxc-start 1434379565.265 ERROR    lxc_start - start.c:lxc_spawn:826 - failed to create the network
    lxc-start 1434379565.265 ERROR    lxc_start - start.c:__lxc_start:1080 - failed to spawn 'p1'
    lxc-start 1434379565.265 ERROR    lxc_start_ui - lxc_start.c:main:342 - The container failed to start.
    lxc-start 1434379565.265 ERROR    lxc_start_ui - lxc_start.c:main:346 - Additional information can be obtained by setting the --logfile and --logpriority options.

И попытка:

sudo brctl addbr lxcbr0
  add bridge failed: Invalid argument

решение1

OpenVZ — это технология виртуализации операционных систем, похожая на LXC и Docker, но основанная на различных исправлениях ядра, и многие из них никогда не интегрируются с основным ядром.

OpenVZ базировался на старых ядрах (2.6.x), в которых сейчас нет многих вещей, необходимых для управления контейнерами (в основном cgroups). К сожалению, вы не можете запускать контейнеры LXC внутри виртуальной среды OpenVZ.

решение2

Не умаляя значения других ответов (поскольку в них правильно указано, что контейнеры OpenVZявляются контейнерами) но посмотрите эту интересную ссылку: Докер в ОВЗ КТ(«Начиная с версии ядра OpenVZ 042stab105.4, стало возможным запускать Docker внутри контейнеров. В этой статье описывается, как это сделать.»)

Это может предложить или не предложить некоторые решения вашей проблемы, но теоретически возможно использовать cgroups в CT (на более новых ядрах, чем042stab105.4и используя довольно новыйvzctl). В основном вам понадобится:

  • проверьте конфигурацию ядра: попробуйте lxc-checkconfigиспользовать данное ядро ​​или CONFIG=/boot/config-2.6.32-openvz-042stab108.2-amd64 lxc-checkconfigлюбое другое установленное ядро.

Если все в порядке, вы можете двигаться дальше и:

vzctl set $veid --save --features bridge:on --netif_add eth0 --netfilter full --devnodes net/tun:rw

И смонтируем пользовательские cgroups в CT:

mount -t tmpfs tmpfs /sys/fs/cgroup
mkdir /sys/fs/cgroup/freezer,devices
mount -t cgroup cgroup /sys/fs/cgroup/freezer,devices -o freezer,devices
mkdir /sys/fs/cgroup/cpu,cpuacct,cpuset
mount -t cgroup cgroup /sys/fs/cgroup/cpu,cpuacct,cpuset/ -o cpu,cpuacct,cpuset

Это действительно забавная конструкция, но элементы управления ovz и cgroups по своей сути не являются несовместимыми (многие функции cgroup представляют собой пустые функции-заглушки, например, ничего не делают, но и не выдают сообщения об ошибках).

Отказ от ответственности: я еще не пробовал (в моем ядре отсутствует пространство имен cgroup).

Еще одна полезная ссылкаэтот комментарий в системе отслеживания ошибок Dockerо том, как скомпилировать ядро ​​OVZ с требуемыми функциями.

Связанный контент