KVM

Configurando Libvirt QEMU e pilha KVM no Debian

Configurando Libvirt QEMU e pilha KVM no Debian
A virtualização baseada em QEMU-KVM está no coração da pilha de virtualização baseada em Linux. É gratuito e de código aberto e é uma das tecnologias de virtualização mais prevalentes na indústria. A maioria dos provedores de serviços em nuvem usa KVM e por um bom motivo. Ele oferece uma pilha de virtualização muito eficiente, mas muito segura, e não há licenciamento complicado para lidar com. Este não é o caso com sua configuração típica de Hyper-V ou VMWare. A desvantagem, no entanto, é que a configuração pode ser muito complexa, especialmente para usuários inexperientes. Este artigo visa reduzir essa complexidade para o leitor.

Com isso dito, vamos tentar configurar nosso próprio hipervisor KVM em um servidor Debian 9 .

Habilitando extensões VT-x ou AMD-V

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 das CPUs modernas da Intel suportam extensões VT-x e, da mesma forma, a AMD tem suas extensões AMD-V. Essas extensões são “aprimoramentos” embutidos no silício de sua CPU, o que permite uma virtualização mais rápida e segura. Você deve habilitar essas extensões de dentro do menu BIOS / UEFI da sua placa-mãe. Consulte o manual da placa-mãe para obter mais informações.

Se você não quiser manchar sua estação de trabalho Linux perfeitamente funcional, você pode usar uma máquina virtual na nuvem para executar esses experimentos. DigitalOcean, por exemplo, oferece máquinas virtuais com virtualização aninhada habilitada. Isso permite que você execute VMs dentro de sua VM hospedada em nuvem (isso é conhecido como virtualização aninhada). Obviamente, esta será uma maneira muito ineficiente de praticamente executar um hipervisor, mas como um experimento, funcionará perfeitamente. Certifique-se de obter pelo menos 4 GB de memória e mais de 2 CPUs.

Depois de habilitar as referidas extensões, você pode verificar executando lscpu e procurando a entrada Virtualization:

$ lscpu
… .
Virtualização: VT-x
… .

Agora que temos as extensões habilitadas, é hora de subir ainda mais na pilha.

Instalando KVM e QEMU

KVM (ou Kernel-Based Virtual Machine) consiste em alguns módulos do kernel Linux que tirarão vantagem das extensões de CPU que habilitamos anteriormente. O QEMU, por outro lado, consiste em um monte de programas de área de usuário que nos fornecem recursos de emulação. Como um software autônomo, o QEMU pode ser usado para executar programas de uma arquitetura, como ARM, em outra como x86_64 e vice-versa. Ele pode ser usado para executar qualquer coisa, desde um único arquivo binário até um sistema operacional completo.

Vamos, é claro, usá-lo apenas para virtualizar 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
irqbypass 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 um wrapper de software para gerenciar todas as várias demandas, como rede, gerenciamento de sistema de arquivos, etc. de uma forma bastante automatizada (e escalonável). Para fazer isso, precisamos da biblioteca / daemon de virtualização Libvirt.

Instalando Libvirt

Libvirt é uma parte essencial de sua pilha de virtualização. O daemon libvirtd executa serviços relacionados à virtualização em segundo plano. Serviços que ouvem solicitações como “Criar uma VM”, “Destruir uma VM”, “Criar uma rede”, etc e executá-los usando os utilitários básicos do Linux como binários qemu, iptables, etc.

Libvirt é muito generalizado e pode ser usado para gerenciar convidados KVM, contêineres LXC e pilha de virtualização Xen. Vamos nos concentrar apenas no Libvirt para convidados KVM por enquanto. Libvirtd expõe uma API que pode ser consumida por aplicativos GUI como virt-manager ou oVirt ou ferramentas de linha de comando como virt-install, virsh, etc. Podemos escrever até mesmo nossos próprios clientes personalizados que usam a mesma API padrão.  Estaremos usando 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 virtinst

Também precisaremos de outro pacote libguestfs-tools, para nos ajudar a editar ou modificar os discos rígidos e sistemas de arquivos da VM guest.

Excelente! Agora, instalamos toda a pilha e sabemos como a arquitetura está disposta. Para usar a libvirt (e 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 iniciar 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 de linha de comando do virsh ou digitar virsh [Opções] do seu shell regular. Consulte a saída da ajuda do virsh sempre que você ficar preso em 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 reinicializar. Para verificar os detalhes sobre esta rede padrão, use o comando:

$ virsh net-dumpxml padrão

padrão
3d723dc6-49a4-4f73-bf6d-623d6b46b099












O arquivo xml pode mostrar a gama de endereços IP possíveis 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 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 a ISO de instalação para qualquer sistema operacional) e quantas CPUs e quanta memória precisa ser alocada para a VM, e se ela precisa de VNC. Esta etapa é onde você pode realmente apreciar um instalador GUI como o virt-manager, no entanto, faremos isso usando um comando virt-install bastante complexo.

Eu gosto de manter todas as minhas mídias de boot em / var / lib / libvirt / boot e todas as VMs e seus discos rígidos virtuais em / var / lib / libvirt / images (o local padrão), isso simplifica a organização.

$ cd / var / lib / libvirt / boot
$ wget http: // releases.ubuntu.com / 18.04.2 / ubuntu-18.04.2-desktop-amd64.iso

O comando acima obtém o ISO do desktop do Ubuntu, você pode obter facilmente o CentOS ou qualquer outra distribuição que desejar.

Para criar uma nova VM e inicializá-la, 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, ouvir = 0.0.0.0, porta = 5900 \
--noautoconsole

O comando acima é, de fato, complicado. Eu sugiro salvar esses comandos em 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 são bastante autoexplicativos. Eles são entediantes de escrever.

A última opção para exibição VNC iniciará um servidor VNC e permitirá que você tenha acesso de console à sua VM remotamente, conectando-se à porta 5900 do host. Abra um cliente VNC em seu desktop 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 de sua VM e você poderá prosseguir com a instalação.

Onde a próxima?

A partir daqui, você pode tentar pausar, interromper e excluir as VMs. Você também pode modificar a infraestrutura subjacente, adicionando pools para armazenamento e configurando 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 do disco rígido salvos em / lib / libvirt / images, mesmo depois de remover a VM da libvirt. Para automatizar ainda mais as coisas, tente importar imagens qcow2 que a maioria das distribuições de Linux como Ubuntu e CentOS. Eles têm o sistema operacional pré-instalado.

Conclusão

Configurar isso não é tão fácil quanto configurar o VirtualBox e a razão por trás disso é múltipla. A maioria da pilha é complicada porque é projetada para ser modular e altamente escalonável. Ele não faz suposições 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 até certo ponto. No entanto, esses sistemas são projetados para funcionar com uma API REST para se conectar aos sistemas de faturamento, sistemas de monitoramento, etc. da sua organização. Eles quase nunca são tocados por um humano após serem implantados.

Dito isso, automação é o nome do jogo com libvirt e qemu-kvm. Leia atentamente a documentação oficial e escreva seu próprio script legal para criar uma frota de VMs e nos diga se você achou este tutorial útil.

Como mostrar o contador de FPS em jogos Linux
Os jogos Linux tiveram um grande impulso quando a Valve anunciou o suporte Linux para o cliente Steam e seus jogos em 2012. Desde então, muitos jogos ...
Como baixar e jogar Sid Meier's Civilization VI no Linux
Introdução ao jogo Civilization 6 é uma versão moderna do conceito clássico introduzido na série de jogos Age of Empires. A ideia era bastante simples...
Como instalar e jogar Doom no Linux
Introdução ao Doom A série Doom teve origem nos anos 90 após o lançamento do Doom original. Foi um sucesso instantâneo e, a partir desse momento, a sé...