I contenitori: la virtualizzazione di nuova generazione
La virtualizzazione ha rivoluzionato il campo dell’Information Technology grazie alla distribuzione delle risorse di una macchina fisica su più macchine virtuali (VM) tramite la virtualizzazione hardware. In questo caso si emulano i componenti hardware, in modo da mettere a disposizione diversi server virtuali con un proprio sistema operativo basati su un sistema host comune. Spesso si utilizza questa struttura per lo sviluppo di software, nel caso in cui ci sia bisogno di effettuare più test. Inoltre la virtualizzazione è alla base di diversi pacchetti di hosting offerti dai provider, che si basano su una tecnologia Cloud.
Un’alternativa alla virtualizzazione hardware è data dalla virtualizzazione del sistema operativo, anche chiamata OS-level o container-level. In questo caso le diverse applicazioni server si realizzano in ambienti virtuali isolati, chiamati contenitori (dall’inglese “container”) che presentano lo stesso sistema operativo: si parla perciò di virtualizzazione basata su contenitori. Proprio come le macchine virtuali, anche i contenitori offrono la possibilità di utilizzare diverse applicazioni, con requisiti differenti, simultaneamente sulla stessa macchina fisica. Visto la mancanza di un proprio sistema operativo, il processo di virtualizzazione nei contenitori si contraddistingue per la facile installazione e un overhead minore.
I contenitori non sono però una nuova scoperta, ma la tecnologia impiegata è stata portata alla ribalta da progetti open source come Docker e rkt di CoreOS.
Che cosa sono i contenitori?
La virtualizzazione hardware si basa su un hypervisor che si appoggia sull’hardware del sistema host e che lo distribuisce parzialmente ai singoli sistemi operativi, mentre nella virtualizzazione basata su contenitori non viene avviato alcun sistema operativo aggiuntivo. Invece il sistema operativo comune a tutti i contenitori si limita a creare delle istanze isolate di se stesso e pertanto viene messo a disposizione su ogni contenitore un ambiente di runtime completo.
I contenitori possono essere considerati come delle applicazioni per il server. Per installare un software, viene caricato il rispettivo contenitore con tutti i file necessari in un formato portatile, chiamato immagine, ed eseguito nell’ambiente virtuale. Un’implementazione per questi contenitori è supportata da tutti i sistemi operativi: su Windows è generalmente usato il software Virtuozzo sviluppato dalla Parallels, su FreeBSD ci sono le jails e Linux supporta invece OpenVZ e LXC. Questo tipo di virtualizzazione è diventata però più popolare solo con lo sviluppo di piattaforme come Docker o rkt, che hanno aggiunto funzioni essenziali a questo tipo di tecnologia per facilitare l’utilizzo dei contenitori.
Excursus: Docker e il ritorno della tecnologia a container
È inevitabile imbattersi in Docker, quando si parla di virtualizzazione basata su contenitori. Grazie ad un corretto impiego delle strategie di marketing, nel giro di pochi anni il progetto open source è diventato l’esempio più conosciuto di tecnologia a container. Docker è un tool con un’interfaccia a riga di comando per avviare, fermare e gestire i contenitori, che si basa su tecniche Linux come Cgroups e Namespaces per distribuire le risorse su singoli contenitori. Inizialmente è stata utilizzata l’interfaccia LXC del kernel Linux, mentre ora i contenitori di Docker usano un’interfaccia di programmazione chiamata Libcontainer.
Una funzione principale della piattaforma Docker è il Docker Hub, un servizio online che raccoglie le immagini di Docker, in modo da poterle condividere con altri utenti. Per gli utenti Linux l’installazione di un contenitore già preimpostato è facile come effettuare un download dall’app store. Le applicazioni corrispondenti vengono scaricate direttamente da Docker Hub grazie alle istruzioni immesse nella riga di comando ed eseguite sul proprio sistema.
In contrapposizione a Docker si pone rkt che supporta sia immagini di Docker sia il proprio formato App Container Images (ACI).
- Massima sicurezza dei tuoi dati
- Strumenti di collaborazione per lavorare in team
- Aggiornamenti automatici
Caratteristiche principali della virtualizzazione basata su contenitori
Grazie ai contenitori sono messi a disposizione degli amministratori tutti i dati necessari per il funzionamento di un’applicazione server in un unico pacchetto, semplificando così l’installazione e il funzionamento di programmi complessi per il server. I vantaggi riguardano soprattutto la gestione e l’automatizzazione delle applicazioni basate su contenitori.
- Installazione semplificata: i contenitori si basano su immagini, cioè delle riproduzioni portatili di un contenitore che comprende un unico programma server e tutti i componenti necessari come librerie, programmi di aiuto o file di configurazione. Così si compensano le differenze tra le diverse distribuzioni dei sistemi operativi. L’installazione di un’applicazione simile si riduce pertanto all’inserimento di una sola riga di comando.
- Multipiattaforma: le immagini si possono portare da un sistema ad un altro e sono multipiattaforma, cioè possono essere installate su qualsiasi piattaforma. Per avviare un contenitore da un’immagine, serve solo un sistema operativo con una piattaforma corrispondente.
- Minore impiego di risorse in tempi ridotti: una struttura simile occupa circa 100 MB e si configura in pochi minuti, se si ricorre a Linux e a Docker. Ma gli amministratori di sistema non godono solo di una più rapida installazione: mentre nel caso di una virtualizzazione hardware si assiste ad un calo della performance per via degli hypervisor e dell’assegnazione di un sistema operativo aggiuntivo, le soluzioni basate su contenitori riducono i tempi di avvio al minimo. Infatti avviare le macchine virtuali può richiedere diversi minuti, mentre con i contenitori le applicazioni per il server sono subito a disposizione.
- Applicazioni isolate: ogni programma in un contenitore funziona in maniera isolata dagli altri basati sullo stesso sistema operativo. Così le applicazioni con diversi requisiti si possono gestire simultaneamente e con il minimo sforzo.
- Amministrazione unica e automatizzata: visto che la gestione di tutti i contenitori avviene tramite una piattaforma con gli stessi strumenti come Docker, è possibile automatizzare le applicazioni nel centro di elaborazione dati. Le soluzioni basate su contenitori sono particolarmente adatte per le architetture server, in cui i singoli componenti sono distribuiti su più server, in modo da bilanciare il carico delle diverse istanze. Per questo motivo la piattaforma Docker mette a disposizione degli strumenti per configurare gli automatismi, consentendo ad esempio di avviare automaticamente delle nuove istanze nei momenti di maggior carico. Un software simile a Docker, sempre basato su questa tecnologia, è Kubernetes, offerto da Google per gestire un cluster di contenitori.
Quanto sono sicure le soluzioni basate su contenitori?
Rinunciando a sistemi operativi separati, la virtualizzazione basata su contenitori è più conveniente in termini di performance, ma deve fare i conti con un minore livello di sicurezza. Normalmente le vulnerabilità di un sistema operativo nella virtualizzazione hardware riguardano solo una macchina virtuale, mentre nel caso della virtualizzazione del sistema operativo rimangono coinvolti tutti i contenitori. Pertanto i contenitori non sono protetti come le macchine virtuali con un proprio sistema operativo e se si attacca l’hypervisor, ne conseguono danni seri. Ci sono però meno rischi di attacco rispetto ad esempio al kernel di Linux, vista la minore complessità. I contenitori rappresentano così un’alternativa alla virtualizzazione hardware, ma sono ancora lontani dal poterla sostituire completamente.