Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Introduzione a Vagrant

Dalla definizione della virtualizzazione ai principi che permettono a gestione automatica della configurazione delle delle macchine virtuali.
Dalla definizione della virtualizzazione ai principi che permettono a gestione automatica della configurazione delle delle macchine virtuali.
Link copiato negli appunti

Vagrant è uno strumento molto flessibile che dovrebbe essere sempre presente in un gruppo che mira ad abbracciare DevOps. Questo si pone come un livello intermedio tra il computer fisico su cui è in esecuzione ed un (o più) ambiente di lavoro virtualizzato.

Virtualizzazione

Come è noto ai più la virtualizzazione è una tecnica che ci permette di astrarre l'hardware di un computer affinché questo sia disponibile come risorsa virtuale.

Per rendere possibile tutto ciò, è necessario prima di tutto che la nostra CPU supporti in maniera nativa la virtualizzazione e che questa sia abilitata nel BIOS. Se i due requisiti precedenti sono soddisfatti, il passo successivo è l'installazione di un software di virtualizzazione (Oracle VirtualBox, Microsoft Hyper-V e tanti altri) in grado di creare macchine virtuali su cui lavorare.

In gergo il sistema operativo iniziale, su cui abbiamo installato il nostro software di virtualizzazione è detto sistema host, mentre il sistema operativo virtuale è detto sistema guest.

Poiché l'hardware è una risorsa virtuale, è possibile creare macchine guest che sfruttino solo una parte delle risorse messe a disposizione dall'host, ad esempio una macchina virtuale potrà esser configurata per funzionare con soli 2GB di RAM anche se il computer fisico che la tiene in vita ne ha a disposizione 8.

Le macchine virtuali possono essere “accese” e “spente” proprio come normali computer, liberando quindi risorse preziose per il sistema host, le "immagini" (ovvero i dischi rigidi) di una macchina virtuale possono essere salvate e scambiate tra i membri di un team in modo tale da avere un ambiente comune sul quale sviluppare o effttuare dei test.

Perché Vagrant?

Sebbene le macchine virtuali facciano già tanto, le sole non basterebbero a rendere il nostro viaggio liscio come la seta. Uno degli scenari più noiosi, infatti, è proprio la preparazione dell'ambiente di una macchina virtuale: dobbiamo avviare la macchina, entrarci, fare tutti i nostri setup, rigenerare un pacchetto di diversi gigabyte e condividerlo con il gruppo.

Se un giorno ci rendessimo conto di dover fare un upgrade di una componente: stesso giro e stesso scambio di gigabyte. Decisamente poco pratico...

Inoltre, la cosa peggiore, è che tutto questo processo di configurazione della macchina virtuale, anche noto come provisioning, non è tracciabile (a meno di qualche passaggio manuale) e quindi non facilmente ripetibile.

Vagrant invece, consente di avere delle macchine virtuali completamente "scriptabili" sia in fase di configurazione (RAM, networking, spazio disco...) che di provisioning (installazione di MongoDB, RabbitMQ...). Ognuno di questi script potrà poi essere aggiunto al nostro source control preferito e arrivare a versionare i vari scenari realizzando quella pratica nota come Infrastructure as code.

I vantaggi di questo approccio sono evidenti visto che non avremo più necessità di dover trovare noi un modo per condividere le virtual machine. Per comprendere la semplicità di utilizzo, basti pensare che una macchina virtuale Linux è possibile avviarla con due semplici comandi inseriti in un prompt di Windows.

Un altro vantaggio di Vagrant risiede nella capacità di virtualizzare la virtualizzazione. Infatti sebbene il provider di virtualizzazione di default è Oracle Virtual Box, nessuno ci vieta di cambiarlo e passare, ad esempio a Microsoft Hiper-V, o VMware. Questo passaggio a noi sarà completamente indolore visto che non dovremo toccare nulla nei nostri script Vagrant.

Non solo è possibile astrarre il provider di virtualizzazione sottostante e passare così dall'uno all'altro in maniera trasparente, Vagrant può cambiare completamente tipo di virtualizzazione, passando da quella classica di cui abbiamo parlato finora a quella più moderna basata su container.

Virtual machine vs Container

La differenza tra le due tecnologie di virtualizzazione è che mentre la prima realizza un isolamento completo tra il sistema operativo host e quello guest, quest'ultima condivide lo stesso kernel. Sebbene i container siano ovviamente più leggeri della virtualizzazione classica, a causa della condivisione del kernel tra host e guest non sarà possibile, ad esempio, avere un container Windows su Linux.

Docker è uno degli esempi più famosi nel panorama dei container: volendo Vagrant può utilizzare Docker senza fare una piega!

Questa guida

L'utilizzo e la condivisione di macchine virtuali è una pratica consolidata, per questo motivo Vagrant non si pone come qualcosa di rivoluzionario. Tutto quello che è possibile fare con Vagrant lo si può fare e lo si è fatto per anni completamente a mano, apportando soluzioni più o meno valide ai problemi che si sono presentati. La forza di Vagrant è quella di fornire una soluzione a tutti questi problemi e far sì che possano essere risolti in ottica DevOps: ovvero nel più semplice dei modi.

In questa guida affronteremo quindi un po' di nomenclatura su tutto ciò che riguarda il mondo Vagrant e cos'è necessario per fare un po' di esperimenti. Fatto ciò verrà mostrato quanto è semplice avviare una macchina virtuale Linux, come possiamo condividerla con il nostro team e come gestirne il ciclo di vita. Parleremo di networking, di tutta una serie di facility che Vagrant mette a nostra disposizione, di provisioning e tanto altro.

Il Tao di Vagrant

Vagrant si pone l’obiettivo di aiutare ad abbracciare la cultura DevOps e nel farlo, il suo creatore, ha voluto che fosse sempre chiaro il modo in cui tutto ciò doveva avvenire.

Il singolare nome dato a questo manifesto di intenti è per l’appunto “The Tao of Vagrant”, scritto di proprio pugno dall’autore e disponibile qui per una lettura completa ed in lingua originale.
Sebbene non fondamentale ai fini pratici, tale documento rende bene l’idea del cambio di mentalità necessario.

In un mondo con Vagrant, ogni sviluppatore potrà con un solo comando, avere a disposizione un ambiente di sviluppo completo e potrà così continuare a lavorare sulla propria macchina, utilizzando il suo IDE preferito, il proprio browser e così via. L’esistenza di Vagrant è trasparente.

Analogamente, coloro che si occuperanno di gestire gli ambienti (d'ora in poi potranno utilizzare degli script), dovranno poterlo fare con il loro editor di testo preferito. Tali script saranno utilizzati dagli sviluppatori per ricreare un ambiente di sviluppo e da coloro che dovranno preparare l’ambiente di produzione.

Se non abbiamo più bisogno di ospitare una virtual machine basterà un solo comando per arrestarla e liberare così risorse preziose.

Ti consigliamo anche