Я пытаюсь добраться, Новинка OpenStack вычисляют узел, работающий в контейнере для начальной загрузки сервера во вложенном контейнере.
Все хорошо работает, пока я не прошу, чтобы Nova в контроллере загрузила сервер. Во время процесса начальной загрузки сервера в вычислить контейнере libvirt использует qemu-nbd для экспорта qcow2 образа диска, загруженного со Взгляда OpenStack как предыдущий шаг к запуску вложенного контейнера. Со значением по умолчанию lxc конфигурация qemu-nbd сбои.
Я разработал lxc.conf файл, чтобы позволить использовать qemu-nbd из контейнера, но я должен пропускать что-то, потому что, даже если контейнер активирует узел/dev/nbd0, я не вижу, что/dev/nbd0p1 запись соответствует разделу в qcow2 образе диска.
Вот lxc.conf файл для моего контейнера Nova:
# Template used to create this container: /usr/share/lxc/templates/lxc-download
# Parameters passed to the template: -d ubuntu -r trusty -a i386
# For additional config options, please look at lxc.container.conf(5)
# Distribution configuration
lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.arch = x86
# Container specific configuration
lxc.rootfs = /var/lib/lxc/compute/rootfs
lxc.utsname = compute
# Network configuration
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.hwaddr = 00:16:3e:90:16:e0
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0.1000
lxc.network.hwaddr = 00:16:3e:90:16:e1
# This is the public interface
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0.2000
lxc.network.hwaddr = 00:16:3e:90:16:e2
# Added so certain functions (iptables, nova-compute, ...) work
lxc.mount.entry = /lib/modules/3.13.0-43-generic /var/lib/lxc/compute/rootfs/lib/modules/3.13.0-43-generic none ro,bind 0 0
# Added so the compute node can run LXC VMs
lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting
# Allow the container to mknod (needed by qemu-nbd...)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
# Allow the container to use the host's nbd devices
lxc.cgroup.devices.allow = b 43:* rwm # Every nbd device in the host
Это может быть проверено легко на командной строке. Принятие у нас есть qcow образ диска в /root/cirros-0.3.3-i386-disk.img
:
root@compute:~# qemu-nbd -c /dev/nbd0 cirros-0.3.3-i386-disk.img -f qcow2
root@compute:~# ls -d /sys/class/block/nbd0p1
/sys/class/block/nbd0 /sys/class/block/ndb0p1
root@compute:~# ls /dev/nbd0*
/dev/nbd0
Кажется, что блочное устройство существует в ядре, но/dev/nbd0p1 узел устройства не был создан. Кто-либо знает то, что я пропускаю в своей контейнерной конфигурации?
P.S. Я знаю OpenStack, Nova по умолчанию не работает с контейнерным VMs, существуют некоторые изменения, которые я должен сделать в коде Nova; но я должен преодолеть это препятствие сначала
Кажется, работает на меня (загружающийся экземпляр LXC с помощью изображения cirros qcow2 в хосте LXC в госте KVM сверху хоста KVM; выпуск Ледника).
Действительно должен был вручную создать несколько nbd узлов:
stack@ctl-template:~/devstack$ ls -l /dev/nbd*
brw-r--r-- 1 root root 43, 0 Apr 13 14:31 /dev/nbd0
brw-r--r-- 1 root root 43, 16 Apr 13 14:33 /dev/nbd1
brw-r--r-- 1 root root 43, 32 Apr 13 14:33 /dev/nbd2
brw-r--r-- 1 root root 43, 48 Apr 13 14:33 /dev/nbd3
brw-r--r-- 1 root root 43, 64 Apr 13 14:34 /dev/nbd4
nbd1 используется экземпляром:
stack@ctl-template:~/devstack$ dmesg | tail | grep nbd
[94516.110986] EXT4-fs (nbd1): mounting ext3 file system using the ext4 subsystem
[94516.205551] EXT4-fs (nbd1): mounted filesystem with ordered data mode. Opts:
никакие дополнительные устройства, созданные для раздела (разделов) в изображении:
stack@ctl-template:~/devstack$ ls /sys/class/block/
loop0 loop4 nbd0 nbd12 nbd2 nbd6 ram0 ram12 ram2 ram6 sr0 vda5
loop1 loop5 nbd1 nbd13 nbd3 nbd7 ram1 ram13 ram3 ram7 vda
loop2 loop6 nbd10 nbd14 nbd4 nbd8 ram10 ram14 ram4 ram8 vda1
loop3 loop7 nbd11 nbd15 nbd5 nbd9 ram11 ram15 ram5 ram9 vda2