Я пытаюсь запустить 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 с требуемыми функциями.