Configure e gerencie um sistema anfitrião com KVM e Virt-manager CAPA Servidor KVM O KVM vem ganhando atenção do mercado corporativo como solução de virtualização. Veja como usá-lo com facilidade. por Carlos R. M. Guimarães A tualmente com foco nas tecnologias “verdes”, a tecnologia da virtualização é cada vez mais utilizada. As técnicas empregadas são atualizadas diariamente, conseguindo em tempos sempre menores resultados consistentemente melhores, e precisamos nos adaptar e estar atentos a essas melhorias. No kernel Linux 2.6.20, foi introduzido o ambiente de virtualização denominado KVM (Kernel-based Virtual Machine – Máquina Virtual com base no Kernel), que oferece suporte à virtualização explorando as tecnologias VT (da Intel) e AMD-V (da AMD), encontradas nos processadores mais recentes desses fabricantes. Este artigo mostra como criar novas máquinas virtuais sobre o KVM, instalar nelas um sistema e prepará-las para o gerenciamento via rede, incluindo uma interface gráfica básica. Hypervisor Para construir o servidor de virtualização, utilizaremos como exemplo o Ubuntu Server 9.10. Os princi- Linux Magazine #65 | Abril de 2010 pais motivos desta escolha são as versões recentes dos aplicativos kvm-qemu (0.11.0), libvirt (0.7.0) e virt-manager (0.7.0) incluídos nesse sistema. Com isso, obtemos uma plataforma estável, que permite desligar as máquinas virtuais e até reiniciar sistemas virtuais Windows XP, Vista e Windows 7. Em outras plataformas e versões, a reinicialização de VMs equipadas com esses sistemas não acontecia da forma esperada. Para a instalação do sistema na máquina física, escolha a opção de “Instalação mínima do sistema”, pois hypervisors devem sempre con- ter o menor número de pacotes, de forma a reduzir riscos à segurança e também restringir o número de processos a executar. Todo o processo de instalação ocorre de forma normal, sendo as únicas particularidades o particionamento do disco rígido (consulte a tabela 1) e o uso da opção “Sem Atualizações Automáticas”. Ao final da instalação, o servidor será reiniciado. Na primeira inicialização, ative a conta de root e forneça uma senha com no mínimo oito caracteres: $ sudo passwd root Tabela 1: Particionamento de disco no anfitrião Ponto de montagem Tamanho e importância swap Semelhante à quantidade de memória RAM instalada / 10 GB (sistema anfitrião e outros poucos pacotes) /vserver Local de instalação das VMs /dados Alojará dados e diretórios que compõem as VMs (dados dinâmicos, como diretórios / home, arquivos de log, cache do proxy etc.) 39 CAPA | KVM Listagem 1: Bridges com endereços dinâmicos por razões óbvias, ou seja, um servidor que hospedará outros servidores: # Interface loopback auto lo iface lo inet loopback $ sudo aptitude update auto eth0 iface eth0 inet manual auto br0 # br0 usa DHCP iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 metric 1 auto eth1 iface eth1 inet manual auto br1 # br1 também usa DHCP iface br1 inet dhcp bridge_ports eth1 bridge_stp off bridge_fd 0 bridge_maxwait 0 metric 1 A lista dos repositórios será mantida somente com os oficiais e estáveis – Em seguida, instale um gerenciador de runlevel e atualize seu menu: endereços dinâmicos (listagem 1) ou estáticos (listagem 2). As listagens 1 e 2 supõem a existência de duas placas de rede, cada uma atendendo uma máquina virtual. Para ativar as configurações, basta reiniciar a rede: $ sudo aptitude install rcconf $ sudo update-rcconf-guide /etc/init.d/network restart Agora, instale os softwares de virtualização: Ambiente gráfico: por que sim? $ sudo aptitude install kvm \ libvirt-bin bridge-utils \ openssh-server Em servidores, não utilizamos, na maioria das vezes, ambiente gráfico, seja ele qual for. Porém, no caso de hypervisors, o ambiente gráfico nos permite um aumento de produtividade e agilidade com a ferramenta gráfica virt-manager. A maioria das tarefas podem e devem ser executadas na linha de comando. Contudo, quando temos vários servidores para administrar – muitas vezes, pertencentes a empresas diferentes – é importante dispor de muita agilidade. Então, por que não optar por ferramentas que auxiliam o trabalho e facilitam essas operações sem abrir mão da segurança? No caso deste artigo, as razões que levam a optar por um ambiente gráfico são: Na versão 9.10 do Ubuntu, não há necessidade de adicionar o usuário ao grupo libvirtd, pois o próprio pacote já o faz automaticamente durante a instalação. Caso você deseje verificar isso: $ sudo adduser ‘usuário’ libvirtd Para permitir a conexão entre as máquinas virtuais hospedadas sobre esse servidor, e também entre essas VMs e toda a rede física existente, utilize o modo bridge. Para isso, edite o arquivo /etc/network/interfaces para criar as bridges que poderão receber Listagem 2: Bridges com endereços estáticos # Interface loopback auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 # br0 usa iface br0 address network netmask 40 IP estático inet static 192.168.0.100 192.168.0.0 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 metric 1 auto eth1 iface eth1 inet manual iface br1 inet static address 192.168.0.101 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth1 bridge_stp off bridge_fd 0 bridge_maxwait 0 metric 1 auto br1 # br1 também usa IP estático http://www.linuxmagazine.com.br KVM | CAPA 1 facilidade para administrar as diversas VMs que serão instaladas; 2 interface para a instalação dos sistemas operacionais e pacotes adicionais em cada VM; 3 administrar remotamente cada VM e o próprio hypervisor; 4 pela linha de comando, a administração de servidores virtuais que exigem grande interação com a área de trabalho dos usuários (como LTSP, por exemplo) é muito mais demorada. Xfce4 Após uma análise criteriosa, o ambiente Xfce4 é o mais adequado para fornecer a interface gráfica (na modesta opinião do autor deste artigo, evidentemente): a tabela 2 mostra uma comparação entre Openbox e Xfce4, juntamente com os motivos que determinam o vencedor. Instale o Xfce4: $ sudo aptitude install \ xserver-xorg xserver-xorg-core \ xfce4 xfce4-icon-theme Caso você prefira instalar o Openbox, basta instalar o pacote openbox. Feito isso, seu sistema anfitrião já tem um ambiente gráfico bem básico pronto. Ele não iniciará automaticamente – isto é proposital, pois não há necessidade de mantêlo ativo todo o tempo. Localmente, o ambiente gráfico será muito útil apenas na hora de criar e configurar as VMs; posteriormente, será muito utilizado no caso de acesso remoto via FreeNX. Acesso gráfico remoto Instale as ferramentas de gerenciamento gráfico das VMs: $ sudo aptitude install \ virt-manager virt-viewer O próximo passo será instalar o FreeNX para permitir o acesso re- Linux Magazine #65 | Abril de 2010 moto (mesmo via Internet, e não apenas pela LAN), pois é assim que vamos acessar o anfitrião e também as VMs via Virt-manager. Os resultados obtidos com a utilização do FreeNX com o Virt-manager são bem superiores à conexão direta entre a máquina do administrador e o anfitrião. Em uma rede Ethernet local, é possível acessar o anfitrião diretamente pelo Virt-manager e ter respostas imediatas aos comandos. Porém, no caso de acesso externo, via Internet, essas respostas tornam-se impraticavelmente lentas. É por isso que este artigo utiliza o FreeNX para se conectar remotamente ao ambiente gráfico do próprio anfitrião. A partir dele, abriremos um terminal para chamar o Virt-manager, acessando assim as VMs de forma satisfatória, independentemente da localização do administrador. Instalação do FreeNX O FreeNX é um aplicativo para compartilhamento de área de trabalho, mais eficiente que o VNC ou o X11, pois possui um sistema aprimorado para cache de imagens. Ele se divide em duas partes: uma aplicação no servidor, que fornece as sessões, e uma aplicação no cliente para permitir acesso ao servidor. A conexão ocorre por meio do protocolo SSH. Então, teremos uma autenticação criptografada e podemos utilizar tráfego de dados criptografado via SSL. Outro ponto importante é que as informações transmitidas são compactadas pela zlib. Para instalar o FreeNX, é necessários mais (mas não muito mais) do que um simples apt-get: $ sudo aptitude install \ python-software-properties $ sudo add-apt-repository \ ppa:freenx-team $ sudo aptitude update $ sudo aptitude install freenx A configuração do FreeNX também requer um comando em separado: $ sudo /usr/lib/nx/nxsetup \ --install O primeiro ponto importante após a instalação é a chave SSH usada pela conexão NX. Você pode utilizar a chave padrão que já vem instalada no FreeNX ou, para uma maior segurança, uma chave própria. A recomendação é utilizar uma chave própria. Neste caso, somente quem tem a chave poderá acessar o servidor, garantindo assim uma restrição maior e, consequentemente, uma maior segurança. Uma política de segurança muito saudável é editar o arquivo /etc/ssh/ sshd_config e desabilitar o acesso ao usuário root via SSH. Desta forma, somente é possível fazer login remoto como um usuário sem privilégios, Tabela 2: Comparativo entre Xfce4 e Openbox Xfce4 Openbox Uso de disco 1,4 GB 1,1 GB Uso de memória 193,25 MB 215,63 MB Aplicativos e ambiente gráfico Adicionados ao menu automaticamente na instalação Adicionados ao menu editando-se os arquivos de configuração Software para acesso remoto FreeNX (sem pacotes adicionais) NX Server, pois o FreeNX requer diversos pacotes adicionais neste ambiente 41 CAPA | KVM aumentando o grau de segurança de nosso servidor. Outra política interessante é permitir acesso às VMs somente a partir do anfitrião. Com isso, para acessar qualquer máquina virtual, é preciso primeiramente acessar o anfitrião e, a partir dele, a VM desejada. Para acessar as VMs a partir do anfitrião, é necessário também instalar o cliente NX (nxclient) no servidor. Para isso, acesse [1] e baixe o pacote mais indicado para a sua máquina (no caso deste artigo, trata-se do pacote DEB para Linux na arquitetura x8664). Em seguida, instale o pacote e dê permissão de execução ao arquivo que controla a impressão: $ sudo dpkg -i nxclient_x.y.z.deb $ sudo chmod 755 \ /usr/lib/cups/backend/ipp Cliente NX Vamos agora configurar o nxclient no anfitrião e na máquina do administrador para acessar o Xfce4 das VMs e do anfitrião, respectivamente. Execute o nxclient (Aplicativos | Internet | NX Connection Wizard), preencha os valores adequados para o nome da conexão e o endereço da máquina, assim como a forma de acesso. Na etapa seguinte, selecione Unix e Custom, e depois pressione o botão Settings . Em Application, selecione Run the following command e digite: Em Options, selecione New virtual desktop. Webmin Para o caso de administração do anfitrião via via Web, temos o Webmin, cuja instalação é descrita no quadro 1. VM básica A primeira máquina virtual a ser criada receberá um sistema Debian Lenny. É uma boa ideia usá-la como modelo para criação de quaisquer outras VMs que desejemos. Desta forma, poupa-se bastante trabalho na hora de criar novas VMs. Com o Virt-manager aberto, inicie sua configuração. As primeiras opções são exibidas de forma gráfica pelo programa: menu Editar | Preferências: marque as opções Disk I/O e Network I/O; Para instalar o Webmin no Ubuntu Server, é preciso acrescentar um repositório de pacotes que produz pacotes para Debian Sarge. Porém, primeiro vamos instalar alguns pacotes necessários para o Webmin: $ sudo aptitude install perl libnet-ssleay-perl openssl libauthen -pam-perl libpam-runtime libio-pty-perl libmd5-perl Feito isso, acrescente ao arquivo /etc/apt/sources.list a seguinte linha: deb http://download.webmin.com/download/repository sarge contrib Em seguida, baixe a chave do repositório e adicione-a ao apt: $ wget http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add Por último, atualize a lista de pacotes e instale o pacote webmin: 42 /usr/bin/startxfce4 Quadro 1: Instalação do Webmin $ sudo aptitude update $ sudo aptitude install webmin no menu Ver, marque as opções CPUs, Disk I e Network I/O; na linha localhost (System), clique com o botão direito do mouse e selecione Conectar; no menu Editar | Hosts Details, a janela de Detalhes do Host será aberta e conterá três abas; na aba Visão geral, podemos ativar a opção Autoconnect | Virtual Networks; na aba Storage, iremos adicionar a partição /vserver da seguinte forma: clique no botão com um símbolo de soma +, escolha um nome para a nova localização vserver, mantenha a opção dir: Diretório de Sistema de Arquivo e clique em avançar. Na próxima janela que se abrir, Add Storage Pool, escolha o caminho /vserver. Pronto: agora você já tem um local para hospedar as VM’s. Vamos agora criar uma máquina virtual. Clique na linha localhost (System) com o botão direito e selecione Nova. A janela Criar Nova VM se abrirá para você criar a VM propriamente dita. Note que este procedimento supõe a existência de uma unidade de CD/DVD no anfitrião, com o CD de instalação via rede (netinstall) ou o CD1 inserido nela. Em nome, digite o nome desejado para a VM, como lenny. Depois, selecione Local install media (iso Image or CDROM), e marque Use CDROM or DVD. Selecione Linux como tipo de sistema operacional e DebianLenny como versão. Defina uma quantidade de memória RAM para a VM, como 1024 MB, e uma quantidade de CPUs para essa mesma máquina. Depois, selecione Select managed or other existing storage e Browse. Na janela que se abre, selecione vserver. Clique em New Volume, o que abrirá a janela Add a Storage Volume: digite lenny para o nome do arquivo que http://www.linuxmagazine.com.br KVM | CAPA abrigará a VM. Digite um tamanho (em MB) para o arquivo. Em Allocation, escolha todo o espaço definido para assim ter uma VM mais rápida. Máquina virtual criada. Vamos agora instalar nela o sistema operacional. Lenny virtual A instalação do Lenny será feita a partir de um CD netinstall, pois serão instalados somente os pacotes básicos. Com isso, teremos uma VM básica que servirá como ponto de partida para vários tipos de servidores. Em relação ao particionamento do disco, podemos manter o espaço de swap com um tamanho igual ao da memória RAM, enquanto a raiz ocupa todo o restante do espaço. Finalizada a instalação do Debian Lenny básico, já temos nossa primeira VM funcional. Clones Para clonar um modelo de máquina virtual, uma boa ferramenta é o Virtclone, devido à facilidade e à velocidade oferecidas por ele. Ao final do processo, teremos a nova VM com um domU criado e pronta para uso. A linha de comando para isso é: $ sudo virt-clone -o lenny \ -n ‘nome da nova VM’ \ -f ‘arquivo da nova VM.img’ Com isso, já temos a nova VM pronta para ser configurada de acordo com a necessidade. Uso do Virt-manager Para administrar as VMs e o anfitrião, existem ferramentas de linha de comando como o virsh e o virt-top, entre outras. O cenário ideal para uso destas é um número pequeno de servidores anfitriões e o emprego da ferramenta apenas para administrar a rede. No entanto, no caso de múltiplas redes geograficamente separadas – Linux Magazine #65 | Abril de 2010 muitas vezes em cidades diferentes –, é preciso estar em muitos locais ao mesmo tempo. São necessárias, portanto, ferramentas que proporcionem agilidade, facilidade de uso e recursos de análise, para aumentar a produtividade do administrador. Nesse caso, o Virt-manager é o mais indicado, pois reúne uma série de recursos em uma única tela: uso de memória e CPU no anfitrião e em cada VM, além de: reunir informações básicas das VMs – ID, status, uso de CPU, número de CPUs, memória utilizada, I/O de disco e I/O de rede; permitir “entrar” na VM e interagir com seu sistema operacional pela tela, como se fosse um monitor físico local; permitir remover e adicionar hardware de forma rápida; possibilitar a alteração do dispositivo de boot; permitir alterar a inicialização automática da VM; oferecer a conexão à unidade de CD. Novo hardware virtual Com fim de exemplo, é interessante demonstrar a possibilidade de acrescentar novos itens de hardware a uma VM. Vamos criar, em nossa nova VM, uma partição a ser montada em /dados/: 1 na aba Hardware da VM, clique em + Add Hardware; 2 em Hardware Type, selecione Storage; 3 em Block device (partition), escolha /dev/sda7; 4 com Target Device Type, use Virtio Disk. É importante enfatizar que, no caso de VMs com uma grande massa de dados dinâmicos (como os da partição /home, os logs etc.), recomendase utilizar um dispositivo de armazenamento separado. Dessa forma, mesmo em caso de desastres com essa VM, os dados estarão preservados. Além disso, essa atitude evita o uso demasiado de espaço por parte da VM. Como resultado, isso simplifica e aumenta a segurança na administração da virtualização. n Mais informações [1]Download do nxclient: http://www.nomachine.com/download-client-linux.php Sobre o autor Carlos R. M. Guimarães Filho é diretor da CRMG Network & Security. É engenheiro de sistemas e especialista em redes, com 26 anos de experiência nas áreas de automação, eletrônica e TI. Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em [email protected] Este artigo no nosso site: http://lnm.com.br/article/3397 43