Conhecendo o Vagrant
Você conhece o Vagrant??
Você já precisou criar ambientes sem afetar a produtividade dos times de desenvolvimento? Já precisou reproduzir um ambiente no seu laptop sem gastar um centavo com nuvens públicas? Já sentiu a necessidade de reproduzir uma falha para investigar onde está o problema? Ótimo!! Neste post vamos falar de uma ferramenta que vai nos ajudar a fazer tudo isso e muito mais.
A ferramenta Vagrant, é um gerenciador máquinas virtuais, por meio de APIs ela interage com gerenciadores de VMs locais e provedores de nuvens públicas, ele utilizando uma linguagem de programação própria e comandos específicos, é possível criar e destruir máquinas virtuais, testar scripts de automação e provisionamento de configuração de ambientes. Para o nosso exemplo vamos utilizar o Vagrant e o VirtualBox como sistema de virtualização local.
Ai você me pergunta, mas Léo, por que você está falando de gerenciamento de máquinas virtuais se nós estamos na era do Docker, containers, Kubernetes? Meu caro Sysadmin, nós chegaremos nesses temas mais avançados, mas antes, precisamos passar por alguns temas importantes na formação de um sysadmin Jr. e este assunto vai ajudar no desenvolvimento de atividades nos posts futuros.
Mãos à obra então
Instalação do ambiente de testes
Os meus ambientes de testes são um Macbook OSX Versão 10.11.6 com 8GB de RAM e um Windows 10 com 16GB de RAM, os procedimentos oficiais de instalação do Vagrant podem ser encontrados em : para Linux, Windows e para MacOS.
☀ IMPORTANTE - Você também deve instalar o Oracle VM VirtualBox Extension Pack
$ vagrant -v
Vagrant 2.1.2
$ vbox-img
Oracle VM VirtualBox Disk Utility 5.2.22
( 2005-2018 Oracle Corporation
All rights reserved.
Iniciando o Vagrant
O primeiro passo para interagir com o Vagrant é criar o arquivo Vagrantfile, dentro dele vão todas as instruções de
$ mkdir infraascode ; cd infraascode
$ vagrant init
$ ls -las
Esse comandos permitem criar o arquivo Vagrantfile, ele é um arquivo genérico com quase todas as opções possíveis de configuração que não serão necessárias nesse momento, mas é uma boa fonte de estudo, recomendo dar uma lida nessas opções. Para esse nosso primeiro teste vamos utilizar o Vagrantfile abaixo
Minha primeira virtual machine (VM) com Vagrant
Agora vamos criar nossa primeira máquina virtual utilizando o Vagrant, este exemplo é bem simples só para conhecermos a syntax de um script Vagrant. Com o editor de texto de sua preferência crie um arquivo chamado Vagrantfile, em seguida insira o conteúdo do exercício 01 e salve na raiz do seu projeto.
1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4# Exercício 01
5
6Vagrant.configure("2") do |config|
7
8 hostname = "Infra-as-Code"
9 config.vm.box = "minimal/trusty64"
10 config.vm.hostname = hostname
11 config.vm.box_url = "minimal/trusty64"
12 config.vm.boot_timeout = 3600
13 config.vm.network "private_network", type: "dhcp"
14
15 config.vm.provider :virtualbox do |v|
16 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
17 v.customize ["modifyvm", :id, "--memory", 512]
18 v.customize ["modifyvm", :id, "--name", hostname ]
19 end
20
21end
Agora execute o seguinte comando e veja a mágica acontecer….
$ vagrant up
O que realmente acontece? O Vagrant irá baixar uma cópia da imagem do SO escolhido e fará uma cópia local, nessa primeira vez irá demorar um pouco mas nas seguintes você irá notar que será mais rápido. A partir dessa cópia inicia-se a comunicação com a API do VirtualBox passando os seguintes parâmetros:
Criar máquina sistema operacional Linux “minimal/trusty64” Com nome infra-as-code-01, Memória com 512 de RAM IP privado.
Agora execute o execute o comando abaixo e verifique se a máquina criada corresponde ao que foi especifica.
$vagrant ssh
1Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.16.0-55-generic x86_64)
2
3 * Documentation: https://help.ubuntu.com/
4Development Environment
5Last login: Sat Aug 10 12:32:48 2019 from 10.0.2.2
6[12:41:06 vagrant@Infra-as-Code:~] $ ls -las
7total 36
84 drwxr-xr-x 4 vagrant vagrant 4096 Dec 15 2015 .
94 drwxr-xr-x 3 root root 4096 Feb 21 2015 ..
104 -rw------- 1 vagrant vagrant 60 Aug 10 12:38 .bash_history
114 -rw-r--r-- 1 vagrant vagrant 220 Feb 21 2015 .bash_logout
124 -rw-r--r-- 1 vagrant vagrant 2273 Feb 21 2015 .bashrc
134 drwx------ 2 vagrant vagrant 4096 Feb 21 2015 .cache
144 -rw-r--r-- 1 vagrant vagrant 675 Feb 21 2015 .profile
150 -rw-rw-r-- 1 vagrant vagrant 0 Feb 21 2015 .selected_editor
164 drwx------ 2 vagrant vagrant 4096 Aug 10 12:11 .ssh
174 -rw------- 1 vagrant vagrant 906 Dec 15 2015 .viminfo
Parabéns!!! Temos a nossa primeira VM rodando e criada como infra as code!!! Se foi tão fácil assim criar… vamos destruir então e fazer o Exercício 02 execute o seguinte ….
$ vagrant destroy -f
Foi bem fácil criar e destruir uma máquina virtual, e é essa a filosofia mesmo, poder criar repetidas vezes a mesma VM utilizando infraestrutura como código. Para um analista de infraestrutura validar suas configurações e testa-las antes de jogar em nos ambientes de desenvolvimento aumenta e muito a qualidade do seu trabalho.
Vamos incrementar o nosso código no Exercício 02
Aproveitando o mesmo arquivo Vagrantfile já criado, adicione novas regras de rede para fazermos repasse de algumas portas. As novas regras irão mapear a porta 2240 para o serviço SSHD e mapear a porta 8040 para a porta 80 a VM.
1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4# Exercício 02
5
6Vagrant.configure("2") do |config|
7
8 hostname = "Infra-as-Code"
9 config.vm.box = "minimal/trusty64"
10 config.vm.hostname = hostname
11 config.vm.box_url = "minimal/trusty64"
12 config.vm.boot_timeout = 3600
13 config.vm.network "private_network", type: "dhcp"
14 # < Exercício 02 >
15 config.vm.network :forwarded_port, id:"IaC regra 01", guest:22, host: 2240 , guest_ip: '10.0.2.15' , host_ip: '127.0.0.1', auto_correct: true
16 config.vm.network :forwarded_port, id:"IaC regra 02", guest:80, host: 8040 , guest_ip: '10.0.2.15' , host_ip: '127.0.0.1', auto_correct: true
17 # </ Exercício 02 >
18 config.vm.provider :virtualbox do |v|
19 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
20 v.customize ["modifyvm", :id, "--memory", 512]
21 v.customize ["modifyvm", :id, "--name", hostname ]
22 end
23
24end
Execute um novo comando do Vagrant para carregar o novo código de configuração sem destruir a VM criada.
$ vagrant reload
Ao fim desse comando podemos validar o repasse de portas executando um ssh para localhost na porta 2240 , conforme descrito na regra “Iac regra 01”.
ssh vagrant@localhost -p 2240
1ssh vagrant@localhost -p 2240
2vagrant@localhost's password:
3Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.16.0-55-generic x86_64)
4
5 * Documentation: https://help.ubuntu.com/
6Development Environment
7Last login: Sat Aug 10 12:41:06 2019 from 10.0.2.2
8[13:31:05 vagrant@Infra-as-Code:~] $ ls
9[13:31:07 vagrant@Infra-as-Code:~] $ ls -las
10total 36
114 drwxr-xr-x 4 vagrant vagrant 4096 Dec 15 2015 .
124 drwxr-xr-x 3 root root 4096 Feb 21 2015 ..
134 -rw------- 1 vagrant vagrant 81 Aug 10 12:55 .bash_history
144 -rw-r--r-- 1 vagrant vagrant 220 Feb 21 2015 .bash_logout
154 -rw-r--r-- 1 vagrant vagrant 2273 Feb 21 2015 .bashrc
164 drwx------ 2 vagrant vagrant 4096 Feb 21 2015 .cache
174 -rw-r--r-- 1 vagrant vagrant 675 Feb 21 2015 .profile
180 -rw-rw-r-- 1 vagrant vagrant 0 Feb 21 2015 .selected_editor
194 drwx------ 2 vagrant vagrant 4096 Aug 10 12:11 .ssh
204 -rw------- 1 vagrant vagrant 906 Dec 15 2015 .viminfo
Os comandos apresentados são comandos básicos, mas, para um contato inicial com o Vagrant são bem importantes e já fazem você sair brincando com alguma coisa. Certamente o Vagrant muito mais poderoso do que mostramos aqui, nos posts seguintes vamos mostrar comandos mais avançados.
Todos os códigos deste post estão em disponíveis em https://github.com/leoml/blog-infraascode/tree/master/posts/Conhecendo-o-Vagrant
MENTORIA
Curtiu o blog? Quer trocar uma ideia comigo sobre algum post?
Marca Aqui! É um papo gratuito
oferecido para quem é leitor do blog, podemos falar de temas como: DevOps, SRE e carreira em TI.
Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!
|