Kubernetes: funzionalità, architettura e implementazioni. L’approccio di EBWorld con la soluzione Cantiere Digitale.
Che cos’è Kubernetes
Kubernetes – detto anche K8s – è una piattaforma open source estensibile per la gestione automatizzata dei container, che in un ambiente di produzione si occupano di eseguire le applicazioni garantendo continuità di servizio. Il suo utilizzo consente l’eliminazione di molti dei processi manuali inerenti al deployment tradizionale di applicazioni containerizzate consentendo alle imprese la gestione di carichi di lavoro in modo efficiente e scalabile.
La piattaforma Kubernetes è quindi particolarmente adatta alla gestione dei cluster (gruppi di macchine) di host che eseguono Docker container (o container appartenenti ad altre tecnologie). I cluster di host possono essere situati in diversi ambienti: on premises, in cloud pubblici, privati o ibridi. Kubernetes risulta efficiente e ideale per le organizzazioni che devono scalare le risorse per processi correlati alla gestione di picchi di richieste, come per l’accesso e organizzazione di dati georiferiti presi sul campo da molteplici operatori con la soluzione Cantiere Digitale di EBWorld, piattaforma web e mobile ideale per l’espansione e maintenance delle infrastrutture degli operatori di telecomunicazione e delle utilities.
Come siamo arrivati alla gestione dei container con Kubernetes
La tecnologia Kubernetes, che nasce originariamente dagli sviluppatori di Google, è il risultato degli apporti di una grande comunità open source che contribuisce continuamente allo sviluppo e perfezionamento della tecnologia. Il termine “kubernetes” significa “timoniere” o “pilota” in greco antico. La piattaforma agisce infatti “pilotando” l’ecosistema dei container garantendo scalabilità, failover e distribuzione dei carichi di lavoro in modo efficiente. Per comprendere meglio la piattaforma Kubernetes bisogna fare un salto indietro nel tempo osservando l’evoluzione dei sistemi informativi e definendo che cosa sono e cosa fanno i container.
- Deployment tradizionale: Agli albori dell’informatica le prime applicazioni o software venivano eseguite su server fisici. Questo creava non pochi problemi alle organizzazioni che si trovavano a gestire picchi di richieste. Infatti, mentre più applicazioni sono eseguite sullo stesso server fisico si potrebbe verificare una situazione in cui un’applicazione sottragga un grande numero di risorse bloccando le performance delle altre. Per risolvere il problema si è inizialmente pensato di aumentare il numero di server tuttavia, questa soluzione è stata quasi immediatamente scartata per via dei costi e dei limiti fisici legati ad essa.
- Deployment virtualizzato: L’avvento delle Virtual Machine ha permesso di aggiungere un livello di astrazione apportando maggiore sicurezza e prestazioni ai processi di deployment. Le applicazioni sono isolate all’interno di più macchine virtuali (guest) che a loro volta sono eseguite dallo stesso computer fisico (host). La virtualizzazione consente maggiore sicurezza e scalabilità in quanto le applicazioni rimangono isolate tra loro e, al tempo stesso, si possono sostituire facilmente in caso di malfunzionamento o blocco. All’interno del sistema, il software hypervisor si assicura che le risorse hardware siano distribuite correttamente tra i sistemi guest assicurando bilanciamento in base alla necessità specifica.
- Deployment containerizzato: Mentre le Virtual Machine astraggono tutte le componenti dell’hardware su cui risiedono, i container ne condividono solo il sistema operativo utilizzandolo come ambiente di runtime per l’esecuzione delle applicazioni. I container Kubernetes sono quindi più “leggeri” e consentono di separare le applicazioni dall’infrastruttura host su cui vengono eseguite grazie alla loro portabilità in qualsiasi ambiente di test, sviluppo e produzione. La gestione dei container Kubernetes ha reso possibile un vero e proprio salto quantico relativamente all’efficienza nei processi di deployment. Da architetture client/server-monolitiche caratterizzate da “blocchi di codice” ad architetture Multi Cloud e a Microservizi in cui le applicazioni lavorano come un insieme di unità funzionali indipendenti e combinabili.
A cosa serve Kubernetes
Kubernetes è lo strumento ideale per orchestrare i processi di deployment di applicazioni containerizzate, cioè eseguite da container. In un ambiente di produzione infatti le applicazioni possono essere eseguite da più container (in alcuni casi possono essere centinaia o persino migliaia) installati a loro volta in ambienti di deployment molto diversi tra loro, come server fisici, virtual machine o ambienti cloud. Ad esempio, i processi di deployment per una stessa applicazione possono avvenire in un ambiente ibrido caratterizzati dalla combinazione di risorse fisiche, virtuali e in cloud. Kubernetes risolve questa complessità fornendo un framework per l’orchestrazione dei container e per la distribuzione dei carichi di lavoro rendendo possibile l’esecuzione di applicazioni indipendenti in qualsiasi ambiente di runtime. Ad esempio, se un container smette di funzionare Kubernetes lo sostituisce automaticamente senza la necessità di un intervento manuale. Negli ambienti di produzione tradizionale invece è necessario intervenire manualmente comportando ritardi nell’esecuzione del servizio e un impiego considerevole di risorse.
Componenti base di un cluster Kubernetes
Per comprendere appieno il funzionamento e l’architettura base di un cluster Kubernetes è necessario analizzare la sua composizione base:
- Master: è la macchina che governa i nodi di Kubernetes nei quali vengono eseguite le applicazioni. Si occupa di equilibrare i carichi di lavoro gestendo le componenti del cluster Kubernetes. Il master è anche un nodo a sua volta.
- Nodi: sono le macchine (fisiche o virtuali) che eseguono le attività. Sono coordinati dal nodo master e raggruppati in cluster, cioè in insiemi di macchine.
- Pod: gruppo di container contenuti all’interno di un nodo. Condividono indirizzo IP, risorse di rete, calcolo e storage.
- Kubelet: Software che, ricevendo istruzioni dal nodo master, impartisce le istruzioni ai container per il loro avvio.
Come funziona Kubernetes
Un cluster Kubernetes è composto da:
- Uno o più nodi Master, che impartiscono istruzioni.
- Uno o più nodi Worker, che eseguono il lavoro.
All’interno di ogni nodo Worker il software Kubelet fa dialogare le macchine e impartisce istruzioni ai gruppi di container (o Pod), adibiti ad eseguire le applicazioni. Quindi a seconda della distribuzione dei carichi di lavoro i nodi Worker avranno diversi gruppi di container o Pod al loro interno che eseguono e avviano le relative applicazioni.
Il nodo Master rappresenta il cervello dell’ecosistema Kubernetes in quanto i processi eseguiti al suo interno sono essenziali. Scendendo nel dettaglio è possibile individuare i seguenti componenti principali:
-
- API Server: rappresenta la porta di ingresso del flusso informativo all’interno del cluster. In pratica, è il componente che dialoga con i diversi client di Kubernetes per ricevere indicazioni sulle operazioni da eseguire.
- Controller Manager: controlla e verifica il funzionamento dei componenti all’interno del cluster intervenendo in caso di necessità (Es. se un pod si ferma il controller manager viene attivato per la sua sostituzione o riparazione).
- Scheduler: Attribuisce ai gruppi di container o pod i nodi sui quali eseguire il lavoro in base alle necessità della produzione. Lo scheduler garantisce quindi equilibrio e bilanciamento del carico di lavoro.
- Etcd key value storage: Database che assicura backup e storage dei dati di funzionamento delle macchine assicurando sicurezza e tutela dell’ecosistema Kubernetes.
Come si può immaginare i nodi Master sono fondamentali per il funzionamento della piattaforma Kubernetes in quanto “direttori di orchestra” delle operazioni. Per questo motivo, gli ambienti di sviluppo si dotano solitamente di nodi Master di backup garantendo sicurezza e continuità di produzione. È inoltre importante considerare che tutti i nodi all’interno del cluster Kubernetes dialogano tra loro incessantemente orchestrando e organizzando autonomamente il carico di lavoro da svolgere come un’unica entità.
Vantaggi nella gestione dei container Kubernetes:
La tecnologia Kubernetes rappresenta quindi un enorme possibilità per aziende che necessitano di migliorare la gestione e il controllo delle loro applicazioni e dei processi di deployment correlati all’interno di ecosistemi ibridi e Multi Cloud. In tali ambienti, risulta necessario dotarsi di un framework che permetta l’orchestrazione e il controllo funzionale dei container localizzati su host diversi, l’ottimizzazione di risorse per il raggiungimento delle performance, la continuità di servizio, l’aggiornamento e la distribuzione continua del software e la compliance ai protocolli di sicurezza.
I vantaggi relativi alla scelta di una soluzione basata su un’architettura Kubernetes sono:
- Performance elevate con l’organizzazione per microservizi: il codice non è monolitico – detto anche codice a blocco – ma organizzato in microservizi (gruppi di container o pod). Ogni “pezzo di codice” o micro servizio è adibito a un progetto. Con Kubernetes è possibile orchestrare i microservizi collocandoli dove è necessario gestendo carichi di lavoro elevati in modo scalabile ed efficiente.
- Architettura modulare e adattabile al prodotto: L’architettura si adatta al ciclo di vita del software permettendo rilasci in maniera continuativa, automatica e scalabile.
- I downtime sono evitati grazie a un sistema stabile e che si autoregola: Il sistema Master di Kubernetes controlla l’interazione tra i microservizi. Se un micro servizio presenta criticità, Kubernetes può velocemente rimpiazzarlo riducendo i costi.
- Continuous Integration/Continuous Deployment: Il software è continuamente testato, controllato e integrato in tutte le sue fasi di sviluppo e rilascio in ottica DevOps. Se per esempio è stato individuato un errore nel codice, si può facilmente tornare alla situazione precedente al rilascio del software con una procedura di rollback
CANTIERE DIGITALE: il prodotto di EBWorld basato sulla gestione dei container Kubernetes per lo sviluppo dei cantieri.
Cantiere Digitale, basato su Kubernetes, è una piattaforma SaaS completa e abilitante utilizzata per l’espansione e maintenance delle infrastrutture degli operatori di telecomunicazione e delle utilities. Il prodotto infatti consente il monitoraggio in tempo reale dello stato di avanzamento dei lavori su più cantieri contemporaneamente aperti su tutto il territorio nazionale.
In caso di aumento delle richieste di accesso ai dati, l’architettura modulare consente l’assegnazione, la distribuzione e il bilanciamento automatico delle risorse favorendo una gestione dei picchi di lavoro in modo scalabile. Basato su tecnologia GIS, Cantiere Digitale consente la trasformazione del cantiere fisico in un vero e proprio asset digitale, semplificando il lavoro delle forze in campo, il coordinamento da parte delle direzione lavori e la supervisione da parte dell’impresa. Partendo dalla creazione di un progetto è possibile pianificarne la sua realizzazione verificando direttamente in campo lo stato di avanzamento dei lavori e dei materiali impiegati accedendo alle informazioni tramite applicazioni web e mobile.
La piattaforma Cantiere Digitale permette la gestione nella sua interezza del processo di progettazione, realizzazione, consuntivazione di nuovi asset tecnologici fornendo una soluzione consistente e capace di evolvere con le esigenze delle imprese. Il prodotto è rivolto sia alle Utilities (acqua, gas, elettricità, teleriscaldamento, telecomunicazioni) che alle società di ingegneria che gestiscono le manutenzioni e gli sviluppi della rete per conto delle utilities.