Este é atualmente um bug conhecido no virt-manager - veja o tópico de e-mail em link .
Nesse meio tempo, encontrarei outra maneira de contornar o problema.
(CentOS 7, Ceph Incunabulus, tudo atualizado até agora)
Eu tenho um cluster Ceph / qemu / kvm convergente em funcionamento com o cephx ativado para autenticação. Eu estou tentando usar isso para armazenar dispositivos de bloco para máquinas virtuais qemu / kvm - não uma configuração incomum. Gostaria de configurar um pool para discos virtuais no ceph, definir esse pool e autenticar nele na libvirt e criar máquinas virtuais usando o pool. Todos os tutoriais e exemplos parecem mostrar a configuração da autenticação cephx diretamente em cada arquivo do disco. Dado o meu dia até agora, estou começando a ver o porquê!
Quando eu tento o seguinte, o qemu-kvm parece ter passado por uma unidade configurada como file=rbd:vmlive/testguest-vda:auth_supported=none
. Isso deve ler auth_supported=cephx
e, por alguma razão, isso não está acontecendo!
Posso colocar toda a autenticação no pool como eu quero, ou tenho que colocar uma seção de autenticação no XML de cada disco virtual? Se eu posso fazer isso, onde está o meu erro no que está abaixo?
Eu tenho dois nós: test1 e test2. Cada um tem dois OSDs, cada um também é um monitor (sim, estou ciente de que correr com um número par de monitores é uma má ideia). Cada um tem libvirt instalado, portanto qemu / kvm. Estou executando os comandos abaixo como root no test1. O UUID foi alterado e você verá que não faço nenhuma tecla visível abaixo!
SENSIBLE_PGS=512 # Calculate as OSDs * 100 / number of replicas, rounded up to next power of 2
ID=kvm
POOL=vmlive
ceph osd pool create $POOL $SENSIBLE_PGS $SENSIBLE_PGS
KEY='ceph auth get-or-create client.$ID | grep -v '^\[' | awk '{print $3}''
ceph auth caps client.$ID mon "allow r" osd "allow rwx pool=$POOL"
SECRET_DEFINITION_FILE=~/secret-$ID.xml
SECRET_UUID=12345678-1234-1234-1234-123456789abc
cat > $SECRET_DEFINITION_FILE << EOF
<secret ephemeral='no' private='no'>
<uuid>$SECRET_UUID</uuid>
<usage type='ceph'>
<name>ceph client.$ID key</name>
</usage>
</secret>
EOF
virsh secret-define --file $SECRET_DEFINITION_FILE
rm -f $SECRET_DEFINITION_FILE
virsh secret-set-value "$SECRET_UUID" "$KEY"
POOL_DEFINITION_FILE=~/pool-$POOL.xml
cat > $POOL_DEFINITION_FILE << EOF
<pool type="rbd">
<name>$POOL</name>
<source>
<name>$POOL</name>
<host name="test1" port="6789" />
<host name="test2" port="6789" />
<auth username='$ID' type='ceph'>
<secret uuid='$SECRET_UUID'/>
</auth>
</source>
</pool>
EOF
virsh pool-define $POOL_DEFINITION_FILE
rm -f $POOL_DEFINITION_FILE
virsh pool-autostart $POOL
virsh pool-start $POOL
NAME=testguest
DEV=vda
SIZE=8G
IMAGE=CentOS-7-x86_64-Minimal-1503-01.iso
VCPUS=1
RAM=512
MACLAST_HEX=10
IPLAST_DECIMAL=16
FILE=$NAME-$DEV
qemu-img create -f rbd rbd:$POOL/$FILE $SIZE
sudo virsh net-update default add-last ip-dhcp-host \
--xml "<host mac='52:54:00:00:00:$MACLAST_HEX' ip='192.168.122.$IPLAST_DECIMAL' name='$NAME'/>" --live --config
sudo virt-install \
--connect qemu:///system \
--virt-type kvm \
--name $NAME \
--ram $RAM \
--vcpus=$VCPUS \
--disk vol=$POOL/$FILE \
--location /var/lib/libvirt/images/$IMAGE \
--vnc \
--noautoconsole \
--os-type linux \
--os-variant rhel7 \
--network=bridge:virbr0,model=virtio,mac=52:54:00:00:00:$MACLAST_HEX \
--autostart
WARNING vmlive/testguest-vda may not be accessible by the hypervisor. You will need to grant the 'qemu' user search permissions for the following directories: ['vmlive', '']
Starting install...
Retrieving file .treeinfo...
Retrieving file vmlinuz...
Retrieving file initrd.img...
ERROR internal error: process exited while connecting to monitor: 2016-01-06T15:16:54.639890Z qemu-kvm: -drive file=rbd:vmlive/testguest-vda:auth_supported=none:mon_host=test1\:6789,if=none,id=drive-virtio-disk0,format=raw: error connecting
2016-01-06T15:16:54.640574Z qemu-kvm: -drive file=rbd:vmlive/testguest-vda:auth_supported=none:mon_host=test1\:6789,if=none,id=drive-virtio-disk0,format=raw: could not open disk image rbd:vmlive/testguest-vda:auth_supported=none:mon_host=test1\:6789: Could not open 'rbd:vmlive/testguest-vda:auth_supported=none:mon_host=test1\:6789': Operation not supported
Domain installation does not appear to have been successful.
Se você leu até aqui ... obrigado, parabéns e tudo ajuda recebido com gratidão!
Atualização: isso parece ser um problema com a virt-install parcialmente (mas de forma incompleta) analisando pools. Se eu usar --print-xml
, o XML parcial gerado para o disco será:
<disk type="network" device="disk">
<driver name="qemu"/>
<source protocol="rbd" name="vmlive/testguest-vda">
<host name="test1" port="6789"/>
</source>
<target dev="vda" bus="virtio"/>
</disk>
... que inclui grande parte da definição do conjunto, mas não da estrofe auth
.
Vou continuar investigando.
Este é atualmente um bug conhecido no virt-manager - veja o tópico de e-mail em link .
Nesse meio tempo, encontrarei outra maneira de contornar o problema.
Como você disse, o XML não inclui auth
stanza, é por isso que a instalação do domínio falhou, mas você pode adicionar o manual auth
part
Edite /usr/share/virt-manager/virtinst/guest.py
como segue
#vim /usr/share/virt-manager/virtinst/guest.py
import re
...
#define the auth
auth_secret = '''
<auth username='libvirt'>
<secret type='ceph' uuid='e63e4b32-280e-4b00-982a-9d3xxxxxxx'/>
</auth>
'''
ceph_monitors = '''
<host name='172.16.200.104' port='6789'/>
<host name='172.16.200.105' port='6789'/>
<host name='172.16.200.106' port='6789'/>
'''
#change func: _build_xml
def _build_xml(self, is_initial):
log_label = is_initial and "install" or "continue"
disk_boot = not is_initial
start_xml = self._get_install_xml(install=True, disk_boot=disk_boot)
final_xml = self._get_install_xml(install=False)
#add------------start
rgx_qemu = re.compile('(<driver name="qemu"[^>]*?>)')
rgx_auth = re.compile('(?<=<source protocol="rbd" name=")([^>]*?">).*?(?= *?</source>)',re.S)
start_xml = rgx_qemu.sub('\1' + auth_secret,start_xml)
start_xml = rgx_auth.sub('\1' + ceph_monitors,start_xml)
final_xml = rgx_qemu.sub('\1' + auth_secret,final_xml)
final_xml = rgx_auth.sub('\1' + ceph_monitors,final_xml)
#add------------end
logging.debug("Generated %s XML: %s",
log_label,
(start_xml and ("\n" + start_xml) or "None required"))
logging.debug("Generated boot XML: \n%s", final_xml)
return start_xml, final_xml
Em seguida, execute virt-install
novamente
sudo virt-install \
--connect qemu:///system \
--virt-type kvm \
--name $NAME \
--ram $RAM \
--vcpus=$VCPUS \
--disk vol=$POOL/$FILE \
--location /var/lib/libvirt/images/$IMAGE \
--vnc \
--noautoconsole \
--os-type linux \
--os-variant rhel7 \
--network=bridge:virbr0,model=virtio,mac=52:54:00:00:00:$MACLAST_HEX \
--autostart
Mais informações link