Linux come guest virtualizzato – Virtualizzazione e Containerizzazione

Differenza tra Virtualizzazione e Containerizzazione:
Oggi vedremo le principali differenze tra container e virtual machine e chiariremo ogni dubbio.

Un macchina virtuale è un software che, attraverso un processo di virtualizzazione, è in grado di creare un ambiente virtuale che emula il comportamento di una macchina fisica, grazie all’assegnazione di alcune risorse hardware – RAM, CPU, porzioni di disco fisso – ed in cui alcune applicazioni possono essere eseguite come se interagissero con tale macchina.
Tra i vantaggi offerti dall’adozione di una macchina virtuale vi è il poter offrire a più utenti, contemporaneamente e in modo performante, diversi sistemi operativi, senza dover procedere a una ripartizione fisica del disco rigido.

La tecnologia di virtualizzazione:

– Affamato di risorse
– Performance limitate
– Ogni VM virtualizza il proprio SO
– Virtualizzazione Hardware
– Tempo di avvio intorno al minuto
– Allocazione statica della memoria
– Completamento isolamento

La tecnologia dei container può essere considerata figlia della virtualizzazione, una sorta di “nuova generazione” che introduce delle innovazioni importanti alla tecnica tradizionale. In primo luogo, nell’approccio dei container non esiste l’hypervisor ma è presente un sistema che “impacchetta” le applicazioni/servizi applicativi in container. Questo sistema crea un livello di astrazione fra i container e il sistema operativo ospitante e gestisce l’attivazione e la disattivazione dei contenitori. Un’altra grande differenza è che la virtualizzazione permette di eseguire più sistemi operativi contemporaneamente in un singolo sistema, mentre i container condividono lo stesso kernel del sistema operativo e isolano i processi applicativi dal resto dell’infrastruttura.

Ecco le principali differenze fra i container e le macchine virtuali:
– Deployment semplificato: la tecnologia dei container permette di semplificare il deployment di qualsiasi applicazione poichè essa viene “impacchettata” in un singolo componente distribuibile e configurabile con una sola linea di comando, senza doversi preoccupare della configurazione dell’ambiente di esecuzione

– Disponibilità rapida: virtualizzando solamente il sistema operativo e le componenti necessarie all’esecuzione dell’applicazione, invece che l’intera macchina, i tempi di avvio si riducono notevolmente rispetto a quelli di una VM

– Ampia portabilità: i container possono essere creati e replicati in qualsiasi ambiente in modo semplice e veloce. Si tratta di un grande vantaggio a livello del ciclo di vita di un software per esempio, i container possono essere copiati velocemente per creare gli ambienti di sviluppo, test e produzione senza la necessità di operare configurazioni

– Controllo più granulare: i container possono “pacchettizzare” un’intera applicazione ma anche solo un singolo componente. In questo modo consentono agli sviluppatori di suddividere ulteriormente le risorse in microservizi, garantendo così un maggiore controllo sull’eseguibilità delle applicazioni e un miglioramento delle performance dell’intera infrastruttura

– Leggerezza: un grande punto di forza dei container è che sono molto più “leggeri” delle virtual machines perché non devono attivare un loro sistema operativo dedicato. Di conseguenza sono molto più veloci da attivare e disattivare e ideali per quegli ambienti in cui il carico di elaborazione varia sensibilmente e in maniera imprevedibile.

Ma come per ogni cosa vi sono pregi e difetti, anche i container hanno le loro debolezze.
Una di queste è rappresentata dalla difficoltà di gestione quando il numero di container è molto elevato. Al contrario, le virtual machine sono più semplici da amministrare anche perchè raramente raggiungono grandi quantità, come invece può accadere facilmente con l’utilizzo dei container. Un altro punto debole è proprio la condivisione dello stesso kernel del sistema operativo. A livello teorico, uno dei container potrebbe compomettere la stabilità del kernel, influenzando anche gli altri.

La tecnologia di Containerizzazione quindi:

– Leggero sulle risorse
– Performance native
– Tutti i container condividono il S.O dell’Host
– Virtualizzazione da parte del S.O.
– Tempi di avvio nell’ordine di secondi
– Allocazione Dinamica della memoria
– Isolamento a livello di processo ( meno sicuro )

Per concludere possiamo dire che non si tratta di due soluzioni antitetiche. A secondo dello scopo, può essere più adatta la virtualizzazione o la tecnologia dei container. Ad esempio, la leggerezza dei container si scontra con l’impossibilità di avere più sistemi operativi nello stesso sistema. Allo stesso modo, con risorse e capacità limitate, una soluzione leggera come quella dei container è sicuramente più idonea e performante rispetto ad un’infrastruttura composta da virtual machines.