DevSecOps

31 jan, 2012

Virtualização com KVM no Linux

Publicidade

Virtualização significa a utilização de um sistema operacional real sobre uma máquina virtual. Isto é, qualquer sistema operacional pode ser instalado sobre uma máquina virtual emulando o comportamento de uma máquina real. Assim, o sistema operacional funciona sem conhecimento, na maioria das vezes, de que está sobre uma camada de software, e não diretamente sobre o hardware.

A virtualização está em evidência atualmente. Um dos motivos para sua ascensão é a evolução da capacidade de processamento e memória dos servidores, que permite executar máquinas virtuais em praticamente qualquer hardware disponível atualmente. Outro motivo é a necessidade de economia de energia, espaço e custo nos Data Centers, que a virtualização permite através da consolidação em um único hardware de servidores que no passado precisariam de suas próprias máquinas físicas.

Embora virtualização seja uma palavra da moda hoje em dia, o conceito já existe há muito tempo. Algumas máquinas IBM foram pioneiras em sua utilização, ainda na década de 70. O conceito de virtualização é simples, embora a implementação contenha aspectos de difícil entendimento, uma vez que um sistema computacional precisa ser completamente emulado.

Na arquitetura que apresentamos aqui, esta emulação é feita por um software chamado Qemu, que em conjunto com o KVM (Kernel Virtual Machine), que é um módulo de kernel, provê a pilha de software necessária para a virtualização em Linux.

No mundo da virtualização, a máquina que prove a virtualização é chamada de hospedeiro, ou host, enquanto a máquina virtualizada tem o nome de guest. A máquina guest, no caso do Qemu, é sempre vista como um (ou mais) processos na maquina host.

Casos de uso

A virtualização de sistemas operacionais tem inúmeras utilidades, entre elas:

  • Flexibilidade: Algumas vezes é necessário utilizar um software que só existe para uma determinada plataforma (por exemplo o Windows 2000, ou XP). Neste caso, pode-se manter uma máquina virtual com o SO específico instalado e ligá-la somente quando houver necessidade;
  • Consolidação: No caso de possuir várias máquinas físicas diferentes, pode-se substituí-las por somente um servidor mais potente com várias máquinas virtuais, economizando o custo com hardware, eletricidade e espaço físico; além de facilitar a administração;
  • Segurança: Ao invés de concentrar vários serviços (banco de dados, web server, servidor de e-mail) em um só servidor, spode-se criar uma máquina virtual para cada um, garantindo, assim, que caso ocorra uma invasão os outros serviços permanecerão intactos;
  • Testes e desenvolvimento de software: Um desenvolvedor web, por exemplo, pode usar máquinas virtuais para testar um site em vários sistemas operacionais e navegadores diferentes sem precisar reiniciar o computador ou trocar de máquina.

Virtualização no Linux

Atualmente, existem inúmeros softwares que permitem a criação de máquinas virtuais, sendo os mais conhecidos VMWare, VirtualBox, e o Kernel Based Virtual Machine (KVM) no Linux.

Neste artigo descreveremos o KVM, um ótimo virtualizador gratuito disponível para inúmeros tipos de uso, inclusive em ambientes corporativos com alta demanda de processamento e disponibilidade. O KVM é um subsistema do Linux que, quando utilizado com o Qemu, permite a criação de máquinas virtuais que executam com baixo overhead, isto é, o sistema operacional na máquina virtual funciona em uma velocidade próxima da real (caso estivesse na máquina física).

Ferramentas de gerenciamento

O sistema de virtualização do KVM conta com um sistema de gerenciamento chamado de Virt-manager, que provê um ambiente gráfico através do qual se pode criar, configurar e alterar os parâmetros da máquina virtual a ser usada, incluindo memória, configurações de rede e disco.

Há também uma série de utilitários adicionais para efetuar algumas tarefas auxiliares:

  • virt-install – criação de máquinas virtuais novas;
  • virt-clone – criação de uma cópia de uma máquina virtual existente;
  • virt-img – criação de uma nova imagem de disco, a ser usado para simular um disco virtual;
  • virt-viewer – possibilita a interação com a interface gráfica da máquina virtual.

Configurando um ambiente para virtualização

Para configurar um ambiente com máquinas virtuais no Linux iremos utilizar um host Linux Ubuntu Server Edition versão 10.04.

O processo de instalação para hosts Ubuntu Desktop é exatamente o mesmo e pode ser realizado desta mesma forma.

Requisitos mínimos do sistema

A priori, não existe uma configuração de hardware mínima para que seja possível rodar máquinas virtuais em um host Linux, porém, uma vez que o host irá abrigar outros sistemas operacionais, é aconselhável que ele tenha as seguintes configurações mínimas para que o sistema seja minimamente utilizável:

- Processador Dual Core 1.5 GHz ou maior
- 2 GB ou mais de memória RAM

Existem alguns processadores que possuem suporte à virtualização nativa. Neste caso, o desempenho dos guests chega a ser comparado com o do host. Para checar se um processador possui este suporte, execute o comando abaixo, e verifique se a saída contém a flag vmx.

#egrep '(vmx|svm)' --color=always /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm ida dts tpr_shadow vnmi flexpriority
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm ida dts tpr_shadow vnmi flexpriority

Instalação dos pacotes no host

Para instalar o sistema KVM na sua máquina, basta executar os comandos abaixo:

# apt-get install kvm
# apt-get install libvirt virt-manager

O Ubuntu Server não possui interface gráfica, o que é um problema porque o virt-manager não pode rodar em modo texto. Este problema pode ser solucionado basicamente de duas formas:

1. Instalando um gerenciador gráfico e logando localmente no host:

# apt-get install gdm

A instalação do pacote GDM irá instalar vários outros pacotes para tornar possível o login gráfico. Após a instalação, faça login no host e abra no menu principal o virt-manager.

2 – Instalando o servidor de login remoto SSH e logando remotamente no host:

# apt-get install openssh-server

Neste caso, o acesso deverá ser feito de um outro terminal que possua interface gráfica. Deve ser aberto um shell neste terminal e conectar-se remotamente através do comando: ssh -X <user>@<host ip>. Após a autenticação, deve ser aberto o virt-manager através do comando: virt-manager.

Criação da máquina virtual

O primeiro passo para a criar uma máquina virtual é conectar no host.

Os passos seguintes são simples e diretos conforme as figuras abaixo:

Após o último passo, o sistema operacional guest começará a instalação. Assim, os procedimentos seguintes dependem to tipo do sistema operacional guest (Linux, Windows, etc).

Acessando a interface da máquina virtual

Para acessar a máquina virtual a partir do virt-manager, basta clicar duas vezes sobre a máquina virtual na aba principal, e então, abrirá uma nova janela que mostrará o conteúdo da tela da máquina virtual, tanto o modo console quanto a interface gráfica (quando apropriado). A próxima figura mostra com detalhes este procedimento.

De mais, basta clicar com o botão direito sobre o nome da máquina virtual para mudar o estado da máquina, como por exemplo, iniciá-la.

Fora isso, também é possível acessar a máquina virtual através de uma conexão segura, como é o caso do SSH ou mesmo através do protocolo VNC. Para acessá-la via VNC é necessário instalar um servidor VNC na máquina virtual, iniciar o daemon vncd e então conectar-se a ela com um cliente VNC, como por exemplo o vncviewer.

Utilizando o Qemu na linha de comando

Além do virt-manager, é possível executar a virtualização no Linux utilizando somente a linha de comando. Para tanto, é necessário ter instalado o qemu-kvm, assim como compilar o kernel do sistema operacional com a flag CONFIG_KVM habilitada.

O Qemu-kvm deve ser obtido no site do KVM e compilado seguindo sua documentação.

Além do mais, é necessário instalar o módulo kvm.ko, que é gerado quando o flag CONFIG_KVM é habilitado, conforme o exemplo:

# modprobe kvm

Quando o módulo kvm é instalado, deve-se verificar se não há erro no ‘dmesg’. Uma vez que o módulo pode ser carregado e mesmo assim apresentar algum problema.

O próximo passo é criar a imagem de disco. Para tanto, é necessário utilizar a ferramenta qemu-img e passar as opções desejadas, como por exemplo o tamanho da imagem, o formato e o nome.

# qemu-img create <imagem> <tamanho>

Note que podem-se criar outros tipos de imagem, tais como qcow, qcow2, cow, vdi, vmdk entre outras, passando a opção -f.

Uma vez carregado este módulo, é necessário passar o parâmetro “–enable-kvm” para o Qemu, para que o Qemu consiga gerenciar a máquina virtual de maneira eficiente, tirando proveito das características de emulação dos processadores modernos, denominadas VT-d e VT-X. Outra alternativa é a utilização do comando qemu-kvm que já assume essa opção, conforme o exemplo a seguir:

# qemu-kvm -hda <imagem> -m <quantidade de memoria em MB

Caso apareça a mensagem “open /dev/kvm: No such file or directory “, significa que o módulo kvm não foi habilitado corretamente. Em alguns casos, para o módulo ser carregado corretamente, deve-se habilitar a opção de virtualização na BIOS do computador em questão.

Caso seja necessário passar alguma imagem adicional, basta utilizar os parâmetros -hd ­acompanhado de uma letra, como -hdb, -hdc, etc. Caso queria tornar a imagem um CD-ROM, basta utilizar a opção -cdrom.

Conclusão

Este artigo explicou os conceitos de virtualização, assim como a implementação no Linux utilizando uma das melhores ferramentas para tal, o KVM.

Também foi mostrado, passo a passo, como configurar uma máquina virtual utilizando o aplicativo virt-manager, além de uma configuração manual, somente com o módulo KVM e o Qemu.
Em um próximo artigo, será descrito como configurar acesso à rede e como tornar sua máquina virtual mais segura.

Referências

  1. Linux KVM
  2. Manage Virtual Machines with Virt-managers
  3. Qemu site
  4. Virtualization on Red Hat Enterprise Linux
  5. Intel Virtualization and Technology

Sobre os autores:

Breno leitão Breno Leitao é engenheiro de software no Linux Technology Center (LTC) onde atual como desenvolvedor especializado nas áreas de performance, device drivers e virtualização.
Pedro scarapicchia junior Pedro Scarapicchia Junior atualmente trabalha na Totvs, trabalhando na equipe de desenvolvimento das aplicações para ambiente Linux. Além disso já trabalhou com desenvolvimento de device drives para virtualização em máquinas Power.
Erlon rodrigues cruz Formado em Engenharia de Computação pela Universidade Federal de São Carlos (2006) e pós-graduado em Sistemas Distribuídos e Redes pela Universidade Federal de São Carlos (2009) também pela Universidade Federal de São Carlos, Erlon Cruz atua atualmente na área de pesquisa e desenvolvimento na área de arquitetura de computadores junto ao FIT – Flextonics Instituto de Tecnologia.
Pratip roy chowdhury Pratip é graduado em ciência da computação e trabalha como egenheiro de software junto ao FIT.