26 libvirt
e Ceph #
A biblioteca libvirt
cria uma camada de abstração de máquina virtual entre as interfaces de hipervisor e os aplicativos de software que as utilizam. Com a libvirt
, os desenvolvedores e administradores de sistema podem se dedicar a uma estrutura comum de gerenciamento, API comum e interface de shell comum (virsh
) com vários hipervisores diferentes, incluindo QEMU/KVM, Xen, LXC ou VirtualBox.
Os dispositivos de blocos do Ceph suportam o QEMU/KVM. Você pode usá-los com um software que estabeleça interface com a libvirt
. A solução de nuvem usa a libvirt
para interagir com o QEMU/KVM, e o QEMU/KVM interage com os dispositivos de blocos do Ceph pela librbd
.
Para criar VMs que usam os dispositivos de blocos do Ceph, siga os procedimentos nas seções abaixo. Nos exemplos, usamos libvirt-pool
para o nome do pool, client.libvirt
para o nome de usuário e new-libvirt-image
para o nome da imagem. Você pode usar qualquer valor desejado, mas deve substituí-los durante a execução dos comandos nos procedimentos seguintes.
26.1 Configurando o Ceph com libvirt
#
Para configurar o Ceph para uso com a libvirt
, execute as seguintes etapas:
Crie um pool. O exemplo a seguir usa o nome do pool
libvirt-pool
com 128 grupos de posicionamento.cephuser@adm >
ceph osd pool create libvirt-pool 128 128Verifique se o pool existe.
cephuser@adm >
ceph osd lspoolsCrie um Usuário do Ceph. O exemplo a seguir utiliza o nome de usuário do Ceph
client.libvirt
e faz referência aolibvirt-pool
.cephuser@adm >
ceph auth get-or-create client.libvirt mon 'profile rbd' osd \ 'profile rbd pool=libvirt-pool'Verifique se o nome existe.
cephuser@adm >
ceph auth listNota: Nome de usuário ou IDA
libvirt
acessará o Ceph usando o IDlibvirt
, não o nome do Cephclient.libvirt
. Consulte a Seção 30.2.1.1, “Usuário” para ver uma explicação detalhada da diferença entre ID e nome.Use o QEMU para criar uma imagem em seu pool RBD. O exemplo a seguir usa o nome da imagem
new-libvirt-image
e faz referência aolibvirt-pool
.Dica: Local do arquivo de chaveiroA chave de usuário
libvirt
é armazenada em um arquivo de chaveiro salvo no diretório/etc/ceph
. O arquivo de chaveiro precisa ter um nome apropriado que inclua o nome do cluster do Ceph ao qual ele pertence. Para o nome do cluster padrão “ceph”, o nome do arquivo de chaveiro é/etc/ceph/ceph.client.libvirt.keyring
.Se o chaveiro não existir, crie-o com:
cephuser@adm >
ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyringroot #
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2GVerifique se a imagem existe.
cephuser@adm >
rbd -p libvirt-pool ls
26.2 Preparando o gerenciador de VM #
É possível usar a libvirt
sem um gerenciador de VM, mas talvez você ache mais simples criar primeiro o domínio com virt-manager
.
Instale um gerenciador de máquina virtual.
root #
zypper in virt-managerPrepare/faça download de uma imagem de OS do sistema que deseja virtualizar.
Inicie o gerenciador de máquina virtual.
virt-manager
26.3 Criando uma VM #
Para criar uma VM com virt-manager
, execute as seguintes etapas:
Escolha a conexão na lista, clique o botão direito do mouse nela e selecione
(Novo).libvirt-virtual-machine
.Conclua a configuração e inicie a VM.
Verifique se o domínio recém-criado existe com
sudo virsh list
. Se necessário, especifique a string de conexão, comovirsh -c qemu+ssh://root@vm_host_hostname/system list
Id Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine runningEfetue login na VM e pare-a antes de configurá-la para uso com o Ceph.
26.4 Configurando a VM #
Neste capítulo, vamos nos concentrar na configuração de VMs para integração com o Ceph usando virsh
. Geralmente, os comandos virsh
exigem privilégios de root (sudo
) e não retornarão os resultados apropriados nem o notificarão sobre a necessidade dos privilégios de root. Para uma referência dos comandos virsh
, consulte man 1 virsh
(requer o pacote libvirt-client instalado).
Abra o arquivo de configuração com
virsh edit
vm-domain-name.root #
virsh edit libvirt-virtual-machineEm <devices>, deve haver uma entrada <disk>.
<devices> <emulator>/usr/bin/qemu-system-SYSTEM-ARCH</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/path/to/image/recent-linux.img'/> <target dev='vda' bus='virtio'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk>
Substitua
/path/to/image/recent-linux.img
pelo caminho para a imagem do OS.ImportanteNo lugar de um editor de texto, use
sudo virsh edit
. Se você editar o arquivo de configuração em/etc/libvirt/qemu
com um editor de texto, alibvirt
poderá não reconhecer a mudança. Em caso de qualquer diferença entre o conteúdo do arquivo XML em/etc/libvirt/qemu
e o resultado desudo virsh dumpxml
vm-domain-name, a VM pode não funcionar apropriadamente.Adicione a imagem RBD do Ceph que você já criou como uma entrada <disk>.
<disk type='network' device='disk'> <source protocol='rbd' name='libvirt-pool/new-libvirt-image'> <host name='monitor-host' port='6789'/> </source> <target dev='vda' bus='virtio'/> </disk>
Substitua monitor-host pelo nome do seu host e substitua o nome do pool e/ou da imagem, conforme necessário. Você pode adicionar várias entradas <host> aos Ceph Monitors. O atributo
dev
é o nome do dispositivo lógico que aparecerá no diretório/dev
da VM. O atributo de barramento opcional indica o tipo de dispositivo de disco a ser emulado. As configurações válidas são específicas do driver (por exemplo, ide, scsi, virtio, xen, usb ou sata).Grave o arquivo.
Se a autenticação estiver habilitada no cluster do Ceph (que é o padrão), você deverá gerar um segredo. Abra o editor de sua preferência e crie um arquivo chamado
secret.xml
com o seguinte conteúdo:<secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret>
Defina o segredo.
root #
virsh secret-define --file secret.xml <uuid of secret is output here>Obtenha a chave
client.libvirt
e grave a string de chave em um arquivo.cephuser@adm >
ceph auth get-key client.libvirt | sudo tee client.libvirt.keyDefina o UUID do segredo.
root #
virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xmlVocê também deve definir o segredo manualmente adicionando a seguinte entrada
<auth>
ao elemento<disk>
que você inseriu antes (substituindo o valor do uuid pelo resultado do exemplo de linha de comando acima).root #
virsh edit libvirt-virtual-machineEm seguida, adicione o elemento
<auth></auth>
ao arquivo de configuração do domínio:... </source> <auth username='libvirt'> <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/> </auth> <target ...
NotaO ID do exemplo é
libvirt
, e não o nome do Cephclient.libvirt
, conforme gerado na etapa 2 da Seção 26.1, “Configurando o Ceph comlibvirt
”. Use o componente de ID do nome do Ceph que você gerou. Se, por algum motivo, você precisar gerar novamente o segredo, terá que executarsudo virsh secret-undefine
uuid antes de executarsudo virsh secret-set-value
outra vez.
26.5 Resumo #
Após configurar a VM para uso com o Ceph, você poderá iniciá-la. Para verificar se a VM e o Ceph estão se comunicando, você pode executar os procedimentos a seguir.
Verifique se o Ceph está em execução:
cephuser@adm >
ceph healthVerifique se a VM está em execução:
root #
virsh listVerifique se a VM está se comunicando com o Ceph. Substitua vm-domain-name pelo nome do domínio da sua VM:
root #
virsh qemu-monitor-command --hmp vm-domain-name 'info block'Verifique se o dispositivo de
&target dev='hdb' bus='ide'/>
aparece em/dev
ou em/proc/partitions
:tux >
ls /devtux >
cat /proc/partitions