Com isso dito, vamos tentar configurar nosso próprio hipervisor KVM em um servidor Debian 9 .
Idealmente, você precisará de uma instalação limpa de sua distribuição Linux favorita em uma máquina (não uma VM) que tenha uma CPU bastante moderna. A maioria dos Intel CPUs modernos suportam extensões VT-X e, da mesma forma, a AMD tem suas extensões AMD-V. Essas extensões são "aprimoramentos" incorporados ao silício da sua CPU, que permite a virtualização mais rápida e segura. Você precisa ativar essas extensões de dentro do menu BIOS/UEFI da placa -mãe. Consulte o manual da sua placa -mãe para obter mais informações.
Se você não quiser manchar sua estação de trabalho Linux perfeitamente funcionando, você pode usar uma máquina virtual na nuvem para executar essas experiências. Digitalocean, por exemplo, oferece máquinas virtuais que aninharam a virtualização habilitada. Isso permite que você execute VMs dentro da sua VM hospedada em nuvem (isso é conhecido como virtualização aninhada). Obviamente, essa será uma maneira muito ineficiente de praticamente executar um hipervisor, mas como um experimento, isso vai dar certo. Certifique -se de obter pelo menos 4 GB de memória e mais de 2 CPUs.
Depois de ativar as extensões referidas, você pode verificar isso executando a LSCPU e procurando a entrada da virtualização:
$ lscpu
.. .
Virtualização: VT-X
.. .
Agora que temos as extensões que permitiram tempo para subir ainda mais na pilha.
Instalando KVM e Qemu
KVM (ou máquina virtual baseada em kernel) consiste em alguns módulos do kernel Linux que aproveitarão as extensões da CPU que ativamos anteriormente. O Qemu, por outro lado. Como um software independente, o Qemu pode ser usado para executar programas de uma arquitetura, como o ARM, em outro como x86_64 e vice -versa. Pode ser usado para executar qualquer coisa de um único arquivo binário a um sistema operacional completo.
Obviamente, usaremos -o apenas para virtualizar os sistemas operacionais x86_64 na plataforma x86_64. E para isso precisamos apenas de um único pacote:
$ sudo apt install qemu-kvm
Você pode verificar se o pacote carregou todos os módulos necessários, executando:
$ lsmod | Grep KVM
KVM_INTEL 200704 0
KVM 598016 1 KVM_INTEL
IRQBYPASSS 16384 1 KVM
Isso é tudo que você precisa, teoricamente. Mas você logo perceberá que isso é prático. As máquinas virtuais são extremamente complexas e exigimos que o wrapper de software gerencie todas as várias demandas, como rede, gerenciamento do sistema de arquivos etc. de uma maneira razoavelmente automatizada (e escalável). Para fazer isso, precisamos da Biblioteca/Daemon da Virtualização da Libvirt.
Instalando o LibVirt
Libvirt é uma parte por excelência da sua pilha de virtualização. O daemon Libvirtd executa serviços relacionados à virtualização em segundo plano. Serviços que ouve solicitações como "Criar uma VM", "Destruir uma VM", "Criar uma rede", etc. e os executa neles usando os utilitários básicos de Linux, como binários qemu, iptables, etc.
O LibVirt é muito generalizado e pode ser usado para gerenciar convidados KVM, contêineres LXC e pilha de virtualização Xen. Vamos apenas nos concentrar no LibVirt para os convidados da KVM por enquanto. LibVirtd expõe uma API que pode ser consumida por aplicativos de GUI, como o Manager Virt-Manager ou o Ovirt ou a Linha de Comando como Virt-Install, Virsh, etc. Podemos escrever até nossos próprios clientes personalizados que usam a mesma API padrão. Usaremos as ferramentas de linha de comando, como Virsh e Virt-Install, para manter as coisas padronizadas.
Vamos instalar todas essas ferramentas:
$ apt install libvirt-clients libvirt-daemon-system virinst
Também precisaremos de outro pacote libguestfs-tools, para nos ajudar.
Ótimo! Agora instalamos a pilha inteira e sabemos como a arquitetura é definida. Para usar o LibVirt (e as ferramentas relacionadas), adicione seu usuário aos grupos LibVirt-Qemu e Libvirt.
$ sudo userMod -AG Libvirt
$ sudo userMod -AG libvirt -qemu
Ou execute os comandos como usuário root.
Virsh e iniciando a rede padrão
O utilitário de linha de comando virsh é algo que você usará muito, ao gerenciar suas VMs. Você pode simplesmente digitar Virsh e entrar na interface da linha de comando Virsh ou digitar Virsh [Opções] do seu shell comum. Passe pela saída de ajuda Virsh sempre que estiver preso a alguma operação relacionada à VM.
O primeiro comando virsh que usaremos invocará a rede padrão à qual uma VM pode se conectar:
$ Virsh Net-Autostart Padrão
$ virsh net-start padrão
Isso iniciará a rede padrão e garantirá que ela seja iniciada automaticamente quando o host reiniciar. Para verificar os detalhes sobre esta rede padrão, use o comando:
$ virsh let-dumpxml padrãopadrão 3D723DC6-49A4-4F73-BF6D-623D6B46B099
O arquivo XML pode mostrar a gama de possíveis endereços IP e como eles se comunicarão com o mundo exterior. Basicamente, o tráfego chegará a eles por meio de um NAT e eles não farão parte da rede externa do seu host. Você pode usar o Bridge Networking para expor cada VM à LAN da máquina host.
Para iniciar uma máquina virtual
Para iniciar uma máquina virtual, precisamos de uma mídia de instalação (como o ISO de instalação para qualquer sistema operacional) e quantas CPUs e quanta memória precisa ser alocada para a VM, e se precisar do VNC. Esta etapa é onde você pode realmente apreciar um instalador da GUI como o Virt-manager, no entanto, faremos isso usando um comando bastante complexo da Virt-Install.
Eu gosto de manter toda a minha mídia de inicialização em/var/libVirt/bota e todas as VMs e seu disco rígido virtual em/var/lib/libvirt/imagens (o local padrão) Isso simplifica a organização.
$ cd/var/lib/libvirt/bota
$ wget http: // libera.Ubuntu.com/18.04.2/Ubuntu-18.04.2-DESKTOP-AMD64.ISO
O comando acima busca o Ubuntu Desktop ISO, você pode facilmente obter o CentOS ou qualquer outra distribuição que desejar.
Para criar uma nova VM e inicializá -lo, execute:
$ virt-Install-Virt-Type KVM \
--nome myvm \
--Memória 2048 -VCPUS = 2 \
--cdrom/var/lib/libvirt/boot/ubuntu-18.04.2-DESKTOP-AMD64.ISO \
--Tamanho do disco = 40 \
--Gráficos VNC, ouça = 0.0.0.0, porta = 5900 \
--Noautoconsole
O comando acima é, de fato, complicado. Sugiro salvar esses comandos nos arquivos de texto e executá -los como scripts executáveis sempre que você criar uma nova VM. A maioria dos parâmetros como Virt-Type e Virt-Name é bastante auto-explicativa. Eles são tediosos para escrever.
A última opção para exibição VNC iniciará um servidor VNC e permitirá que você tenha acesso ao console à sua VM remotamente, conectando -se à porta 5900 do host. Abra um cliente VNC na sua área de trabalho e vá para o IP do seu host KVM na porta 5900. Certifique -se de alcançar o IP do host e não o IP da VM. Seu VNC se conectará à saída de vídeo da sua VM e você poderá prosseguir com a instalação.
Onde a próxima?
A partir daqui, você pode tentar fazer uma pausa, parando e excluindo as VMs. Você também pode modificar a infraestrutura subjacente adicionando pools para armazenamento e configuração de redes de ponte. Todos os arquivos de configuração, para VMs individuais, interfaces de rede e pools de armazenamento são armazenados em/etc/libvirt/e/etc/libvirt/qemu.
Às vezes você terá que excluir fisicamente os arquivos de disco rígido salvos em/lib/libvirt/imagens mesmo depois de remover a VM da libvirt. Para automatizar ainda mais as coisas, tente importar imagens QCOW2 que a maioria das distribuições Linux como Ubuntu e CentOS. Estes têm o sistema operacional pré -instalado neles.
Configurar isso não é tão fácil quanto configurar o VirtualBox e a razão por trás disso é múltipla. A maior parte da pilha é complicada porque foi projetada para ser modular e altamente escalável. Não faz nenhuma suposição sobre onde você está executando a VM. O ambiente pode ser um desktop pessoal ou um data center. Trabalhar com uma GUI pode ajudar a reduzir essa complexidade em certa medida. No entanto, esses sistemas foram projetados para funcionar com uma API REST para se conectar aos sistemas de cobrança, sistemas de monitoramento da sua organização, etc. Eles quase nunca são tocados por um humano depois de serem implantados.
Dito isto, a automação é o nome do jogo com Libvirt e Qemu-KVM. Examine a documentação oficial e escreva seu próprio script legal para aumentar uma frota de VMs e nos informe se você achou este tutorial útil.