Meus processos padrão (manualmente)
- Eu crio uma imagem de base.
- Da perspectiva da máquina host é apenas um arquivo .img ou .qcow2.
- Eu começo a duplicar a imagem de base
- Depois, altero o tamanho da imagem, se necessário
- Para .qcow2, uso o utilitário qemu-img convert.
- Para .img eu uso dd para acrescentar mais zeros no final da imagem.
- Em seguida, vou para a interface virt-manager e cria uma nova máquina virtual "usando a imagem existente". Nisso eu defini quanto processamento e memória eu preciso.
- inicializo a imagem da máquina e depois
- eu mudo o endereço IP
- eu mudo o nome do host
- eu removo as chaves sshd para forçar o sshd a gerar novas
- Eu redimensiono a partição / para usar o disco inteiro (isso é desnecessário se a imagem do convidado usar btrfs)
Tudo isso pode ser automatizado por um script de shell simples. A chave é aprender como usar o utilitário virsh para a criação do vms, certifique-se de que suas interfaces de rede sejam pontes, use o btrfs como sistema de arquivos guest. Então você pode duplicar a imagem, montar a imagem, alterar as configurações da imagem montada, desmontar a imagem, adicionar a vm com virsh e executar.
Eu ainda não fiz isso porque gerencio algumas VMs ... na verdade, uso o KVM para particionar um hardware enorme em dois ou três muito grandes. Eu sou um pouco autista nessa parte. Eu prefiro fazer meus próprios scripts para ter um alto grau de controle nesses aspectos.
Mais automatizado e fácil de usar
O que você está procurando é chamado openstack , que, como eu entendi, é muito amigável e pode usar o KVM, o VirtualBox, o LXD, o Xen, o VMWare como hypervisors. Uma interface para ligar todos eles.
Eu sei que existe. Parece bom. Servidor Ubuntu tem isso. Redhat também. Mas eu nunca toquei em um, porque virt-manager é o suficiente para mim.
Instantâneos
A mesma coisa que Iain sugeriu que fosse feita pelo ZFS, pode ser feita com o KVM padrão. O QCow2 suporta instantâneos. Isso significa que, para clusters, você pode criar uma imagem de base, criar a captura instantânea, montar a captura instantânea, alterar as configurações (IP, nome do host), desmontar e iniciar. A melhor parte é que apenas os setores alterados serão gravados no instantâneo.
Notas
Minha experiência é com 160 processadores lógicos / 2048 hosts de virtualização GiB divididos em até 10 máquinas virtuais. Todos esses são servidores linux (apache / php / postgres / java). Não tenho experiência alguma em centenas de pequenas máquinas virtuais em um grande hardware.
A propósito. Estou migrando do Debian e RedHat para o Ubuntu. A maior parte do que tenho está rodando no Ubuntu Server há anos. Os Legacy Debians vão morrer este ano. O legado RedHat no próximo ano. Não há muita diferença entre o Debian e o Ubuntu da perspectiva do servidor, eu escolho o Ubuntu porque coisas novas são empacotadas primeiro no Ubuntu.
ZFS
Eu testei o ZFS no linux alguns anos atrás e não percebi que era bom o suficiente para rodar servidores sérios nele. Eu escolho esperar pelo BTRFS e não tenho nada a reclamar. Eu estou usando em alguns dos meus servidores e minhas estações de trabalho. Vou mover meus servidores maiores para o início do ano que vem para melhorar meu backup.
Conclusão
Se a sua configuração for padronizada, talvez valha a pena reservar um tempo e criar seus próprios scripts, pois ele será muito automatizado. No entanto, se você precisar de vários tipos de appliances e lidar com diferentes necessidades do cliente, considere a possibilidade de aprender uma solução como o openstack.