Facebooktwitterredditpinterestlinkedinmailby feather

Web Containers

Container

Questa guida tratta dell’importanza dei container nel cloud computing, evidenzia i vantaggi principali e presenta una panoramica dell’emergente ecosistema di tecnologie correlate su Docker, Kubernetes, Istio e Knative.

Cosa sono i container?

I container sono delle unità eseguibili di software in cui viene impacchettato il codice applicativo, insieme alle sue librerie e dipendenze, con modalità comuni in modo da poter essere eseguito ovunque, sia su desktop che su IT tradizionale o cloud.

Per farlo, i container usufruiscono di una forma di virtualizzazione del sistema operativo (SO), in cui le funzioni del SO (ossia, nel caso del kernel Linux, i namespace e le primitive dei cgroup) vengono utilizzate efficacemente sia per isolare i processi che per controllare la quantità di CPU, memoria e disco a cui tali processi hanno accesso.

I container sono piccoli, veloci e portatili perché, diversamente da una VM, non hanno bisogno di includere un sistema operativo guest in ogni istanza e possono invece sfruttare semplicemente le funzioni e le risorse del sistema operativo host.

I container sono apparsi per la prima volta decenni fa con versioni come le jail FreeBSD e le partizioni di carico di lavoro AIX (WPAR), ma la maggior parte degli sviluppatori moderni ricorda il 2013 come inizio dell’era dei container moderni con l’introduzione di Docker.

Confronto tra container e VM (virtual machine)

Un modo per comprendere meglio un container è capire in che cosa si differenzia da una tradizionale virtual machine (VM). Nella virtualizzazione tradizionale— sia locale che nel cloud— per virtualizzare l’hardware fisico viene utilizzato un hypervisor. Ogni VM contiene quindi un sistema operativo guest, una copia virtuale dell’hardware che il sistema operativo richiede di eseguire, con un’applicazione e le relative librerie e dipendenze associate.

Invece di virtualizzare l’hardware sottostante, i container virtualizzano il sistema operativo (di norma Linux), in modo che ogni singolo container includa solo l’applicazione e le relative librerie e dipendenze. L’assenza del sistema operativo guest è il motivo per cui i container sono così leggeri e, quindi, veloci e portatili.

Vantaggi dei container

Il vantaggio principale dei container, soprattutto rispetto a una VM, è che forniscono un livello di astrazione che li rende leggeri e portatili.

  • Leggeri: i container condividono il kernel del sistema operativo della macchina, eliminando la necessità di un’istanza del sistema operativo completa per ogni applicazione e rendendo i file container piccoli e poco gravosi sulle risorse. La loro dimensione più piccola, soprattutto rispetto alle VM, significa che possono essere avviati rapidamente e supportare meglio le applicazioni native del cloud di cui viene eseguita la scalabilità orizzontale.
  • Portatili e indipendenti dalla piattaforma: i container portano tutte le loro dipendenze con loro, il che significa che il software può essere scritto una volta e quindi eseguito senza che occorra riconfigurarlo su ambienti di calcolo on-premises, su cloud e su laptop.
  • Supportano lo sviluppo e l’architettura moderni: grazie a una combinazione della loro portatilità/coerenza di implementazione sulle piattaforme e della loro piccola dimensione, i container sono una risposta ideale ai modelli di sviluppo e applicazione moderni – come DevOps, serverless e microservizi— che sono sviluppati su regolari implementazioni di codice in piccoli incrementi.
  • Migliorano l’utilizzo: come le VM prima di loro, i container consentono agli sviluppatori e agli operatori di migliorare l’utilizzo della CPU e della memoria delle macchine fisiche. Grazie al fatto che abilitano anche le architetture di microservizi, i container vanno anche oltre poiché i componenti applicativi possono essere implementati e ridimensionati in modo più granulare, un’attraente alternativa al dover eseguire un ridimensionamento incrementale di un’intera applicazione monolitica a causa di un singolo componente che sta avendo difficoltà a gestire il suo carico.

Casi di utilizzo per i container

I container stanno diventando sempre più importanti, soprattutto negli ambienti cloud. Molte organizzazioni stanno anche prendendo in considerazione l’utilizzo dei container al posto delle VM come piattaforma di calcolo per utilizzo generico per le loro applicazioni e i loro carichi di lavoro. All’interno di questo ambito molto ampio, però, ci sono dei casi di utilizzo chiave in cui i container sono particolarmente rilevanti.

  • Microservizi: i container sono piccoli e leggeri, il che li rende particolarmente adatti per le architetture di microservizi in cui le applicazioni sono costituite da molti servizi più piccoli accoppiati in modo lasco e implementabili in modo indipendente.
  • DevOps: la combinazione di microservizi come architettura e di container come piattaforma è una base comune per molti team che adottano DevOps come modalità per le loro attività di creazione, distribuzione ed esecuzione di software.
  • Ibrido, multicloud: poiché i container possono essere eseguiti in modo coerente ovunque, su ambienti cloud, on-premises e laptop, sono un’architettura sottostante ideale per gli scenari di cloud ibrido e multicloud in cui le organizzazioni si ritrovano a operare su una varietà di cloud pubblici in combinazione con il loro data center.
  • Modernizzazione e migrazione delle applicazioni: uno degli approcci più comuni alla modernizzazione delle applicazioni inizia eseguendone la containerizzazione in modo che sia possibile eseguirne la migrazione al cloud.

Containerizzazione

Il software deve essere progettato e impacchettato in modo diverso per poter usufruire dei container, un processo comunemente indicato come containerizzazione.

Quando si esegue la containerizzazione di un’applicazione, il processo include l’impacchettamento di un’applicazione con le sue variabili di ambiente, i suoi file di configurazione, le sue librerie e le sue dipendenze software pertinenti. Il risultato è un’immagine container che può quindi essere eseguita su una piattaforma container.

Orchestrazione dei container con Kubernetes

Man mano che le aziende hanno cominciato ad adottare i container – spesso come parte di architetture moderne native del cloud – la semplicità del singolo container ha cominciato a collidere con la complessità della gestione di centinaia (e anche migliaia) di container su un sistema distribuito.

Per affrontare questa sfida, è emersa l’orchestrazione dei container come un modo per gestire grandi volumi di container lungo tutto il loro ciclo di vita, compresi:

  • Provisioning
  • Ridondanza
  • Monitoraggio dello stato di integrità
  • Allocazione di risorse
  • Scalabilità e bilanciamento del carico
  • Spostamento tra host fisici

Sebbene per contribuire ad affrontare queste sfide siano state create molte piattaforme di orchestrazione dei container (come Apache Mesos, Nomad e Docker Swarm), Kubernetes, un progetto open source introdotto da Google nel 2014, è diventato rapidamente la piattaforma di orchestrazione dei container più diffusa ed è quella in base alla quale la maggior parte del settore ha fissato lo standard.

Kubernetes consente agli sviluppatori e agli operatori di dichiarare uno stato desiderato del loro ambiente container complessivo tramite i file YAML e Kubernetes si occupa quindi di tutto il resto stabilendo e mantenendo tale stato, con attività che includono l’implementazione di uno specifico numero di istanze di una data applicazione o un dato carico di lavoro, il riavvio di detta applicazione se si verifica un suo malfunzionamento, il bilanciamento del carico, la scalabilità automatica, le implementazioni con un tempo di inattività pari a zero e altro ancora.

Istio, Knative e l’ecosistema dei container in espansione

Man mano che i container continuano a prendere slancio come un modo diffuso per impacchettare ed eseguire applicazioni, l’ecosistema di strumenti e progetti concepiti per consolidare ed espandere i casi di utilizzo di produzione continua a crescere. Oltre a Kubernetes, due dei progetti più diffusi dell’ecosistema dei container sono Istio e Knative.

Istio

Man mano che gli sviluppatori sfruttano i container per creare ed eseguire architetture di microservizi, le preoccupazioni di gestione vanno oltre le considerazioni sul ciclo di vita dei singoli container e riguardano il modo in cui grandi numeri di piccoli servizi – spesso indicati come “rete di servizi” – si connettono e si correlano tra loro. Istio è stato creato per consentire agli sviluppatori di gestire più agevolmente le sfide associate a rilevamento, traffico, monitoraggio, sicurezza e altro ancora.

Knative

Le architetture serverless continuano anche a crescere in popolarità, in particolare all’interno della community nativa del cloud. Il grande valore di Knative è la sua capacità di implementare servizi containerizzati come funzioni serverless

Invece di essere costantemente in esecuzione e di rispondere quando è necessario (come fa un server), una funzione serverless può “scalare a zero”, il che significa che non è affatto in esecuzione a meno che non venga richiamata. Questo modello può consentire di risparmiare ampie quantità di potenza di calcolo quando viene applicato a decine di migliaia di container.