Virtualização com Vagrant

Virtualização com Vagrant

O que é o Vagrant ?

Vagrant é uma solução de gerenciamento e construção de máquina virtuais, com a finalidade de automatizar a construção de laboratórios complexo por um único arquivo de configuração.

Por que utilizar o Vagrant ?

Tendo como principal foco a automação de ambientes, o Vagrant se conecta à um provider – podendo esse ser o VirtualBox, Hyper-V, Docker e até mesmo o VMware – através do arquivo Vagranfile um ambiente virtual poderá ser construído diretamente sem precisar realizar todas as interações que um SO precisaria,  com isso agilizamos o processo de configuração de ambientes virtuais que consumiria muito tempo.

E como utilizamos o Vagrant ?

Para começar a fazer uso do Vagrant é necessário primeiramente realizar a instalação dele, que pode ser feito em qualquer ambiente por meio do gerenciador de pacotes da sua distribuição:

Debian/Ubuntu

apt install -y vagrant

CentOS/RedHat

yum install -y vagrant

Após a instalação ter finalizado iniciamos a utilização do Vagrant por meio do parâmetro init na linha de comando.

vagrant init -m

Ao executar esse parâmetro um arquivo de nome Vagrantfile será criado com uma pré configuração:

vagrant$ cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

O parâmetro “-m” informado faz com que o vagrant não crie os comentários no Vagrantfile

O Vagrantfile possui uma estrutura bem simples. A partir de um bloco principal de configuração definido pela entrada:

“Vagrant.configure(“2″) do |config|”

Assim, definimos quais configurações podemos criar nas maquinas virtuais. Mas antes disso vamos definir o que são boxes para o Vagrant.

 

Vagrant Boxes

Boxes para o Vagrant são as máquinas virtuais que de fato irão rodar o SO. Pense na boxe como um HD com um sistema instalado e configurado pronto para ser utilizado. A box deve ser definida pela entrada config.vm.box. Todas as boxes estão armazenadas no repositório da HashiCorp, que possui diversas distribuições em diferentes versões prontas para uso, algumas já com soluções prontas como Apache, Docker, Nginx entre outras.

Iniciando uma VM pelo Vagrant

Agora que já temos uma ideia do que é o Vagrant vamos subir nossa primeira VM. Para isso, vamos mudar a config.vm.box para ubuntu/xenial64, assim teremos a  versão 16.04 LTS do ubuntu já pronta para uso.

vagrant$ cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
end 

Agora podemos iniciar nossa maquina com o comando up:

vagrant up

 

Como resultado o Vagrant importa a base do box, verifica a configuração de rede, vê se a box está atualizada, define um nome, inicia a vm e já deixa uma chave ssh pronta para ser utilizada.

Agora que já temos uma máquina rodando podemos acessá-la via ssh. No caso como a conexão foi criada em uma rede NAT, também foi adicionado um redirecionamento no loopback pela porta 2222, dessa forma podemos usar o comando ssh e acessar diretamente.

ssh -i .vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -p2222

Como isso é muito trabalhoso o Vagrant já implementou um wrapper e usando a mesma chave você consegue acessar as máquinas com um simples comando:

vagrant ssh

Provisionamento

O provisionamneto dentro do Vagrant consiste na utilização de scripts e arquivos que agrupem um conjunto de ações de automação do processo de criação da VM. Alguns dos formatos de provisionamento são Shell, File, Ansible, Puppet, Chef, Salt, Docker entre outros. Como exemplo podemos incrementar nosso Vagrantfile utilizando Shell Linux e passar todos os comandos utilizados para instalação de pacotes, alteração de arquivo de configuração.

 cat Vagrantfile

Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"

config.vm.provision "shell",
inline: "apt update"

config.vm.provision "shell", inline:<<-SHELL
  apt install -y cowsay
  apt install -y links
  apt install -y apache2
SHELL

end

Para que o provisionamento seja realizado precisamos rodar o comando “vagrant provision”, com isso a etapa de provisionamento será reexecutada e teremos os repositório APT atualizado e os pacotes CowSay e Apache2 instalados e pronto para serem utilizados.

Agora temos nosso Apache rodando podemos acessar o WebServer, mas para isso precisamos de um redirecionamento para acessar a porta 80 da VM. O redirecionamento precisa ser feito no VirtualBox mas com o Vagrant podemos especificar com uma única linha no Vagrantfile.

 

cat Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"

config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

config.vm.provision "shell",
inline: "apt update"

config.vm.provision "shell", inline:<<-SHELL
apt install -y cowsay

apt install -y links

apt install -y apache2
SHELL

end

Agora executando o “vagrant reload” nossa VM será reiniciada e conseguiremos acessar via porta 8080 da nossa maquina física o Apache2.

Conclusão

Com Vagrant podemos criar rapidamente diversos laboratórios sem precisar configurar uma máquina virtual, ou um conjunto, do zero e instalar o sistema operacional, tudo isso por um único arquivo de configuração, o Vagrantfile.

CURSOSCONSULTORIA    CONTATO

Anterior Analisando a Qualidade do Código com SonarQube
Próxima Ansible Vault: Criptografando Playbooks e Variáveis

About author

Julio Ballot
Julio Ballot 4 posts

Júlio Rangel Ballot atua como Analista de Infraestrutura em Software Livre, formado em Engenharia de Computação pela Universidade de Taubaté. Possui experiência em Administração de Sistemas Open Source e ferramentas voltadas a práticas DevOps, com ênfase em CI/CD (Continuous Integration / Continuous Delivery), atuando há 10 anos ná area de Tecnologia da Informação. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, sendo certificado LPIC-1 e Exin DevOps Master.

View all posts by this author →

Você pode gostar também

DevOps

Criando Pipelines no Jenkins com Jenkinsfile

O que é o Jenkins ? Jenkins é uma ferramenta de auxilio a construção de pipelines de construção de software. Com ele podemos automatizar toda as etapas de compilação e

DevOps

Repositórios locais com Nexus Sonatype

Administradores de sistemas, sempre que operam em ambiente GNU/Linux,  realizam a instalação de pacotes pré-compilados localizados em repositórios remotos. Para distribuições baseadas em Red Hat, fazemos uso de repositórios Yum

Treinamentos

4Linux inova mais uma vez e lança curso de Continuos Monitoring DEVOPS.

Será o nono curso ofertado na carreira DEVOPS. A mais abrangente oferta do Brasil. A 4linux anuncia hoje o lançamento de mais um curso para enriquecer a sua oferta de