Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 11. Gerenciamento de armazenamento para máquinas virtuais

Você pode gerenciar o armazenamento de máquinas virtuais usando o CLI ou o console web.

Esta documentação fornece informações sobre como gerenciar o armazenamento de máquinas virtuais usando o comando virsh.

11.1. Entendendo o armazenamento de máquinas virtuais

As seções seguintes fornecem informações sobre armazenamento para máquinas virtuais (VMs), incluindo informações sobre pools de armazenamento, volumes de armazenamento e como eles são usados para fornecer armazenamento para VMs.

11.1.1. Armazenamento de máquinas virtuais

A seguir, são fornecidas informações sobre como os pools e volumes de armazenamento são utilizados para criar armazenamento para máquinas virtuais (VMs).

Um storage pool é uma quantidade de armazenamento gerenciada pelo host e reservada para uso pelos VMs. Storage volumes pode ser criado a partir de espaço nos pools de armazenamento. Cada volume de armazenamento pode ser atribuído a uma VM como um dispositivo de bloco, como um disco, em um ônibus convidado.

Os pools e volumes de armazenamento são gerenciados utilizando libvirt. Com o protocolo remoto libvirt, você pode gerenciar todos os aspectos do armazenamento de VM. Estas operações podem ser realizadas em um host remoto. Como resultado, um aplicativo de gerenciamento que utiliza libvirt, como o console web RHEL, pode ser utilizado para realizar todas as tarefas necessárias para configurar o armazenamento para uma VM.

A API libvirt pode ser usada para consultar a lista de volumes no pool de armazenamento ou para obter informações sobre a capacidade, alocação e armazenamento disponível no pool de armazenamento. Um volume de armazenamento no pool de armazenamento pode ser consultado para obter informações tais como alocação e capacidade, que podem ser diferentes para volumes esparsos.

Para os pools de armazenamento que o suportam, a API libvirt pode ser usada para criar, clonar, redimensionar e excluir volumes de armazenamento. As APIs também podem ser usadas para carregar dados para volumes de armazenamento, baixar dados de volumes de armazenamento ou apagar dados de volumes de armazenamento.

Uma vez iniciado um pool de armazenamento, um volume de armazenamento pode ser atribuído a uma VM usando o nome do pool de armazenamento e o nome do volume de armazenamento em vez do caminho do host para o volume nos arquivos de configuração XML da VM.

11.1.2. Piscinas de armazenagem

Um pool de armazenamento é um arquivo, diretório ou dispositivo de armazenamento, gerenciado por libvirt para fornecer armazenamento a máquinas virtuais (VMs). Os pools de armazenamento são divididos em volumes de armazenamento que armazenam imagens de VMs ou são anexados às VMs como armazenamento adicional. Várias VMs podem compartilhar o mesmo pool de armazenamento, permitindo uma melhor alocação de recursos de armazenamento.

As piscinas de armazenamento podem ser persistentes ou transitórias:

  • Um pool de armazenamento persistente sobrevive a um reinício do sistema da máquina hospedeira.
  • Só existe uma piscina de armazenagem transitória até o reinício do host.

O comando virsh pool-define é usado para criar um pool de armazenamento persistente, e o comando virsh pool-create é usado para criar um pool de armazenamento transitório.

Tipos de armazenagem de pool de armazenagem

Os pools de armazenamento podem ser locais ou em rede (compartilhados):

  • Local storage pools

    Os pools de armazenamento locais são anexados diretamente ao servidor host. Eles incluem diretórios locais, discos diretamente anexados, partições físicas e grupos de volume Logical Volume Management (LVM) em dispositivos locais.

    Os pools de armazenamento local são úteis para o desenvolvimento, testes e pequenas implantações que não requerem migração ou um grande número de VMs.

  • Networked (shared) storage pools

    Os pools de armazenamento em rede incluem dispositivos de armazenamento compartilhados através de uma rede usando protocolos padrão.

Exemplo de uso do pool de armazenagem

Para ilustrar as opções disponíveis para o gerenciamento de pools de armazenamento, o seguinte descreve um exemplo de servidor NFS que utiliza mount -t nfs nfs.example.com:/path/to/share /path/to/data.

Um administrador de armazenamento poderia definir um NFS Storage Pool no host de virtualização para descrever o caminho do servidor exportado e o caminho de destino do cliente. Isto permitirá que libvirt realize a montagem automaticamente quando libvirt for iniciado ou conforme necessário enquanto libvirt estiver rodando. Os arquivos com o diretório exportado do servidor NFS são listados como volumes de armazenamento dentro do pool de armazenamento NFS.

Quando o volume de armazenamento é adicionado à VM, o administrador não precisa adicionar o caminho de destino ao volume. Eles apenas precisam adicionar o pool de armazenamento e o volume de armazenamento pelo nome. Portanto, se o caminho do cliente alvo mudar, isso não afeta a VM.

Quando o pool de armazenamento é iniciado, libvirt monta o compartilhamento no diretório especificado, como se o administrador do sistema tivesse feito o login e executado mount nfs.example.com:/path/to/share /vmdata. Se o pool de armazenamento estiver configurado para reiniciar automaticamente, libvirt assegura que o disco compartilhado NFS seja montado no diretório especificado quando libvirt for iniciado.

Uma vez iniciado o pool de armazenamento, os arquivos no disco compartilhado NFS são relatados como volumes de armazenamento, e os caminhos dos volumes de armazenamento podem ser consultados usando a API libvirt. Os caminhos dos volumes de armazenamento podem então ser copiados para a seção da definição XML de uma VM que descreve o armazenamento de origem para os dispositivos de bloco da VM. No caso do NFS, uma aplicação que utiliza a API libvirt pode criar e excluir volumes de armazenamento no pool de armazenamento (arquivos no compartilhamento NFS) até o limite do tamanho do pool (a capacidade de armazenamento do compartilhamento).

Parar (destruir) um pool de armazenamento retira a abstração dos dados, mas mantém os dados intactos.

Nem todos os tipos de pool de armazenamento suportam a criação e a eliminação de volumes. A parada do pool de armazenamento (pool-destroy) desfaz a operação inicial, neste caso, desmontando a parte do NFS. Os dados sobre o compartilhamento não são modificados pela operação de destruição, a despeito do que o nome do comando sugere. Para mais detalhes, veja man virsh.

Tipos de pool de armazenamento suportados e não suportados

A seguir, uma lista dos tipos de pool de armazenagem suportados pela RHEL:

  • Piscinas de armazenamento baseadas em diretórios
  • Piscinas de armazenamento em disco
  • Piscinas de armazenamento divisórias
  • Piscinas de armazenagem GlusterFS
  • piscinas de armazenamento baseadas em iSCSI
  • Piscinas de armazenamento baseadas em LVM
  • Piscinas de armazenamento baseadas em NFS
  • Piscinas de armazenamento baseadas em SCSI com dispositivos vHBA
  • Piscinas de armazenamento multipath-based
  • Piscinas de armazenagem com base em RBD

A seguir está uma lista dos tipos de pool de armazenamento libvirt que não são suportados pela RHEL:

  • Piscinas de armazenagem com base em ovinos
  • Piscinas de armazenagem em andares
  • Piscinas de armazenagem baseadas em ZFS

11.1.3. Volumes de armazenamento

Os pools de armazenamento estão divididos em storage volumes. Os volumes de armazenamento são abstrações de partições físicas, volumes lógicos LVM, imagens de disco baseadas em arquivos e outros tipos de armazenamento manipulados por libvirt. Os volumes de armazenamento são apresentados às VMs como dispositivos de armazenamento local, tais como discos, independentemente do hardware subjacente.

Na máquina host, um volume de armazenamento é referido por seu nome e um identificador para o pool de armazenamento do qual ele deriva. Na linha de comando virsh, isto toma a forma --pool storage_pool volume_name.

Por exemplo, para exibir informações sobre um volume chamado firstimage no pool guest_images.

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB