Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Documentação do SUSE Enterprise Storage 7 / Guia de Operações e Administração / Integração com ferramentas de virtualização / libvirt e Ceph
Aplica-se a SUSE Enterprise Storage 7

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:

  1. 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 128

    Verifique se o pool existe.

    cephuser@adm > ceph osd lspools
  2. Crie um Usuário do Ceph. O exemplo a seguir utiliza o nome de usuário do Ceph client.libvirt e 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 list
    Nota
    Nota: Nome de usuário ou ID

    A libvirt acessará 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.

  3. 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 ao libvirt-pool.

    Dica
    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
    root # 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.

  1. Instale um gerenciador de máquina virtual.

    root # zypper in virt-manager
  2. Prepare/faça download de uma imagem de OS do sistema que deseja virtualizar.

  3. 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:

  1. Escolha a conexão na lista, clique o botão direito do mouse nela e selecione New (Novo).

  2. Importe a imagem de disco existente informando o caminho para o armazenamento existente. Especifique o tipo de OS, as configurações de memória e nomeie a máquina virtual. Por exemplo, libvirt-virtual-machine.

  3. Conclua a configuração e inicie a VM.

  4. 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 list
    Id    Name                           State
    -----------------------------------------------
    [...]
     9     libvirt-virtual-machine       running
  5. 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 o pacote libvirt-client instalado).

  1. Abra o arquivo de configuração com virsh edit vm-domain-name.

    root # virsh edit libvirt-virtual-machine
  2. 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.img pelo caminho para a imagem do OS.

    Importante
    Importante

    No 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, a libvirt 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 de sudo virsh dumpxml vm-domain-name, a VM pode não funcionar apropriadamente.

  3. 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).

  4. Grave o arquivo.

  5. 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>
  6. Defina o segredo.

    root # virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. 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.key
  8. Defina o UUID do segredo.

    root # 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).

    root # 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
    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-undefine uuid antes de executar sudo 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.

  1. Verifique se o Ceph está em execução:

    cephuser@adm > ceph health
  2. Verifique se a VM está em execução:

    root # virsh list
  3. Verifique 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'
  4. Verifique se o dispositivo de &target dev='hdb' bus='ide'/> aparece em /dev ou em /proc/partitions:

    tux > ls /dev
    tux > cat /proc/partitions