I microservizi hanno guadagnato una popolarità costante dalla rivolta del cloud. Aziende come Amazon e Netflix utilizzano piattaforme cloud per fornire i servizi più richiesti. I container sono il fulcro di tali applicazioni cloud-native. Un container è un ambiente isolato che facilita i microservizi e offre vantaggi come una scalabilità superiore e una rapida distribuzione. C'è un'enorme differenza tra le tradizionali macchine virtuali basate su hypervisor come VMware e servizi di virtualizzazione a livello di sistema operativo come Docker e Linux Containers (LXC). In questa guida, forniremo ai nostri lettori una conoscenza pratica di LXC, un solido strumento di virtualizzazione a livello di sistema per Linux.
Guida tutto in uno per padroneggiare i container Linux
Se sei un amministratore Linux che vuole conoscere in dettaglio LXC, allora questa è la guida perfetta per te. In questo post, descriviamo le varie caratteristiche e vantaggi di LXC, nonché quando scegliere questo rispetto ad altri servizi di containerizzazione. Ti mostreremo anche come installare e iniziare con LXC.
Contenitori Linux:funzionalità e nozioni di base
Allora, cos'è LXC? Come abbiamo già detto, è un servizio di virtualizzazione che ci consente di far girare cluster di ambienti Linux isolati. Offre numerosi vantaggi rispetto alle macchine virtuali monolitiche riducendo il carico di risorse sulla macchina host. Ciò lo rende ideale per la creazione, il test e la distribuzione di software cloud-native. LXC, a differenza di altri strumenti di virtualizzazione a livello di sistema operativo, fornisce ambienti Linux molto migliori.
LXC non utilizza meccanismi di controllo delle risorse fantasiosi come gli hypervisor. Piuttosto, utilizza le funzionalità di contenimento dell'host fornite direttamente dal kernel Linux. I componenti principali su cui si basa sono gli spazi dei nomi e cgroup . Sono stati aggiunti per la prima volta al kernel dalla versione 2.6.24. Il principio di progettazione principale di cgroups alias 'Gruppi di controllo' consiste nel fornire limitazione, priorità, contabilità e controllo delle risorse. I namespace sono responsabili di nascondere lo spazio del processo e le informazioni sulle risorse di un container agli altri.
Inoltre, LXC ha anche il supporto integrato per varie politiche di hardening di Linux come i profili Apparmor e SELinux oltre a Chroots. Funziona su quasi tutte le architetture e nel cloud senza sforzo. Inoltre, puoi avviare qualsiasi distribuzione Linux indipendentemente dall'host. Quindi, supponiamo che la tua macchina host stia eseguendo Ubuntu. Puoi eseguire facilmente Red Hat o CentOS su questa macchina utilizzando i container LXC.
LXC, a differenza di altri servizi di containerizzazione, non può eseguire Mac OS o Windows. Questo perché i contenitori LXC si basano direttamente sul kernel host. Quindi, se desideri eseguire app che richiedono uno di questi sistemi, dovresti considerare una piattaforma diversa come Docker. Nel complesso, LXC è più adatto alle persone che hanno bisogno di eseguire ambienti Linux isolati con un sovraccarico minimo di risorse.
Contenitori Linux e Docker
- -Se lavori in un team DevOps o come professionista dell'affidabilità del sito, dovresti già avere familiarità con Docker. Al giorno d'oggi è la piattaforma di containerizzazione più popolare per le app native del cloud. Quindi, potresti chiederti in che modo LXC differisce da Docker o quale di loro è migliore. Come con qualsiasi tecnologia, la risposta dipende esclusivamente dai casi d'uso. Tuttavia, forniremo alcune informazioni sulle differenze tra queste due popolari piattaforme di virtualizzazione.
Docker è una tecnologia relativamente più recente rispetto a LXC. In effetti, ha usato LXC sotto il cofano nei suoi primi giorni. Tuttavia, Docker ha fatto molta strada da allora e ha implementato le proprie soluzioni. Ora, la principale differenza tra Docker e LXC sono le loro scelte di design. Docker enfatizza maggiormente la creazione di applicazioni. LXC, d'altra parte, è progettato per fornire ambienti virtuali Linux autonomi.
Gli sviluppatori di solito usano Docker per creare app che possono essere gettate via non appena arriva una nuova versione. Le app che utilizzano LXC, tuttavia, sono pensate per essere persistenti. Puoi ssh in un contenitore LXC come faresti in un host Linux remoto e gestire l'ambiente. Docker non lo consente e utilizzerai strumenti specializzati per gestire la distribuzione e il test. Alla fine, puoi utilizzare uno di questi per creare app cloud. Le persone di solito scelgono LXC su Docker quando creano app che devono essere mantenute a lungo.
LXC:componenti
Il runtime LXC è costituito da un gruppo di singoli componenti. Questo include il core liblxc libreria, un insieme di strumenti standard per il controllo dei contenitori, vari modelli di distribuzione e diversi collegamenti di lingua per l'API principale. Il supporto linguistico include Python, Go, Ruby, Lua e Haskell. Inoltre, ci sono alcune dipendenze rigide senza le quali lxc non si installa, come una libreria C come glibc, uclib o bionic. LXC richiede anche la versione del kernel 2.6.32 o più.
LXC:tipo di virtualizzazione
I container Linux (LXC) offrono un ambiente del sistema operativo nominale che può essere utilizzato per eseguire applicazioni Linux specifiche o servizi di rete. Utilizza direttamente il kernel del sistema host e, di conseguenza, non può essere eseguito su macchine non Linux. Gli utenti possono scegliere tra un gran numero di modelli di distribuzione per il loro container, inclusi, ma non limitati a, Ubuntu, Fedora, Debian, Red Hat e CentOS.
Il vantaggio principale di questo tipo di container è che ci consentono di isolare i servizi sensibili. È possibile utilizzare questo tipo di virtualizzazione per creare ambienti per l'analisi del malware, l'hacking etico o attività che richiedono un host autonomo. Tuttavia, questi sono solo gli scopi previsti. Quindi, puoi anche eseguire qualsiasi servizio arbitrario che di solito esegui sulla tua macchina Linux. Questo è in netto contrasto con l'approccio incentrato sull'applicazione di Docker.
LXC:supporto per gli strumenti
Un solido supporto degli strumenti è fondamentale per la gestione delle applicazioni cloud e dei servizi standalone. LXC offre un ricco set di strumenti quasi identici alla tua macchina Linux tradizionale. Pertanto, non è necessario installare strumenti di gestione fantasiosi per gestire i contenitori LXC. Puoi utilizzare qualsiasi pacchetto Linux standard come ssh, htop, iptables e Linux Cron jobs. Ciò semplifica la gestione e l'automazione dei servizi containerizzati per gli amministratori.
Inoltre, lxc cli offre un set completo di strumenti per creare, eseguire e gestire al volo i container LXC. Imparerai come installarlo e come eseguire le funzioni di base in questa guida. Inoltre, puoi anche utilizzare strumenti aggiuntivi utilizzando la toolchain LXD. Parleremo di LXD in dettaglio nelle sezioni successive. Nel complesso, LXC non limita la capacità dell'utente di utilizzare pacchetti Linux standard pur offrendo strumenti specializzati.
LXC:Ecosistema
L'ecosistema LXC è praticamente identico a quello di Linux. Questo rende più facile iniziare con i container Linux che con Docker o rkt. Poiché possiamo installare ed eseguire tutti i pacchetti Linux standard in questi contenitori, è facile da configurare e mantenere. Quindi non lasciarti sopraffare quando scopri che non sono necessari strumenti aggiuntivi come Kubernetes e Swarm per LXC.
LXC:facilità d'uso
Uno dei motivi principali per il passaggio a piattaforme containerizzate dalle macchine virtuali Linux è la maggiore facilità d'uso. LXC fa un passo avanti eliminando la necessità di installare del tutto pacchetti monolitici. Questo non solo aumenta la produttività, ma rende anche il flusso di lavoro molto più facile da gestire. I container LXC sono dotati di singoli sistemi di inizializzazione che si occupano della configurazione del sistema mantenendo un ingombro ridotto di risorse.
Inoltre, l'esperienza utente fluida e un ecosistema maturo rendono LXC una scelta di gran lunga migliore rispetto alle macchine virtuali tradizionali. Puoi avviare un contenitore LXC in pochi minuti ed eseguire la tua distribuzione Linux preferita al suo interno. Installare e gestire le applicazioni Linux è semplice come digitare alcuni comandi quotidiani. Quindi, se non desideri apprendere un insieme completamente nuovo di strumenti ed essere comunque in grado di eseguire servizi isolati, i container LXC offrono un'opzione eccellente.
LXC:popolarità
Non c'è dubbio che i container Linux manchino della popolarità di cui gode Docker. Ciò deriva da alcune scelte di progettazione concise, che includono l'impossibilità di eseguire ambienti Windows o Mac OS, tra gli altri. Docker è più leggero di LXC ed è quindi più scalabile. Tuttavia, LXC è molto più vecchio di Docker e i suoi container sono molto più autonomi di Docker.
Inoltre, LXC è molto adatto per creare ambienti di test come laboratori di analisi malware e così via. Ciò lo rende molto più popolare tra i professionisti IT senior che lavorano regolarmente con progetti sensibili. LXC gode anche di una maggiore popolarità nei settori che sviluppano e mantengono app con un lungo ciclo di vita. Nel complesso, sebbene manchi di popolarità rispetto a Docker o rkt, LXC offre maggiore sicurezza e facilità di manutenzione.
LXC:Performance
Come abbiamo già affermato, uno dei motivi principali per cui le persone utilizzano piattaforme containerizzate su macchine virtuali è il ridotto carico di risorse. Questo, a sua volta, porta a prestazioni di gran lunga superiori. LXC offre una densità 10 volte superiore rispetto alle macchine virtuali tradizionali come KVM (Macchina virtuale basata sul kernel). Ciò significa che puoi eseguire fino a 10 volte più container in un singolo host Linux rispetto alle macchine guest KVM.
Inoltre, gli hypervisor sono anche soggetti a problemi di latenza indesiderati. Rispetto a KVM, LXC riduce la latenza al 57%. Inoltre, i container LXC si caricano molto più velocemente degli emulatori virtuali supportati da hypervisor. Ad esempio, le istanze LXC si avviano più velocemente del 94% rispetto a KVM. Quindi, come puoi vedere, LXC fornisce un significativo aumento delle prestazioni riducendo il carico di risorse e la latenza. E il tempo di caricamento più rapido offre un'esperienza utente fluida.
LXC:integrazione
Uno dei principali vantaggi dei container Linux è che si integrano molto bene con il software esistente. Non sei limitato a utilizzare solo le tradizionali applicazioni Linux con LXC. Ad esempio, possiamo utilizzare sia LXC che Docker come complementari l'uno all'altro. Ciò significa che puoi semplicemente ospitare i tuoi microservizi Docker in un'istanza LXC per fornire loro un migliore isolamento e caratteristiche simili a VM. Ciò rende estremamente comodo eseguire e gestire le app Docker.
Inoltre, elimina anche la limitazione di eseguire solo app native di Linux. Quindi, possiamo creare facilmente un microservizio Docker su Windows o Mac ed eseguirlo dall'interno di un contenitore Linux. Questo è un metodo davvero accurato. LXC è adatto anche per OpenStack, una popolare piattaforma di cloud computing. È utilizzato da un gran numero di leader del settore e viene solitamente implementato come IaaS (Infrastructure-as-a-Service). Ciò rende la distribuzione e la gestione delle app cloud più facili che mai.
LXC:Migrazione
La migrazione è fondamentale per molti amministratori e LXC fornisce un supporto adeguato a questo proposito. Esiste più di un modo per migrare un container Linux da un host a un altro. Puoi anche eseguire la migrazione in tempo reale, anche se con alcune limitazioni. Il modo più semplice per migrare un container su una piattaforma diversa è eseguire un backup e ripristinarlo sul computer di destinazione, fisicamente o in remoto tramite ssh.
Puoi anche migrare un container utilizzando l'API LXD e il protocollo Simplestreams. Parleremo di LXD nella sezione seguente. Quindi non preoccuparti se non lo sai già. Non entreremo nei dettagli di ogni fase del processo di migrazione. Forse lo tratteremo su una guida diversa. Per ora, puoi trovare ulteriori informazioni sul sito Web di Ubuntu per quanto riguarda la migrazione in tempo reale. Stéphane Graber, lo sviluppatore principale di LXC, si è occupato anche della migrazione di LXC sul suo sito web.
LXC:supporto
Come con qualsiasi nuova piattaforma, il supporto aziendale è molto importante. Per fortuna, LXC fornisce un servizio di prim'ordine in questo senso. Quindi, indipendentemente dal fatto che utilizzi container Linux per scopi personali o aziendali, hai la garanzia di ottenere supporto aggiuntivo ogni volta che ne hai bisogno. Inoltre, poiché LXC è sviluppato da Canonical, la società dietro Ubuntu e altri popolari software open source. Pertanto, la qualità del servizio è migliore.
Canonical offre anche supporto commerciale per le aziende che desiderano utilizzare LXC per le loro applicazioni cloud-native. Tuttavia, viene fornito anche per le versioni LTS di Ubuntu. Le versioni LXC 2.0 e 3.0 sono versioni di supporto a lungo termine. Quindi, se vuoi avere contenitori stabili su tutte le tue piattaforme, dovresti attenerti a queste versioni. Il supporto per altri modelli di distribuzione di solito dipende da quella distribuzione specifica.
LXD:per iniziare
LXC è nato come un'interfaccia per lo spazio utente che fornisce l'accesso alle funzionalità di contenimento integrate del kernel Linux. È più che capace di svolgere i suoi compiti. Tuttavia, con l'emergere di Docker e del suo potente ecosistema, gli sviluppatori hanno spostato l'attenzione sullo sviluppo di una piattaforma più matura. Il risultato è LXD, un solido sistema di gestione dei container in grado di fornire un'esperienza simile a una macchina virtuale ma utilizzando i container LXC.
LXD si basa su immagini, proprio come le immagini Docker. Implementa anche un'API REST semplice ma potente per interagire a proprio agio con i servizi. Questa API si collega al sistema locale utilizzando un socket Unix e può anche essere collegata in remoto tramite protocolli di rete standard.
Alcune delle funzionalità di LXD includono maggiore sicurezza, scalabilità, esperienza utente, migrazione in tempo reale, controllo avanzato delle risorse, gestione della rete e gestione dello storage. Nel complesso, LXD è un complemento di LXC, non un sostituto. Utilizza LXC sotto il cofano e rimuove semplicemente i dettagli di basso livello.
Installazione e utilizzo di LXC
Abbiamo discusso i meriti di Linux Containers in dettagli pesanti. Ora è il momento di sporcarci le mani e iniziare a usare questa fantastica tecnologia. Ma prima devi installare LXC sulla tua macchina.
Stiamo mostrando come installare LXC su una macchina Linux standard. Imparerai come installare LXC in Linux e creare container usando la CLI. Apri semplicemente il tuo emulatore di terminale Linux preferito e digita il seguente comando.
$ sudo apt-get install lxc
Questo installerà l'interfaccia a riga di comando lxc nella tua macchina locale. Una volta fatto, avrai accesso a tutti i comandi lxc e ai modelli di distribuzione necessari per creare ed eseguire i container. Ora puoi creare un contenitore di base usando il seguente semplice comando.
$ lxc-create -t <template> -n <container name>
Il -t flag specifica il nome del modello e -n flag specifica il nome del contenitore. Questo comando creerà il contenitore in base al modello di distribuzione specificato. Utilizzare il comando seguente per visualizzare un elenco di tutti i modelli disponibili.
$ ls /usr/share/lxc/templates/
Quindi, il comando seguente crea un contenitore denominato test-container utilizzando il modello Alpine.
$ lxc-create -t alpine -n test-container
Questo andrà avanti e scaricherà i file necessari per un'installazione Alpine. Questa operazione dovrebbe richiedere un po' di tempo e al termine dell'operazione verranno visualizzati l'utente e la password predefiniti. Ora puoi avviare il contenitore usando il comando seguente.
$ sudo lxc-start -n test-container
Usa il comando successivo per connetterti a questo contenitore usando il nome utente e la password predefiniti.
$ sudo lxc-console -n test-container
Questo ti collegherà al container in esecuzione. Utilizzare la combinazione di tasti Ctrl+a+q per disconnettersi da questo contenitore. Puoi anche connetterti al container direttamente come root usando quanto segue.
$ sudo lxc-attach -n test-container
Usa il comando seguente per dare un'occhiata ad alcune delle informazioni per questo contenitore.
$ sudo lxc-info -n test-container
Visualizzerà il nome del contenitore insieme al suo stato, PID, indirizzo IP, utilizzo della memoria, utilizzo della CPU e altro. Se hai avviato più contenitori, puoi visualizzarne un elenco utilizzando quanto segue.
$ sudo lxc-ls
Per fermare un container specifico, usa il comando seguente.
$ sudo lxc-stop -n test-container
Puoi anche rimuovere un container dal tuo sistema se non ne hai più bisogno. Utilizzare il comando seguente per questo scopo.
$ sudo lxc-destroy -n test-container
Questo cancellerà il contenitore di test insieme a tutte le sue configurazioni dall'ambiente host. Vai alla pagina della documentazione di LXC per maggiori dettagli su ciascun comando disponibile.
Installazione e utilizzo di LXD
Come abbiamo già discusso, LXD è un wrapper per LXC con un elenco di funzionalità aggiunte. È essenzialmente un sistema di gestione basato su immagini per container Linux. Puoi installare lxd usando il seguente comando.
$ sudo snap install lxd
Non è necessario installare LXC separatamente se si installa LXD. Oltre al pacchetto snap, LXD è disponibile anche come pacchetti Debian. Puoi anche installarlo dal sorgente. Ora, devi fare alcune cose di configurazione. Il primo è aggiungere /snap/bin/lxd al PERCORSO$ del tuo sistema.
$ echo 'export PATH="/snap/bin/lxd:$PATH"' >> ~/.bashrc $ source ~/.bashrc
Devi inizializzare la configurazione lxd ora. Esegui semplicemente il seguente comando da terminale Linux per farlo.
$ sudo lxd init
Ti chiederà un sacco di opzioni. Puoi semplicemente selezionare quelli predefiniti per il tuo ora. Una volta completata la configurazione, ora puoi creare il tuo primo container. LXD crea istanze di container utilizzando le immagini. Il comando seguente mostra un elenco di repository di immagini disponibili. Puoi aggiungere nuove fonti di immagini e crearle localmente. Per ora, rimarremo con i telecomandi ufficiali.
$ sudo lxc launch images:alpine
Questo comando creerà un'istanza utilizzando l'immagine alpine. È un'immagine abbastanza leggera che si adatta molto bene al nostro scopo. Puoi usare altre immagini se vuoi. Ora puoi utilizzare il comando seguente per ottenere una shell in questo contenitore appena creato.
$ sudo lxc exec test-container /bin/sh
Se hai creato il contenitore sulla base di un'immagine Ubuntu, sostituisci /bin/sh con /bin/bash per invocare la shell bash. Puoi anche utilizzare qualsiasi shell Linux standard purché l'immagine del contenitore lo supporti. Puoi anche eseguire un comando all'interno del contenitore senza collegarti a una shell.
$ sudo lxc exec test-container -- ip a
Questo stamperà l'indirizzo IP delle interfacce del contenitore usando il comando IP di Linux. Infine, puoi interrompere il test-container usando il comando seguente.
$ sudo lxc stop test-container
LXD supporta molti comandi aggiuntivi per i container Linux. Vai alla pagina della documentazione di LXD per maggiori dettagli su questo.
Pensieri finali
I container Linux sono un ottimo modo per implementare VM leggere senza hypervisor. Questo li rende altamente scalabili e rispettosi delle risorse. Inoltre, LXC offre anche un approccio praticabile allo sviluppo di applicazioni cloud-native. La differenza principale tra i container LXC e i container Docker è che LXC è incentrato sul sistema operativo, mentre i container Docker sono incentrati sull'applicazione.
Quindi, se stai cercando di creare un ambiente di laboratorio personale o un servizio robusto pronto per il cloud, considera LXC un'opzione migliore rispetto a Docker o rkt. Tuttavia, Docker è ancora una scelta eccellente per la virtualizzazione delle applicazioni. Quindi, consulta la nostra guida sui comandi Docker di tutti i giorni se vuoi provare Docker.