Virtualização com KVM

KVM (Kernel-based Virtual Machine)

KVM Banner Logo

KVM Banner Logo

Trata-se de uma solução de virtualização (Intel VT ou AMD-V). Consiste de um módulo de kernel kvm.ko, que fornece a infra-estrutura de virtualização do núcleo e um módulo de processador específico, kvm-intel.ko ou kvm-amd.ko. O KVM também requer um QEMU modificado.

Com o KVM, é possível executar múltiplas máquinas virtuais rodando imagens de GNU/Linux ou Windows. Cada máquina virtual tem hardware virtual privado: uma placa de rede, disco, placa gráfica, etc.
O componente KVM do kernel está incluído na árvore principal do mesmo desde a versão 2.6.20. O KVM é um software de código aberto.

Após uma breve explicação vamos instalar e configurar o KVM

Primeiramente vamos verificar se há o suporte de Virtualização em seu processador:

# grep -E ‘(vmx|svm)’ –color=auto /proc/cpuinfo

grep -E ‘(vmx|svm)’ –color=auto /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save

Se nada em destaque aparecer, significa se seu processador não oferece suporte a virtualização e você não poderá prosseguir com esse post.

Mas no caso de positivo, instale os pacotes abaixo:

# apt-get install kvm qemu-kvm libvirt-bin virtinst

Vamos adicionar o usuário aos grupos libvirt e kvm:

# usermod -a -G libvirt ricardo

# usermod -a -G kvm ricardo

Obs.: Para que essas mudanças tenham efeito será necessário o logout do usuário e verifique com o comando abaixo se o usuário aparece nos grupos:

# groups

Vamos verificar se o KVM  foi corretamente instalado com o comando:

# virsh -c qemu:///system list

Id Name                           State
———————————-

Se nenhum erro aparecer podemos prosseguir com o post. Se o pacote bridge utils não estiver instalado instale-o:

# apt-get install bridge-utils

E para configurar vamos editar o arquivo /etc/network/interfaces para configurar a bridge:

# This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
# The loopback network interface
 auto lo
 iface lo inet loopback
# The primary network interface
 auto eth0
 iface eth0 inet manual
auto br0
 iface br0 inet static
 address 10.5.1.60
 network 10.5.1.0
 netmask 255.255.255.0
 broadcast 10.5.1.255
 gateway 10.5.1.254
 bridge_ports eth0
 bridge_fd 9
 bridge_hello 2
 bridge_maxage 12
 bridge_stp off

Feito isso vamos reiniciar o serviço de rede:

# /etc/init.d/networking restart

CRIAR A MÁQUINA VIRTUAL

Para tal irei utilizar o virt-install para a instalação da máquina virtual (Debian):

# virt-install –connect qemu:///system -n debian_squeeze -r 1024 –vcpus=3 –disk path=/var/lib/libvirt/images/debian_squeeze.img,size=12 -c /dev/cdrom –vnc –noautoconsole –os-type linux –os-variant debiansqueeze –accelerate –network=bridge:br0 –hvm

Starting install...
 Allocating 'debian_squeeze.img' |  12 GB     00:00
 Creating domain...    |    0 B     00:00
 Domain installation still in progress. You can reconnect to
 the console to complete the installation process.
 root@debian:~#

Vamos utilizar um Desktop Ubuntu para a instalação do virt-manager e terminar a instalação

Depois de instalado vá em – Aplicativos – Ferramentas de sistema – Gerenciador de Máquinas Virtuais.
No virt-manager clique em – Arquivo – Adicionar Conexão
Hypervisor: QEMU/KVM
Conexão: Túnel remoto por SSH
Nome da máquina: 10.5.1.60
Clique em conectar, se for a 1a. conexão digite yes para armazenar o fingerprint do servidor ssh, e digite a senha.
Clique na máquina squeeze e depois em abrir
Faça a instalação do máquina virtual Debian Squeeze a seu gosto
Depois de instalado você terá uma máquina virtual utilizando o KVM, divirtam-se com a máquina recém criada.
Espero que tenham gostado do post e não se esqueçam de assinar o nosso portal.



Sobre Ricardo Pinheiro

Profissional de TI: Consultor Linux Instrutor Linux Certificado LPIC-3 Certificado Novell CLA Cursando Gestão de TI
Esta entrada foi publicada em Linux e marcada com a tag , , , , , . Adicione o link permanente aos seus favoritos.

22 respostas a Virtualização com KVM

  1. Rodrigo Ramos disse:

    Ja lido um pouco sobre isso em uma revista, parece ser um projeto legal.

    Mas vc teria como fazer um comparativo entre outra soluções, tipo vantagens e desvantagens???


    • Rodrigo,

      Esse tipo de comparação pode ser origem de um novo post, como existem hoje algumas soluções de virtualização tanto para linux quanto para windows. Vamos elaborar um post com estas soluções, só não podemos prometer para agora.

      Abraços.

  2. saefafs disse:

    Trabalho com o KVM.

    Muito boa ferramenta para virtualização. Otimo desempenho e facilidade para backup, principalmente incremental.

    mas acho que VMWare e HyperV tem mais recursos.

    VLW


    • Realmente o KVM é muito bom, mas como você mesmo disse outras soluções possuem mais recursos. Acredito que o KVM irá crescer, pois grandes empresas estão investindo nesta tecnologia.

      Abraços


  3. O Hyper-V está se tornando realmente interessante na versão do Windows 8 Server.

    Particularmente e atualmente, prefiro trababalhar com o XenServer que possui uma versão free bastante funcional.

  4. Edson disse:

    Muito bom,

    Porém fiquei com uma dúvida, como posso fazer as máquinas virtuais inicializarem quando a máquina for reiniciada, pois pretendo implantar um ambiente de teste virtualizado.

    fico grato pela resposta.

  5. Edson disse:

    Corrigindo a pergunta, como posso fazer as máquinas virtuais iniciarem junto com a máquina real,q uando a máquina real for reiniciada ?

    Fico grato pelo retorno.

    • Rafael disse:

      Edson, esta opção é possível na interface de gerenciamento do Virt-Manager.
      Siga os passos:

      - Desligue sua VM;
      - Selecione a VM e clique em “Abrir”
      - Selecione o “I” Azul!!
      - Clique em “BootOptions”

      Verá a opção “Inicializar máquina virtual na inicialização do host”

      Basta marcar esta opção!

      Flw!

  6. Paulo Sizino disse:

    Olá, cara eu uso KVM aqui na empresa, mas uso pq quando entrei aqui já era esta infra.. pretendo mudar no futuro para hyper-V server 2012, mas não agora…
    Mas estou querendo aderir o System Center VMM, vi que o SCVMM tem a opção de gerenciar tb servidores Xen… fiz um teste aqui se conseguiria adicionar um srv KVM, mas n consegui, ai fica minha pergunta…
    Tenho como gerenciar um srv KVM via SCVMM? ja que ele tem suporte ao Xen.

    Abraços.


  7. Boa tarde.
    Estou com uma dúvida com relação a placas virtuais de rede.
    No virtualbox, temos 04 placas virtuais de rede, pré-existentes, para serem utilizadas.
    No KVM há apenas uma.
    Tem como acrescentar mais placas de rede virtuais para que o KVM possa vir a utilizá-las semelhantemente ao virtualbox?

    • Rafael disse:

      Olá Marcos..acho que entendi sua pergunta.

      No VirtualBox já vem 4 interfaces de rede para utilizar, enquanto que no KVM vem apenas uma, quando você cria uma VM. É possível sim adicionar mais placas de rede, assim como qualquer outra interface. Utilizando VirtManager, após abrir a VM e clicar no ( i ) azul { Mostrar detalhes da VM } você poderá clicar em (Adicionar máquina) lá embaixo, depois em ( Network ) acima. Do lado direito você define o dispositivo host ( Nat / bridge ) e clique em (Concluir).

      Repita o processo para cada inserção que precise.

      Espero ter ajudado

  8. sizino disse:

    Marcos Dunguel, Você quis dizer em relação a VM ou em relação a virtualização com KVM ?
    Quando vc tem mais de uma placa de rede, vc pode usa-las no KVM normalmente como o VirtualBox, exemplo se vc configurar as 4 placas de rede como br0, br1, br2, br3 (seriam os nomes das 4 placas), ai vc poderia usa-las nas VMs, ai vc poderia configurar de 2 modos, tanto gráfico, quanto por texto.
    No gráfico vc vai usar o Gerenciador de Maquinas Virtuais, vai na opção da VM e vai adicionar um hardware e vai escolher a rede, dai ela vai perguntar qual rede vc vai querer usar, ai vc vai dizer se é br0,br1,br2 ou br3. Fora esse método, vc pode configurar via texto indo direto no xml da maquina virtual e adicionar a placa de rede, dizendo qual rede vc vai usar tb.. br0,br1,br2 ou br3.

    bem.. foi um resumão, acho que o pessoal pode dar mais detalhes, espero que tenha ajudado.


  9. Obrigado Rafael e Sizino.
    Nas duas respostas sobre a minha dúvida, vocês utilizaram a interface gráfica.
    Como posso fazer a mesma operação só que utilizando a linha de comando?
    No aguardo.
    Marcos Dunguel

    • sizino disse:

      Olá Marcos, via linha de comando você vai fazer o seguinte, no KVM a pasta padrão que os “.XML” ficam salvos é no diretório “/etc/libvirt/qemu/”, acesse ele e com o comando “vim” ou “nano”, ex: “vim VM.xml”
      Vai abrir um texto ai vc vai encontrar o seguinte código no meio do texto:

      Você pode duplicar esse código e alterar o mac address para n dar conflito e na source bridge vc vai dizer com qual placa de rede vc vai usar para transmissão de dados.
      Depois salva e inicia a maquina, vai ter uma nova placa de rede na VM.

    • sizino disse:

      o código n apareceu no post anterior

    • sizino disse:

      interface type=’bridge’
      mac address=’52:54:00:fb:3c:63′/
      source bridge=’br2′/
      address type=’pci’ domain=’0×0000′ bus=’0×00′ slot=’0×03′ function=’0×0′/
      /interface

      • Marcos Dunguel disse:

        Então, pelo que eu entendi, que escolhe o mac address sou eu.
        Posso por qualquer valor?
        A propósito, essa máquina terá somente uma placa de rede física, algum problema?
        Outro sim, é que estou querendo salvar as máquinas virtuais em um hd externo, posso fazer isso?

        • sizino disse:

          Sim, sobre o mac vc criando na mão assim vc escolhe, seguindo o padrão;
          - sobre usar somente 1 física, não tem problema, lembrando que se for ser uma grande quantidade de carga de dados saindo pelas placas de rede, pode ser que fique lento pq esta usando somente uma saída;
          - sobre salvar as VMs num HD Externo, eu n aconselho, pq fica muito lento a execução da VM de um hd Externo, recomendo vc a usar a vm em disco local e fazer backups da vm em hd externo durante o fim de semana via crontab.

          espero que tenha ajudado!

  10. Marcos Dunguel disse:

    Mais uma pergunta, onde e quais são os diretórios/arquivos/pastas que o KVM usa.
    Pois estou com uma idéia de colocar estas máquinas virtuais em um outro local.
    Motivos: segurança e facilitar o backup das mesmas.
    Marcos Dunguel

    • sizino disse:

      no:
      /etc/libvirt/
      ficam as configurações do KVM (qemu) e das VMs
      em
      /var/lib/libvirt
      ficam opções de boot, as imagens da VM
      Agora como já falei, cuidado para não colocar num hd Externo e ficar muito lento o processo, pra falar a verdade nunca testei se funciona em hd externo, mas vai ficar muito lento, cuidado.

      • Marcos Dunguel disse:

        Obrigado pelas dicas.
        Não utilizarei mais o HD externo para armazenar as máquinas que eu criar, vou adicionar mais um HD para isso.
        A máquina em si tem 80GB HD, processador Intel xeon de 8 núcleos, placa mãe para servidor Intel, 16GB RAM e colocarei um segundo HD de 1TB, onde instalarei as máquinas virtuais.
        No segundo HD irei utilizar LVM para poder ficar mais fácil redimensionar.

Deixe uma resposta