LXC: caratteristiche, vantaggi e svantaggi di Linux container

I container Linux sono molto popolari grazie alla facilità d’uso che offrono e sono ormai diventati una parte importante della sicurezza IT. La piattaforma di container LXC (Linux container), da cui deriva anche il nome, viene utilizzata per isolare diversi processi l’uno dall’altro e dal resto del sistema. Attraverso la virtualizzazione viene generata un’Image che rende ciascun contenitore portabile e coerente in ogni fase, dallo sviluppo, alla fase di test e al funzionamento. In questo modo, sebbene le singole applicazioni vengano eseguite in un ambiente virtuale, condividono comunque il kernel del sistema host.

Cosa fanno i container Linux o LXC? La semplicità è sempre un vantaggio? Infine, che ruolo giocano le macchine virtuali?

Che cos’è LXC (Linux container)?

Il termine Linux container (LXC) indica sia applicazioni virtualizzate basate su Linux che la piattaforma o la tecnologia container sottostante. Questo è da tenere a mente soprattutto quando si fa riferimento ad altre piattaforme container anch’esse basate sulla tecnologia dei container Linux.

LXC è una piattaforma container open source che promette un utilizzo facile e un’esperienza utente intuitiva e moderna, caratteristica piuttosto atipica dei sistemi container. La piattaforma offre vari tool, lingue, template e librerie. L’ambiente di virtualizzazione può, inoltre, essere installato e utilizzato su tutte le principali distribuzioni Linux.

Consiglio

I container sono uno strumento unico che aiutano a gestire e sviluppare le applicazioni in un modo che finora era inimmaginabile: consentono di isolare le applicazioni soltanto dal sistema, permettendo loro di continuare comunque a scambiare informazioni e a comunicare con il mondo esterno. La nascita di questa tecnologia è equiparabile a una rivoluzione, che ormai è in piena espansione con innumerevoli fornitori che si contendono il mercato. I principali fornitori di Container-as-a-Service includono Amazon, Microsoft e Google. La piattaforma più conosciuta è Docker, un’evoluzione del progetto Linux Container (LXC), supportata da tutti i provider CaaS.

L’idea per la tecnologia dei container Linux nasce già nel 2001. Nel contesto del progetto VServer è stato implementato inizialmente un ambiente isolato. Questa è stata la base per la creazione di diversi namespace controllati in Linux e per quelli che oggi vengono chiamati container Linux. Successivamente sono emerse altre tecnologie, come cgroups (Control Groups), che possono controllare e limitare l’uso delle risorse per un processo o interi gruppi di processi, e systemd, un sistema di inizializzazione per la gestione dei namespace e dei relativi processi.

In pratica, LXC garantisce uno sviluppo più rapido delle applicazioni. La tecnologia dei container agevola, tra le altre cose, il porting, la configurazione e l’isolamento. I container vengono sfruttati anche nello streaming di dati in tempo reale fornendo la scalabilità necessaria per le applicazioni. I container Linux si adattano all’infrastruttura, cosa che li rende fortemente indipendenti, e possono essere utilizzati localmente, nel cloud o in un ambiente ibrido.

N.B.

Perché le tecnologie containersono così richieste? Ogni applicazione sul sistema operativo ha i suoi compiti e li svolge esattamente in questo ambiente. L’applicazione si basa sulle configurazioni attuali del programmatore e dipende quindi da determinate librerie, relazioni e file. Per testare invece una nuova applicazione in modo semplice, rapido e sicuro si usano i container, che consentono a un’applicazione di recente sviluppo di essere distribuita in un ambiente virtuale senza doverla riscrivere, risolvere errori o problemi. Il contenuto di un container è modellato sull’installazione di una distribuzione Linux, contiene tutti i file di configurazione, ma è molto più facile da impostare rispetto al sistema operativo reale.

Obiettivi e caratteristiche di LXC

A prima vista, il principio di LXC non sembra differire da quello della virtualizzazione classica, ma se guardiamo il contesto generale le differenze diventano più evidenti. In sostanza, i container funzionano a livello di sistema operativo, mentre le macchine virtuali a livello hardware. I container condividono quindi un sistema operativo e isolano i processi applicativi dal resto del sistema, mentre la virtualizzazione classica consente l’esecuzione simultanea di più sistemi operativi su un unico sistema.

N.B.

Per eseguire più sistemi operativi simultaneamente in un ambiente virtualizzato, è necessario un hypervisor per emulare il sistema hardware, che tuttavia richiede un utilizzo massiccio delle risorse. In questo senso, l’uso di application container, che vengono eseguiti in modo nativo sul sistema operativo, cioè senza emulazione, è molto più efficiente.

Per impostazione predefinita, i contenitori Linux consumano meno risorse di una macchina virtuale e dispongono di un’interfaccia standard, che consente di gestire più container contemporaneamente e in modo semplice. Una piattaforma con LXC può anche essere organizzata su più cloud, fornendo portabilità e garantendo che le applicazioni eseguite correttamente sul sistema dello sviluppatore funzionino anche su qualsiasi altro sistema. Tramite l’interfaccia dei container Linux è inoltre possibile avviare, arrestare o modificare le variabili di ambiente di applicazioni di dimensioni più grandi.

In sintesi, l’obiettivo di LXC è quello di creare un ambiente che sia il più vicino possibile a un’installazione Linux standard senza lanecessità di un kernel separato.

L’attuale piattaforma di Linux container utilizza le seguenti funzioni kernel per “includere” applicazioni e processi nei contenitori:

  • namespace kernel (ipc, uts, mount, pid, rete e utente)
  • profili Apparmor e SELinux
  • linee guida Seccomp
  • chroots (utilizzando pivot_root)
  • capacità del kernel
  • cgroups (gruppi di controllo)

I container Linux dovrebbero rimanere compatti. Per questo sono costituiti da pochi componenti separati:

  • libreria liblxc
  • collegamenti in più linguaggi per l’API:
    • python3 (supporto a lungo termine in 2.0.x)
    • lua (supporto a lungo termine in 2.0.x)
    • Go
    • Ruby
    • Python
    • Haskell
  • una serie di strumenti standard per il controllo dei contenitori
  • template per distribuzioni

Come funziona LXC?

Isolamento e virtualizzazione sono particolarmente importanti perché aiutano a gestire le risorse e gli aspetti di sicurezza nel modo più efficiente possibile. Essi facilitano il monitoraggio, ad esempio, per individuare errori nel sistema che spesso non hanno nulla a che fare con le applicazioni appena sviluppate. Ma come funziona in LXC? O in altre parole: come funzionavano i container Linux?

Il modo più semplice e sensato per utilizzare i container Linux è quello di collegare ogni container ad un processo per mantenere il pieno controllo. Per ogni processo sono particolarmente importanti i namespace che forniscono le risorse per uno o più processi che utilizzano lo stesso namespace. I processi fungono, inoltre, da controllo degli accessi al fine di proteggere i contenitori.

Per utilizzare un ambiente LXC, le caratteristiche e le relative funzioni devono essere chiare. I cgroups (gruppi di controllo kernel) limitano e isolano le risorse da processi come CPU, I/O, memoria di lavoro e risorse di rete. Il contenuto di un gruppo di controllo può, inoltre, essere gestito, monitorato, reso prioritario e modificato.

N.B.

Su Linux, tutto è un file. Per questo motivo, ogni cgroup è in definitiva una raccolta di file (/sys/fs/cgroup). Per gestire questo tipo di file, esistono diversi strumenti come cgmnager.

Le funzioni sono facili da gestire, il che rende una piattaforma LXC adatta anche all’uso da parte di principianti. Nella prossima sezione analizziamo anche gli svantaggi di questa tecnologia.

Vantaggi e svantaggi dei container Linux

La facilità d’uso dei container Linux è il loro più grande vantaggio rispetto alle tecnologie di virtualizzazione tradizionali. Tuttavia, la massiccia diffusione di LXC, un ecosistema quasi onnicomprensivo e strumenti innovativi sono principalmente riconducibili alla piattaforma Docker che è alla base dei contenitori Linux. Se confrontato direttamente con altri sistemi di container, come rkt, OpenVZ, Cloud Foundry Garden, che sono molto più limitati nell’uso, LXC beneficia della stretta connessione con il pioniere delle piattaforme container.

Un amministratore di sistema che ha esperienza con una virtualizzazione basata su hypervisor come Hyper-V non avrà problemi a utilizzare LXC. L’intera configurazione, dalla creazione dei template di container e la loro distribuzione, la configurazione del sistema operativo e di rete alla distribuzione delle applicazioni, rimane sempre la stessa. Tutti gli script e i flussi di lavoro scritti per le macchine virtuali possono essere utilizzati anche per i container Linux. Gli sviluppatori non ottengono quindi nuove soluzioni e strumenti su misura, ma possono continuare a lavorare in un ambiente familiare e con i propri script e workflows di automazione.

Uno svantaggio cruciale di LXC è legato alla gestione della memoria: sebbene siano supportati diversi backend di memoria (Ivm, overlayfs, zfs e btrfs), l’archiviazione avviene, per impostazione predefinita, direttamente sui Rootfs. Le Images non possono essere registrate. Altre piattaforme container offrono soluzioni migliori e più flessibili sia per l’archiviazione dei container che per la gestione delle immagini.

Contesti d’uso di LXC

LXC è un progetto open source finanziato da canonical, la società dietro la distribuzione Linux Ubuntu. Tuttavia, il maggiore supporto proviene dalla sua comunità, che sviluppa congiuntamente versioni stabili e aggiornamenti di sicurezza, oltre a portare avanti il progetto. Le diverse edizioni di LXC godono anche di un supporto continuo e di aggiornamenti regolari di sicurezza. Le altre versioni vengono mantenute, di solito, fino a quando non viene pubblicata una versione più recente e più stabile.

I container Linux sono per lo più utilizzati come tecnologia container aggiuntiva, un fatto non insolito considerando che, a differenza delle macchine virtuali, quella dei container è una tecnologia ancora abbastanza giovane. Va notato, tuttavia, che i fornitori di soluzioni per container sono in costante crescita così come l’ecosistema intorno a questa tecnologia.

LXC è attualmente un’alternativa assolutamente valida alle applicazioni tradizionali esistenti, che sono rivolte in particolare agli amministratori VM. La transizione da una macchina virtuale a una tecnologia container è più facile con i contenitori Linux che con qualsiasi altra tecnologia di questo tipo.

Alternative ai container Linux

L’alternativa più popolare a LXC è Docker. La piattaforma, che si basa su container Linux, è stata continuamente sviluppata negli ultimi anni, tanto da renderla ora anche compatibile con sistemi Windows. Ciò consente anche ai provider di cloud più grandi come Google, IBM, AWS e Azure di offrire il supporto nativo di Docker.

Una nota alternativa ai container (Linux) per virtualizzare server completi è OpenVZ. Come LXC, OpenVZ utilizza il kernel del sistema operativo host e fornisce agli utenti server virtuali in un ambiente isolato.

KVM è una tecnologia di virtualizzazione open source già integrata in Linux, dove KVM sta per “Kernel-based Virtual Machine”. Essa consente di convertire Linux in un hypervisor, permettendo all’host di eseguire più ambienti isolati.

Kubernetes è stato sviluppato originariamente da Google, che è stato uno dei primi sostenitori delle tecnologie Linux container. Questa piattaforma open source automatizza il funzionamento dei container Linux. Interi gruppi di host su cui vengono eseguiti i container vengono raggruppati in cluster, semplificandone la gestione.

N.B.

Se utilizzate LXC, l’uso di LXD diventa inevitabile. I due termini o tecnologie sono difficili da distinguere. LXD è un ulteriore sviluppo di LXC, che include, tra l’altro, un demone di sistema.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.