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 8.3, “Instantâneos de dispositivo de blocos” 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://www.suse.com/documentation/sles-12/book_virt/data/part_virt_qemu.html.
Para usar os dispositivos de blocos do Ceph, o QEMU precisa ter o driver apropriado instalado. Verifique se o pacote qemu-bloco-rbd
está instalado (instale-o se necessário):
sudo zypper install qemu-block-rbd
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
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.
É 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.
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
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
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>
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, elas 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.