27 Ceph como back end para instância de KVM QEMU #
O caso de uso mais frequente do Ceph envolve fornecer imagens de dispositivos de blocos para máquinas virtuais. Por exemplo, um usuário pode criar uma imagem “perfeita” com um OS e qualquer software relevante em uma configuração ideal. Em seguida, ele captura um instantâneo da imagem. Por fim, ele clona o instantâneo (normalmente, várias vezes. Consulte a Seção 20.3, “Instantâneos” para obter detalhes). A capacidade de criar clones de cópia em gravação de um instantâneo significa que o Ceph pode provisionar imagens de dispositivos de blocos para máquinas virtuais rapidamente, pois o cliente não precisa fazer download de uma imagem inteira cada vez que capturar uma nova máquina virtual.
Os dispositivos de blocos do Ceph podem ser integrados às máquinas virtuais QEMU. Para obter mais informações sobre a KVM QEMU, consulte https://documentation.suse.com/sles/15-SP1/single-html/SLES-virtualization/#part-virt-qemu.
27.1 Instalando qemu-block-rbd
#
Para usar os dispositivos de blocos do Ceph, o QEMU precisa ter o driver apropriado instalado. Verifique se o pacote qemu-block-rbd
está instalado, e instale-o se necessário:
#
zypper install qemu-block-rbd
27.2 Usando o QEMU #
A linha de comando do QEMU espera você especificar o nome do pool e da imagem. Você também pode especificar o nome de um instantâneo.
qemu-img command options \ rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...
Por exemplo, se você especificar as opções id e conf, a aparência deverá ser a seguinte:
qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf
27.3 Criando imagens com o QEMU #
Você pode criar uma imagem de dispositivo de blocos no QEMU. Você deve especificar rbd
, o nome do pool e o nome da imagem que deseja criar. Você também deve especificar o tamanho da imagem.
qemu-img create -f raw rbd:pool-name/image-name size
Por exemplo:
qemu-img create -f raw rbd:pool1/image1 10G Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
O formato de dados brutos
é realmente a única opção de formato sensível para usar com o RBD. Tecnicamente, você pode usar outros formatos compatíveis com o QEMU, como qcow2
, mas isso aumentará o overhead e também tornará o volume não seguro para migração dinâmica da máquina virtual quando o cache estiver habilitado.
27.4 Redimensionando imagens com o QEMU #
É possível redimensionar uma imagem de dispositivo de blocos usando o QEMU. Você deve especificar rbd
, o nome do pool e o nome da imagem que deseja redimensionar. Você também deve especificar o tamanho da imagem.
qemu-img resize rbd:pool-name/image-name size
Por exemplo:
qemu-img resize rbd:pool1/image1 9G Image resized.
27.5 Recuperando informações da imagem com o QEMU #
Você pode recuperar informações da imagem do dispositivo de blocos usando o QEMU. Você deve especificar rbd
, o nome do pool e o nome da imagem.
qemu-img info rbd:pool-name/image-name
Por exemplo:
qemu-img info rbd:pool1/image1 image: rbd:pool1/image1 file format: raw virtual size: 9.0G (9663676416 bytes) disk size: unavailable cluster_size: 4194304
27.6 Executando o QEMU com o RBD #
O QEMU pode acessar uma imagem como dispositivo de blocos virtual diretamente pelo librbd
. Isso evita um switch de contexto adicional e pode ser melhor do que o cache do RBD.
Você pode usar qemu-img
para converter as imagens existentes de máquinas virtuais em imagens de dispositivos de blocos do Ceph. Por exemplo, se você tem uma imagem qcow2, pode executar:
qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12
Para executar uma inicialização de máquina virtual dessa imagem, você pode executar:
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12
O cache do RBD pode melhorar o desempenho significativamente. As opções de cache do QEMU controlam o cache do librbd
:
#
qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback
Para obter mais informações sobre cache do RBD, consulte a Seção 20.5, “Configurações de cache”.
27.7 Habilitando descarte e TRIM #
Os dispositivos de blocos do Ceph suportam a operação de descarte. Isso significa que um convidado pode enviar solicitações TRIM para permitir que um dispositivo de blocos do Ceph reaproveite o espaço não usado. Para habilitar esse recurso, monte o XFS
com a opção de descarte.
Para que ele fique disponível ao convidado, é necessário habilitá-lo explicitamente no dispositivo de blocos. Para fazer isso, você deve especificar discard_granularity
associado à unidade:
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
O exemplo acima usa o driver IDE. O driver virtio não suporta descarte.
Se for usar o libvirt
, edite o arquivo de configuração do domínio libvirt usando virsh edit
para incluir o valor xmlns:qemu
. Em seguida, adicione qemu:commandline block
como filho desse domínio. O exemplo a seguir mostra como definir dois dispositivos com qemu id=
com valores discard_granularity
diferentes.
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <qemu:commandline> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-0.discard_granularity=4096'/> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-1.discard_granularity=65536'/> </qemu:commandline> </domain>
27.8 Definindo as opções de cache do QEMU #
As opções de cache do QEMU correspondem às seguintes configurações de Cache do Ceph RBD.
Writeback:
rbd_cache = true
Writethrough:
rbd_cache = true rbd_cache_max_dirty = 0
Nenhuma:
rbd_cache = false
As configurações de cache do QEMU anulam as configurações padrão do Ceph (configurações que não são explicitamente definidas no arquivo de configuração do Ceph). Se você definir explicitamente as configurações de Cache do RBD no arquivo de configuração do Ceph (consulte a Seção 20.5, “Configurações de cache”), as configurações do Ceph anularão as configurações de cache do QEMU. Se você definir as configurações de cache na linha de comando do QEMU, elas anularão as configurações do arquivo de configuração do Ceph.