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-poolcom 128 grupos de posicionamento.- cephuser@adm >ceph osd pool create libvirt-pool 128 128- Verifique se o pool existe. - cephuser@adm >ceph osd lspools
- Crie um Usuário do Ceph. O exemplo a seguir utiliza o nome de usuário do Ceph - client.libvirte faz referência ao- libvirt-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 ID- A - libvirtacessará o Ceph usando o ID- libvirt, não o nome do Ceph- client.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-imagee faz referência ao- libvirt-pool.Dica: Local do arquivo de chaveiro- A 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.keyring- #qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2G- Verifique 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. - #zypper in virt-manager
- Prepare/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). 
- informando o caminho para o armazenamento existente. Especifique o tipo de OS, as configurações de memória e a máquina virtual. Por exemplo, - 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, como- virsh -c qemu+ssh://root@vm_host_hostname/system listId Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine running
- Efetue 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 a instalação do pacote libvirt-client).
  
- Abra o arquivo de configuração com - virsh editvm-domain-name.- #virsh edit libvirt-virtual-machine
- Em <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.imgpelo caminho para a imagem do OS.Importante- No lugar de um editor de texto, use - sudo virsh edit. Se você editar o arquivo de configuração em- /etc/qemucom um editor de texto, a- libvirtlibvirt poderá não reconhecer a mudança. Em caso de qualquer diferença entre o conteúdo do arquivo XML em- /etc/libvirt/qemue o resultado de- sudo virsh dumpxmlvm-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- /devda 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.xmlcom o seguinte conteúdo:- <secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret>
- Defina o segredo. - #virsh secret-define --file secret.xml <uuid of secret is output here>
- Obtenha a chave - client.libvirte grave a string de chave em um arquivo.- cephuser@adm >ceph auth get-key client.libvirt | sudo tee client.libvirt.key
- Defina o UUID do segredo. - #virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml- Você 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).- #virsh edit libvirt-virtual-machine- Em 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 ...Nota- O ID do exemplo é - libvirt, e não o nome do Ceph- client.libvirt, conforme gerado na etapa 2 da Seção 26.1, “Configurando o Ceph com- libvirt”. Use o componente de ID do nome do Ceph que você gerou. Se, por algum motivo, você precisar gerar novamente o segredo, terá que executar- sudo virsh secret-undefineuuid antes de executar- sudo virsh secret-set-valueoutra 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 health
- Verifique se a VM está em execução: - #virsh list
- Verifique se a VM está se comunicando com o Ceph. Substitua vm-domain-name pelo nome do domínio da sua VM: - #virsh qemu-monitor-command --hmp vm-domain-name 'info block'
- Verifique se o dispositivo de - &target dev='hdb' bus='ide'/>aparece em- /devou em- /proc/partitions:- >ls /dev- >cat /proc/partitions