Gold Image em QEMU. Como poupar espaço e otimizar os nossos virtualizadores KVM/QEMU/Proxmox

Olá a todos.

Depois da compra da vmware pela broadcom que causou a fuga em massa das plataformas de virtualização vmware para outro tipo de plataformas (por exemplo kvm/qemu – onde o proxmox se inclui) tenho visto algumas duvidas sobre a forma que o QEMU gere o espaço das imagens em disco, muitas delas por desconhecer a capacidade do conceito de gold image que também se aplica a este tipo de plataformas.

Em primeiro lugar é importante se saber o que é o QEMU . O QEMU é um emulador e virtualizador opensource que permite a execução de sistemas operativos e programas para diferentes arquiteturas de hardware em um sistema host. O QEMU alavanca a utilização de extensões existentes em processadores X86_64 para virtualização (o chamado KVM/AVM).
Se observarem os vossos servidores ou homelabs proxmox, ao nível de consola, quando tem um servidor virtual em execução, o que está a correr por baixo são binários QEMU.QEMU 6.2: RISC-V, SGX, Apple Silicon (M1) and more... | Linux Adictos

Outro dos  conceitos importantes no QEMU, e em virtualização em geral, é o uso de “gold images” ou imagens douradas. Este conceito refere-se a uma imagem de disco base, completamente configurada, a partir da qual podem ser criadas outras imagens em camadas. Utilizando imagens de disco em camadas baseadas em uma gold image, podemos poupar espaço de armazenamento e melhorar a performance. O post desta semana irá explorar estes conceitos e apresenta as melhores práticas para otimização no uso de imagens de disco lidas pelo QEMU.

O que é uma “Gold Image”?

Uma gold image é uma imagem de disco que serve como uma base padrão para a criação de múltiplas máquinas virtuais (VMs). Esta imagem é configurada com um sistema operativo e softwares necessários, representando um estado inicial ideal para novos ambientes. Pode-se aplicar em ambientes Windows, Linux e *BSD’s, sendo perfeitamente suportado em todos.
A criação de uma gold image envolve os seguintes passos:

  1. Instalação do Sistema Operativo: Instalem um sistema operativo limpo e atualizem-o com os últimos patches e atualizações.
  2. Instalação de Softwares Necessários: Incluam todos os softwares e ferramentas padrão que serão utilizados em todas as VMs derivadas desta imagem.
  3. Configuração: Ajuste configurações de sistema, rede, segurança, etc., conforme necessário para o ambiente alvo.
  4. Otimização: Realizem otimizações adicionais, como limpeza de arquivos temporários, desfragmentação (em sistemas que suportam) e ajustes de desempenho.
  5. Conversão e Compressão: Converta a imagem para um formato eficiente e, se necessário, comprimam-a para poupar espaço.

Utilização de Imagens de Disco em Camadas

No QEMU, uma das formas de otimizar o uso de gold images é através de imagens de disco em camadas. Estas imagens são baseadas na gold image, mas armazenam apenas as diferenças (ou deltas) feitas em relação a ela. Os principais benefícios são:

  1. Economia de Espaço: Como as imagens em camadas só armazenam as alterações, há uma significativa redução no espaço de armazenamento utilizado.
  2. Melhoria de Performance: A leitura da gold image (base) pode ser cached com muita eficiência, reduzindo o tempo de acesso ao disco.
  3. Facilidade de Gestão: Atualizações ou correções podem ser aplicadas na gold image e automaticamente refletidas nas imagens em camadas, simplificando a gestão de VMs.

Criando e Utilizando Imagens em Camadas no QEMU

1. Criação da Gold Image:

qemu-img create -f qcow2 gold-image.qcow2 20G
qemu-system-x86_64 -drive file=gold-image.qcow2,format=qcow2,if=virtio -m 2048 -enable-kvm -boot d -cdrom path/to/installer.iso

Neste ponto, instalamos e configuramos o sistema operativo no ficheiro`gold-image.qcow2`.

2. Criando uma Imagem em Camadas:

qemu-img create -f qcow2 -b gold-image.qcow2 layered-image.qcow2

Este comando cria `layered-image.qcow2` como uma camada baseada na `gold-image.qcow2`.

Executando uma VM com a Imagem em Camadas (neste caso em consola – adaptar na configuração do proxmox webui ou no ficheiro de configuração da VM em si):

qemu-system-x86_64 -drive file=layered-image.qcow2,format=qcow2,if=virtio -m 2048 -enable-kvm

A VM utilizará `layered-image.qcow2`, que contém as alterações feitas em relação à gold image.

Otimização de Espaço e Performance

Compactação e Desfragmentação de Imagens QCOW2

As imagens de disco no formato QCOW2 suportam compactação e outras funcionalidades avançadas que ajudam a poupar espaço. Para compactar uma imagem de disco QCOW2, pode-se usar:

qemu-img convert -O qcow2 source-image.qcow2 compressed-image.qcow2

Utilização de Cache

A configuração de cache melhora a performance de leitura/escrita em discos virtuais. O QEMU oferece várias opções de cache que podem ser configuradas ao iniciar uma VM:

Cache de escrita: `cache=writethrough` (seguro, mas mais lento) ou `cache=writeback` (mais rápido, mas com risco de perda de dados em caso de falha).
Cache de leitura: `cache=none` (direto para o disco, útil em dispositivos SSD).

qemu-system-x86_64 -drive file=layered-image.qcow2,format=qcow2,if=virtio,cache=writeback -m 2048 -enable-kvm

Copy-on-Write (COW)

Outra coisa fundamental que o QEMU suporta são formatos diferentes de disco virtual. Um dos mais versáteis é o formato QCOW2 pois suporta copy-on-write, permitindo que as alterações sejam gravadas apenas quando necessário, economizando espaço e melhorando a performance:

qemu-img create -f qcow2 -o backing_file=gold-image.qcow2 new-layered-image.qcow2

Benefícios e Considerações

Benefícios:

  1. Eficiência de Armazenamento: As imagens em camadas compartilham a mesma base, resultando em uma grande economia de espaço.
  2. Performance Aprimorada: O acesso à imagem base pode ser otimizado, e o uso de cache pode acelerar o desempenho da VM.
  3. Facilidade de Atualização: Atualizar a gold image reflete automaticamente em todas as imagens em camadas, simplificando a manutenção e gestão de múltiplas VMs.

Considerações

  1. Dependência da Gold Image: Se a gold image for corrompida ou deletada, todas as imagens em camadas associadas serão afetadas.
  2. Gestão de Snapshots: O uso de snapshots pode complicar o gerenciamento das imagens, pois cada snapshot representa um estado incremental.
  3. Performance de Gravação:Em alguns casos, a performance de gravação pode ser afetada devido ao overhead de manutenção das diferenças entre a imagem em camadas e a gold image.
  4. Patching e atualizações ao sistema operativo: As alterações de core ao sistema operativo, por exemplo patching, deverão ser sempre efetuadas na gold image. O recomendado nestes casos, é que as VM’s que estejam a utilizar a gold image como base, sejam desligadas, feito um backup e consequente patching ao sistema operativo da gold image original, e em seguida levantar as VM’s que dependem desta gold image.

Melhores Práticas

Backups regulares.

Realizem backups regulares da gold image e das imagens em camadas. Utilizem ferramentas de backup que suportem QEMU e formatos QCOW2 para garantir a consistência e a segurança dos dados.

Monitorização de Desempenho.

Monitorizem constantemente o desempenho das VMs e ajuste as configurações de cache e discos conforme necessário. Ferramentas como `iostat`, `vmstat` e a monitorização interna do QEMU irão provar ser úteis.

Manutenção de Imagens

  1. Compactação Regular: Utilizem o `qemu-img` para compactar regularmente as imagens de disco.
  2. Desfragmentação: Embora menos comum em sistemas de arquivos modernos, desfragmentar periodicamente pode melhorar a performance.
  3. Limpeza de Dados Temporários: Realizem limpezas regulares de arquivos temporários e logs dentro das VMs para evitar bloating desnecessário das imagens.

Segurança

Mantenham a a segurança das imagens de disco aplicando patches e atualizações regularmente na gold image. Utilize práticas de segurança robustas para proteger contra acesso não autorizado.

Conclusão

Chegamos ao fim de mais um post semanal. Neste, foi demonstrado que o uso de gold images e imagens de disco em camadas no QEMU é uma estratégia eficaz para otimizar o uso de espaço de armazenamento e melhorar a performance das VMs. Ao adotarmos  estas simples práticas recomendadas, como compactação regular, configuração de cache adequada e manutenção de backups, é possível maximizar os benefícios desta abordagem.
E com uma gestão eficiente, a utilização de gold images podemos simplificar significativamente a administração de ambientes virtualizados, oferecendo uma solução escalável e robusta para diferentes necessidades de TI.

Até a próxima semana. E já sabem, se alguma coisa estiver menos correta, é falar comigo para que proceda a correção.
Abraço,

Nuno