Vagrant: Configuración y despliegue

Vagrant es una herramienta para la creación y configuración de entornos de desarrollo virtualizados desarrollada por HashiCorp. Originalmente se desarrolló para VirtualBox y sistemas de configuración tales como Chef, Salt y Puppet.

En este post, se va a utilizar Virtualbox como sistema de virtualización. Por lo tanto es necesario tenerlo instalado.

Instalar vagrant

apt install vagrant

Lo primero es crear la carpeta donde se creará el proyecto. En este caso a modo de ejemplo, se va a crear una infraestructura de 3 máquinas virtuales para simular un cluster.

mkdir cluster && cd cluster

Iniciar el proyecto

vagrant init

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Descargar el box que necesitemos, un box es una imagen base del sistema que se usa para clonar y crear la máquina virtual. En este caso se usará ubuntu16.04

vagrant box add ubuntu/xenial64

==> box: Loading metadata for box 'ubuntu/xenial64'
    box: URL: https://atlas.hashicorp.com/ubuntu/xenial64
==> box: Adding box 'ubuntu/xenial64' (v20170321.0.0) for provider: virtualbox
    box: Downloading: https://atlas.hashicorp.com/ubuntu/boxes/xenial64/versions/20170321.0.0/providers/virtualbox.box
==> box: Successfully added box 'ubuntu/xenial64' (v20170321.0.0) for 'virtualbox'!

Ahora hay que configurar el Vagrantfile con las características que queremos que tenga nuestra máquina. En este caso va a levantar 3 maquinas virtuales en VirtualBox con una serie de características.

vim Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

#Variable con el Box que se va a utilizar
BOX = "ubuntu/xenial64"

#Variable con la interfaz
NIC = "wlp5s0"

Vagrant.configure("2") do |config|

        config.vm.define "master" do |master|
                master.vm.box = BOX
                master.vm.hostname = 'master'

                #Configuración de la interfaz de red
                master.vm.network "public_network", bridge: NIC, use_dhcp_assigned_default_route: true
                #Post script de configuración
                master.vm.provision "shell", path: "config.sh"

                #Configuración de la máquina virtual
                config.vm.provider :virtualbox do |vb|
                        vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
                        vb.customize ["modifyvm", :id, "--memory", 3072]
                        vb.customize ["modifyvm", :id, "--name", "master"]
                        vb.customize ["modifyvm", :id, "--cpus", "2"]
                end
        end

        config.vm.define "node1" do |node1|
                node1.vm.box = BOX
                node1.vm.hostname = 'node1'

                node1.vm.network "public_network", bridge: NIC, use_dhcp_assigned_default_route: true

                node1.vm.provision "shell", path: "config.sh"

                node1.vm.provider :virtualbox do |vb|
                        vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
                        vb.customize ["modifyvm", :id, "--memory", 2048]
                        vb.customize ["modifyvm", :id, "--name", "node1"]
                end
        end

        config.vm.define "node2" do |node2|
                node2.vm.box = BOX
                node2.vm.hostname = 'node2'

                node2.vm.network "public_network", bridge: NIC, use_dhcp_assigned_default_route: true

                node2.vm.provision "shell", path: "config.sh"

                node2.vm.provider :virtualbox do |vb|
                        vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
                        vb.customize ["modifyvm", :id, "--memory", 2048]
                        vb.customize ["modifyvm", :id, "--name", "node2"]
                end
        end
end

Ahora creamos el script de configuración. Se pueden hacer varios scripts y cargar a cada uno uno diferente

vim config.sh

#!/bin/bash

#Locales
apt-get install -y language-pack-es
localectl set-locale LANG=es_ES.utf8

#Actualizar
apt-get update && apt-get -y upgrade

#Instalar paquetes básicos
apt-get install htop git curl tmux zsh

Y por último lanzar levantar vagrant. Para esto, se puede hacer todos a la vez con el comando

vagrant up

O se puede hacer de uno en uno con

vagrant up master

Ver el estado de los boxes

vagrant status

Una vez levantadas las máquinas, hay que conectarse a ellas mediante ssh de la siguiente forma

vagrant ssh master

Para eliminar todo sería de la siguiente manera

vagrant destroy

O para eliminar solo una máquina

vagrant destroy master

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *