Oltre alla virtualizzazione, i container si stanno evolvendo a un ritmo senza precedenti. In questo post del blog tratteremo le basi della virtualizzazione e ti porteremo nel mondo dei container. In secondo luogo, spiegheremo la differenza tra una macchina virtuale e un container. Infine, parleremo del rapporto tra container e storage.
Nozioni di base sulla virtualizzazione
La virtualizzazione è l’atto di creare un ambiente informatico simulato astraendolo dall’hardware informatico fisico. Ti consente di creare più istanze di elaborazione virtuale dai componenti hardware e software. Nella maggior parte dei casi, queste istanze possono essere computer nel senso tradizionale oppure applicazioni, server o configurazioni di rete.
Un hypervisor è un tipo di software per computer che crea ed esegue macchine virtuali. È un livello software leggero che si trova tra l’hardware fisico e un ambiente virtualizzato. L’hypervisor è l’intermediario che estrae risorse dalle materie prime dell’infrastruttura e le indirizza a varie istanze informatiche.
Macchine Virtuali e Container
La virtualizzazione consente ai computer di generare computer chiamate VM (macchine virtuali). Funzionano sul software hypervisor, consentendo a più SO (sistemi operativi) di condividere lo stesso hardware fisico sottostante e di operare in modo isolato l’uno dall’altro. L’hypervisor virtualizza l’hardware sottostante e ogni VM esegue il proprio sistema operativo. Le offerte VM più diffuse includono VMware, Microsoft Hyper-V, Virtual Box, Xen e altro.
Anche i container sono istanze di elaborazione basati suò software ma vengono eseguiti su un sistema operativo host condiviso. Confezionano il software in unità portatili ed eseguibili con tutte le dipendenze necessarie per funzionare ovunque, come server, laptop e cloud. Gli strumenti container più diffusi includono LXC (Linux).
Architettura monolitica e a microservizi
Un’architettura monolitica è il modello tradizionale di un programma software. È costruito come un’unità unificata, autonoma e indipendente da altre applicazioni. Quando si sviluppa con un’architettura monolitica, il vantaggio principale è la velocità di sviluppo perché l’applicazione è molto semplicemente basata su un’unica base di codice.
Le architetture di microservizi per lo sviluppo di applicazioni sono nate da questa tendenza dei container. Utilizzando i container, le applicazioni possono essere suddivise in componenti più piccoli o “servizi” che servono a un unico scopo e questi servizi possono essere sviluppati e distribuiti indipendentemente l’uno dall’altro. I microservizi non riducono la complessità, ma la rendono visibile e più facile da gestire suddividendo le attività in processi più piccoli che operano indipendentemente l’uno dall’altro e contribuiscono al tutto.
Ad esempio, supponiamo di avere un’applicazione che consente ai clienti di acquistare prodotti. Potresti avere una barra di ricerca, un carrello della spesa, un pulsante di acquisto, ecc. Ciascuno di questi “servizi” può vivere nel proprio container, quindi se la barra di ricerca smette di funzionare a causa del carico elevato, non ferma il tutto.
Virtual Machines vs. Containers
Senza dover portare con sé tutto il codice del sistema operativo, i container sono più leggeri (megabyte rispetto ai gigabyte delle VM) e si avviano più velocemente delle VM. Puoi eseguire da due a tre volte più applicazioni su un singolo server con container rispetto a quelle che potresti eseguire con le VM. Basandosi solo su questo, si potrebbe sostenere che i container siano il futuro.
Casi d’uso di VM e Container
Sia le VM che i container presentano vantaggi e svantaggi e la decisione finale dipenderà dalle vostre esigenze specifiche.
Le macchine virtuali rappresentano la scelta migliore per l’esecuzione di app che richiedono tutte le risorse e le funzionalità del sistema operativo quando è necessario eseguire più applicazioni sui server o si ha un’ampia varietà di sistemi operativi da gestire. Se disponi di un’applicazione monolitica esistente di cui non prevedi o non devi effettuare il refactoring in microservizi, le VM continueranno a fare al caso vostro.
I container rappresentano la scelta migliore quando la priorità principale è massimizzare il numero di applicazioni o servizi in esecuzione su un numero minimo di server e quando è necessaria la massima portabilità. Se stai sviluppando una nuova app e desideri utilizzare un’architettura di microservizi per scalabilità e portabilità, i container sono la strada da percorrere. I container eccellono quando si tratta di sviluppo di applicazioni native del cloud basate su un’architettura di microservizi.
L’implementazione dei Container in un cluster richiede uno storage esterno
Il vantaggio dei container è che possono essere sollevati o abbassati rapidamente a seconda del carico. Un pod contiene container e archivi. In un cluster, quando il carico diminuisce, i pod potrebbero essere eliminati a causa di cali di carico, arresti anomali dei processi o altri motivi. A questo punto è necessario registrare lo stato dell’applicazione in modo che le nuove istanze (nuovi Pod) ottengano lo stato corrente al momento dell’avvio. Uno storage persistente conserva i dati anche quando il dispositivo è spento. Pertanto, l’applicazione deve archiviare le informazioni sullo stato all’esterno del pod.
Anche se inizialmente si dava per scontato che i container non avrebbero richiesto uno storage persistente, le crescenti implementazioni hanno dimostrato la necessità di un qualche tipo di continuità con le applicazioni containerizzate. Ad esempio, se un container che ospita parte di un’applicazione muore, è più semplice creare nuovamente un’istanza di quel container (locale o remoto) con i dati esistenti piuttosto che ricrearlo o copiarlo da un’altra posizione.
Puoi specificare la memoria esterna come memoria permanente quando crei il pod, montando essenzialmente il volume esterno nel container. Il container in esecuzione nel Pod accede allo spazio storage esterno in modo trasparente, come qualsiasi altro spazio di archiviazione locale.
CSI collega i container ai prodotti storage
Il CSI (Container Storage Interface) è uno standard per esporre sistemi di storage a file e blocchi arbitrari a carichi di lavoro containerizzati su sistemi CO (Container Orchestration) come Kubernetes, Mesos, Docker o Cloud Foundry. L’orchestrazione dei container è l’automazione di gran parte dello sforzo operativo richiesto per eseguire carichi di lavoro e servizi containerizzati. Ciò include un’ampia gamma di cose di cui i team software hanno bisogno per gestire il ciclo di vita di un container, tra cui provisioning, distribuzione, scalabilità, rete, bilanciamento del carico e altro ancora. I fornitori di storage forniscono un plug-in CSI per farlo funzionare su una serie di sistemi di orchestrazione dei container.
Conclusioni
In breve, le VM aiutano le aziende a ottenere il massimo dalle proprie risorse infrastrutturali espandendo il numero di macchine che è possibile ottenere da una quantità limitata di hardware e software. I container aiutano le aziende a sfruttare al massimo le risorse di sviluppo abilitando microservizi e pratiche DevOps. Nell’architettura cluster, è necessario uno storage esterno per condividere lo stato e le risorse dell’applicazione. E CSI funge da intermediario tra container e storage.