Estoy intentando ejecutar LXC en una VPN alojada en OpenVZ. He intentado hacer esto con múltiples tipos de imágenes, ubuntu. centos, debian... sin suerte. LXC se instala correctamente pero los contenedores no se inician debido a la conexión en red, ¡parece que esto tiene que ver con el puente de interfaces!
¿Alguien ha tenido problemas similares a este? ¿Alguien sabe si esto es una limitación de OpenVZ?
A partir de una nueva instalación de 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.
Y probando:
sudo brctl addbr lxcbr0
add bridge failed: Invalid argument
Respuesta1
OpenVZ es una tecnología de virtualización de sistemas operativos, al igual que LXC y Docker, pero basada en varios parches del kernel, y muchos de ellos nunca se integran con el kernel principal.
OpenVZ se basó en kernels antiguos (2.6.x) que ahora no tienen muchas cosas necesarias para administrar contenedores (cgroups principalmente). Desafortunadamente, no puedes ejecutar contenedores LXC dentro de un entorno virtual OpenVZ.
Respuesta2
Para no disminuir las otras respuestas (ya que afirman correctamente que los contenedores OpenVZson contenedores) pero mira este interesante enlace: Docker en OVZ CT("Desde el kernel OpenVZ 042stab105.4 es posible ejecutar Docker dentro de contenedores. Este artículo describe cómo hacerlo.")
Puede que ofrezca o no algunas soluciones a su problema, pero en teoría es posible usar cgroups en un CT (en núcleos más nuevos que042puñalada105.4y mediante el uso de un bastante nuevovzctl). Básicamente necesitarás:
- verifique la configuración de su kernel: pruebe
lxc-checkconfig
con el kernel dado o utilíceloCONFIG=/boot/config-2.6.32-openvz-042stab108.2-amd64 lxc-checkconfig
con cualquier kernel instalado.
Si todo parece estar bien, puede seguir adelante y:
vzctl set $veid --save --features bridge:on --netif_add eth0 --netfilter full --devnodes net/tun:rw
Y monte cgroups personalizados en el 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
De hecho, es una construcción divertida, pero los controles ovz y cgroups no son intrínsecamente incompatibles (muchas características de cgroup son funciones auxiliares vacías, por ejemplo, no hacen nada pero no arrojan mensajes de error).
Descargo de responsabilidad: aún no lo he probado (a mi kernel le falta el espacio de nombres cgroup).
Otro enlace útil eseste comentario del rastreador de problemas de Dockersobre cómo compilar su kernel OVZ con las características requeridas.