Monte a imagem qcow2 usando qemu-nbd dentro de um contêiner

1

Estou tentando obter um nó de computação do OpenStack Nova em execução em um contêiner para inicializar um servidor em um contêiner aninhado.

Tudo funciona bem até que peço ao Nova no controlador para inicializar o servidor. Durante o processo de inicialização do servidor no contêiner de computação, o libvirt usa o qemu-nbd para exportar a imagem de disco qcow2 baixada do OpenStack Glance como uma etapa anterior para iniciar o contêiner aninhado. Com a configuração lxc padrão, o qemu-nbd falha.

Eu trabalhei com o arquivo lxc.conf para permitir usar o qemu-nbd de dentro do container, mas devo estar faltando alguma coisa porque mesmo se o container ativar o nó / dev / nbd0 eu não consigo ver o / dev / nbd0p1 entrada correspondente à partição na imagem de disco qcow2.

Aqui está o arquivo lxc.conf para o meu contêiner 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

Ele pode ser verificado facilmente na linha de comando. Supondo que temos a imagem de disco qcow em /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

Parece que o dispositivo de bloco existe no kernel, mas o nó do dispositivo / dev / nbd0p1 não foi criado. Alguém sabe o que estou perdendo na minha configuração de contêiner?

P.S. Eu sei que o OpenStack Nova, por padrão, não funciona com VMs de contêiner, há algumas alterações que preciso fazer no código do Novell; mas eu preciso superar esse obstáculo primeiro

    
por diodenal 29.12.2014 / 12:08

1 resposta

0

Parece funcionar para mim (inicializando a instância LXC usando a imagem de cirros qcow2 dentro do host LXC dentro do guest KVM em cima do host KVM; versão Icehouse).

Precisamos criar manualmente alguns nós 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 está sendo usado pela instância:

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: 

nenhum dispositivo adicional criado para partição (s) dentro da imagem:

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
    
por Sergey 13.04.2015 / 16:57