Marvin Pascale

[B.Log]

15 Marzo 2020

Macchine Virtuali e Container

Premessa

Cercherò di descrivere le due tecnologie in maniera non troppo tecnica e darò per scontato alcune conoscenze. Chiaramente parliamo di virtualizzazione e quale sia la tecnologia migliore per l’obiettivo per dobbiamo raggiungere.

Macchina virtuale

La macchina virtuale (Virtual machine o VM) è un tipo di virtualizzazione presente da moltissimi anni. Di fatto una macchina virtuale è un nuovo sistema operativo che ha nascita, vita e morte indipendente dal sistema che virtualizza. In questo scenario saremo costretti a definire in anticipo le risorse destinate alla VM (RAM, Vcpu, disco, etc). La macchina virtuale ha accesso diretto all’hardware e potrà disporre delle risorse assegnate.

Un esempio di questa tecnologia è sicuramente Virtualbox. Un sistema versatile, gratuito e multipiattaforma. E’ possibile installarlo su Linux, Windows e MacOS con pochi semplicissimi click. Per i puristi del settore non possiamo non citare KVM e XEN che insieme a VMWare offrono soluzioni più professionali.

Container

Il container è un tipo di virtualizzazione lite e permette di avere separazione applicativa senza dover destinare risorse specifiche al suo funzionamento. Il container non ha accesso diretto all’hardware e molto spesso non ha un vero e proprio sistema operativo.

Ad oggi il più utilizzato (forse per moda) è docker ma non possiamo di certo dimenticare LXC (Linux container) e OpenVZ.

Quando, come e perchè

La domanda che ogni giorno mi sottopongono è: “… Faccio una VM o un container?” La verità è che non c’è una risposta universale a questa domanda. Dobbiamo analizzare caso per caso quale sia il risultato che vogliamo ottenere.

Container pro e contro

  • Non affamato di risorse
  • Installazione veloce
  • Tempi di avvio ridotti (secondi o millisecondi)
  • Isolamento a livello di processo
  • Allocazione dinamica delle risorse
  • Aggiornamenti semplici e veloci
  • Condivisione S.O.

Virtual Machine pro e contro

  • Affamato di risorse
  • Installazione lenta (intero S.O.)
  • Tempi di avvio lunghi (boot completo S.O. - minuti)
  • Isolamento completo
  • Allocazione statica delle risorse (possibile spreco)
  • Aggiornamenti standard
  • Ogni VM ha il suo S.O.

compareVM&CT

Conclusioni

In linea di massima io adotto questo approccio. Se si tratta di dover virtualizzare per avere a disposizione una singola applicazione prediligo i contaniers mentre se l’infrastruttura da ottenre è più complessa preferirò le macchine virtuali. A ogni modo se devo dare supporto a uno sviluppatore la mia scelta ricade quasi sempre su un container in quanto la gestione, aggiornamento e avvio è molto più immediato.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: