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

Контейнеры 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

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

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

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

Он может предложить или не предложить некоторые решения вашей проблемы, но теоретически можно использовать контрольные группы в 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

И смонтируйте пользовательские контрольные группы в 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 с необходимыми функциями.