Kubernetes: questo sconosciuto!
La parola ha radici lontane, nel greco antico infatti significava “nocchiere” o “pilota”.
Si tratta di una piattaforma open source sviluppata da Google come evoluzione del proprio sistema Borg, oggi utilizzata per la creazione e la gestione automatica dei container, cioè quegli ambienti software in grado di eseguire e isolare dall’esterno l’attuazione di processi e applicazioni informatiche.
Prima di addentrarmi nel racconto di che cosa è e fa la piattaforma, vorrei spiegare per chi magari non è così addentro ai tecnicismi informatici che cosa è un container e come funziona.
Che cos’è un container.
L’evoluzione informatica della funzionalità dei server è passata da un’architettura esclusivamente fisica ad una virtuale e, recentemente, alla virtualizzazione delle applicazioni e dei software, al fine di non sprecare potenze di calcolo e risorse, altrimenti spesso inutilizzate. La creazione dei container serve proprio a questo: perché virtualizzare un’intera macchina, quando è possibile farlo con una piccola parte di essa?
Questa intuizione ha spinto gli sviluppatori a trovare delle strade alternative alla virtualizzazione completa, così il team di Docker ha reso questa tecnologia uno standard, sviluppando un formato di containerizzazione capace di comprimere in blocchi le applicazioni ed effettuarne il deploy (rilascio al cliente di un sistema software o di un’applicazione) in qualsiasi ambiente di esecuzione, senza doversi preoccupare delle condizioni di eseguibilità. L’inserimento dei dati nei container può essere considerata figlia della virtualizzazione, da cui deriva, ma offre dei miglioramenti importanti.
Rispetto a un’intera macchina virtuale, un container offre:
un deployment semplificato: impacchettando un’applicazione in un singolo componente, che può essere distribuito e configurato con una sola linea di comando, senza preoccuparsi dell’ambiente di runtime (momento in cui un programma viene eseguito);
una disponibilità rapida: con la virtualizzazione e l’astrazione del solo sistema operativo e delle componenti necessarie all’esecuzione dell’applicazione, invece che l’intera macchina, il sistema si avvia in un tempo minore, rispetto a quello di una macchina virtuale;
un controllo più capillare: i container consentono agli operatori e agli sviluppatori di suddividere in pezzi ancora più piccoli le risorse computazionali, garantendo così un controllo superiore sull’eseguibilità delle applicazioni e un miglioramento delle prestazioni dell’intero sistema.
I vantaggi della containerizzazione sono diversi, tra cui l’opportunità per gli sviluppatori di possedere sul proprio laptop migliaia di container, e avere sempre a portata di mano un ambiente di deploy o test adatto a ciascuna applicazione in sviluppo. Su un laptop infatti è possibile eseguire diverse virtual machine, ma non in modo veloce e con limitazioni alle prestazioni esecutive, cosa invece possibile con i container. Inoltre la gestione dei cicli di rilascio delle applicazioni è semplice: per distribuire una nuova versione di un container occorre lo stesso tempo necessario a digitare una singola linea di comando in console.
La molteplice funzionalità, la portabilità tra i principali cloud provider e l’alta affidabilità, hanno reso il container uno degli strumenti al servizio degli sviluppatori più utilizzato per ottimizzare le risorse e creare un’infrastruttura performante.
Container vs macchine virtuali
Il vantaggio dei container rispetto alle virtual machine sta nella virtualizzazione delle applicazioni software dell’intera infrastruttura informatica. Poiché i container sfruttano il sistema operativo dell’host, invece del proprio, ne consegue che necessitano di risorse di elaborazione minime, oltre a essere più semplici da installare. Gli sviluppatori non devono intervenire per modificare tutta l’infrastruttura, ma gli è sufficiente agire sul singolo componente applicativo o processo. Da qui l’esigenza di un modello per governare automaticamente l’orchestrazione dei container distribuiti in cluster e su più server host.
La storia dei Kubernetes.
Quando, nel 2014, Google scelse questo nome per indicare la piattaforma open source per l’orchestrazione e la gestione di container, creata da Craig McLuckie e Joe Beda, scelse un logo rappresentato da un timone stilizzato, per richiamare l’origine greca e il significato della parola. I sette raggi del timone facevano riferimento al progetto Seven of Nine, che era all’origine di Kubernetes come ulteriore sviluppo di Borg. Nel 2015 Google, in seguito a un’alleanza con la Linux Foundation, decise di donare Kubernetes alla neonata Cloud Native Computing Foundation (CNCF), gruppo che aggrega i colossi mondiali del public cloud, insieme a un centinaio di startup. Il risultato attuale è un movimento globale che vede Kubernetes come uno dei principali tool di riferimento, con una crescita nell’utilizzo che i suoi fondatori non avevano ipotizzato neppure nei loro sogni più audaci. Nel 2019, infatti, aveva già più di 2.300 contributor e una diffusione capillare tra le imprese più innovative del mondo.
Come funziona Kubernetes
L’architettura e gli elementi chiave di Kubernetes rappresentano le ragioni del suo successo. La macchina master controlla i nodi (ognuno di loro rappresenta un singolo host di calcolo, cioè di macchina virtuale o fisica); essi lavorano controllati dal nodo master, che consente di programmare l’automatizzazione e la distribuzione dei container, in base ai desiderata dello sviluppatore e alla capacità di calcolo della macchina. Il software che riceve ed esegue gli ordini dal nodo master si chiama kubelet; esso avvia ed esegue i container. Gruppi di container riuniti in pod condividono risorse di calcolo e rete.
I vantaggi
La crescente fortuna di Kubernetes deriva dalla sua versatilità, visto il vasto numero di strumenti di supporto open source e la portabilità attraverso i principali cloud provider. Questo strumento innovativo è in grado di integrare i vari livelli di security con la stessa modalità con cui riesce a far interagire carichi di lavoro, reti, storage ecc., cioè mettendo a disposizione un’architettura di container completa. Questo vantaggio si riflette anche nel contenimento del rischio di downtime, perché la struttura della piattaforma assicura una continuità del servizio vicina al 100%.
Il futuro
Kubernetes permetterà la totale sincronizzazione delle app e questo porterà ad una distribuzione ottimale del carico di lavoro su tutti i cluster, grazie alla configurazione automatica dei server DNS. Insomma, tutto quello che sino a pochissimi anni addietro riguardava la fanta-informatica, oggi è realtà virtuale, mi si scusi il paradosso, che sta trasformando in maniera totale e irreversibile la concezione dei dati informatici e della loro gestione.
Buona navigazione a tutti!
Giorgio Bagnasco
Managed Services Specialist
Dottore in Matematica Informatica, originariamente sviluppatore di applicazioni Web, amministratore di database e project manager in una vasta gamma di applicazioni aziendali. Oggi specializzato in IT Management e System Integration, problem solving, progettazione e gestione di reti informatiche, ottimizzazione di sistemi informativi aziendali
Commenti recenti