Docker e Kubernetes

Docker è una tecnologia di containerizzazione che consente la creazione e l'utilizzo dei container Linux®.

Come funziona Docker?

La tecnologia Docker utilizza il kernel di Linux e le sue funzionalità, come Cgroups e namespace, per isolare i processi in modo da poterli eseguire in maniera indipendente. Questa indipendenza è l'obiettivo dei container: la capacità di eseguire più processi e applicazioni in modo separato per sfruttare al meglio l'infrastruttura esistente pur conservando il livello di sicurezza che sarebbe garantito dalla presenza di sistemi separati.

Gli strumenti per la creazione di container, come Docker, consentono il deployment a partire da un'immagine. Ciò semplifica la condivisione di un'applicazione o di un insieme di servizi, con tutte le loro dipendenze, nei vari ambienti. Docker automatizza anche la distribuzione dell'applicazione (o dei processi che compongono un'applicazione) all'interno dell'ambiente containerizzato.

Gli strumenti sviluppati partendo dai container Linux, responsabili dell'unicità e della semplicità di utilizzo di Docker, offrono agli utenti accesso alle applicazioni, la capacità di eseguire un deployment rapido, e il controllo sulla distribuzione di nuove versioni.

I vantaggi dei container Docker

Modularità

L'approccio Docker alla containerizzazione si basa sulla capacità di estrarre i singoli componenti di un'applicazione, da aggiornare o riparare. Oltre a questo approccio basato sui microservizi, è possibile condividere i processi tra più applicazioni in modo molto simile a quello usato dalla Service-Oriented Architecture (SOA).

Controllo delle versioni delle immagini

Ogni file immagine Docker è composto da più strati, che insieme costituiscono una singola immagine. Uno strato viene creato ad ogni modifica dell'immagine. Ogni volta in cui un utente specifica un comando (es. run o copy), viene creato un nuovo strato.

Docker riutilizza questi strati per velocizzare il processo di creazione dei container. Le modifiche sono condivise tra le immagini, migliorando ulteriormente la velocità, la dimensione e l'efficienza. Il controllo delle versioni fa parte del processo di stratificazione. Ogni volta che viene apportata una modifica, il registro delle modifiche offre il controllo totale sulle immagini containerizzate.

Rollback

Uno dei maggiori vantaggi della stratificazione è la capacità di eseguire il rollback. Ogni immagine è composta da strati. Se l'iterazione di un'immagine non è soddisfacente, è possibile riportala alla versione precedente. Ciò consente uno sviluppo agile e aiuta a ottenere l'integrazione e il deployment continui (CI/CD).

Deployment rapido

In passato, la configurazione, l'esecuzione e il provisioning di un nuovo hardware richiedevano giorni e notevoli investimenti. I container basati su Docker possono ridurre il deployment a pochi secondi. Creando un container per ogni processo, puoi condividere con rapidità i processi simili con le nuove applicazioni. Poiché non è necessario riavviare un sistema operativo per aggiungere o spostare un container, i tempi per il deployment sono sostanzialmente più brevi. Inoltre, grazie alla velocità del deployment, attraverso i container è possibile creare ed eliminare dati in modo sicuro, semplice ed economico.

Docker, di per sé, è in grado di gestire i singoli container in modo molto efficace. Tuttavia, l'utilizzo di un numero sempre maggiore di container e applicazioni containerizzate, a loro volta scomposte in centinaia di componenti, l'orchestrazione e la gestione possono diventare complesse, al punto tale da rendere necessario il raggruppamento dei container per consentire la distribuzione dei servizi (tra cui servizi di rete, di sicurezza e di telemetria) su tutti i container. A questo punto entra in gioco Kubernetes.

Kubernetes

Kubernetes, noto anche come “k8s” (k+8 caratteri+s) e “kube”, è una piattaforma open source che automatizza le operazioni dei container Linux. Consente di eliminare molti dei processi manuali coinvolti nel deployment e nella scalabilità di applicazioni containerizzate. In altre parole, Kubernetes consente di gestire con semplicità ed efficienza cluster di host su cui vengono eseguiti container Linux. Questi cluster possono gestire host su cloud pubblici, privati o ibridi. Ecco perché Kubernetes è la piattaforma ideale per l'hosting di applicazioni cloud-native caratterizzate da un'elevata scalabilità, come lo streaming di dati in tempo reale tramite Apache Kafka.

Kubernetes fu inizialmente progettato e sviluppato dagli ingegneri di Google. Google fu tra i primi a dare il proprio contributo alla tecnologia di container Linux. L'azienda ha spiegato pubblicamente come Google esegue tutte le attività nei container. (Questa è la tecnologia su cui si basano i servizi cloud di Google.) Google genera più di 2 miliardi di deployment di container alla settimana, tutti gestiti da una piattaforma interna: Borg. Borg fu il predecessore di Kubernetes, e l'esperienza nello sviluppo maturata nel corso negli anni ha assunto un'importanza fondamentale per gran parte della tecnologia Kubernetes.

A cosa serve Kubernetes?

Le applicazioni di produzione si espandono su più container, che devono essere distribuiti su più server host. La sicurezza per i container è suddivisa in più livelli, pertanto può risultare complessa, ma Kubernetes può essere d'aiuto. Kubernetes ti offre le capacità di orchestrazione e gestione necessarie per distribuire i container, in modo scalabile, al fine di gestire i carichi di lavoro. L'orchestrazione di Kubernetes consente di creare servizi applicativi che si estendono su più container, programmare tali container in un cluster, gestirne la scalabilità e l'integrità nel tempo. Kubernetes permette di migliorare notevolmente la sicurezza IT.

Kubernetes deve integrarsi anche con reti, storage, sicurezza, telemetria ed altri servizi, per mettere a disposizione un'infrastruttura di container completa.

Ovviamente, ciò dipende dal modo in cui utilizzi i container nel tuo ambiente. Un'applicazione rudimentale di container Linux tratta questi ultimi come macchine virtuali efficienti e veloci. Quando ciò avviene in un ambiente di produzione e in applicazioni multiple, sono necessari più container co-locati che cooperano per fornire i singoli servizi. In questo modo, il numero di container nel tuo ambiente si moltiplica, comportando un aumento della complessità.

Kubernetes supera molte delle difficoltà comuni legate alla proliferazione dei container, raggruppandoli in un ”pod”. I pod aggiungono un livello di astrazione ai cluster di container, aiutandoti a programmare i carichi di lavoro e a fornire i servizi necessari, tra cui rete e storage, ai container stessi. Kubernetes agevola, inoltre, il bilanciamento del carico all'interno dei pod e garantisce l'utilizzo di un numero di container adeguato per supportare i tuoi carichi di lavoro.