ARTICOLO/ 20 DICEMBRE 2023
Kubernetes: come navigare preparati nel mare dei microservizi
Prima di tutto cosa si intende quando si parla di Kubernetes?
Strumento conosciuto anche come K8S. Il nome Kubernetes deriva dal greco, significa timoniere o pilota.
Si tratta di una piattaforma portatile, estensibile e open-source per la gestione e l’orchestrazione dei carichi di lavoro e dei servizi containerizzati, in grado di facilitare sia la infrastructure as a code che l'automazione.
Per promuovere la collaborazione tra i team e un approccio di continuous innovation nello sviluppo di applicativi moderni, anche Kubernetes, strutturato su tecnologia a microservizi, si avvale della metodologia DevOps, di cui abbiamo parlato nell’ultimo articolo.
Kubernetes permette di eliminare molti dei processi manuali coinvolti nel deployment e nella scalabilità di applicazioni containerizzate, nonché di gestire in maniera semplice ed efficiente cluster di host su cui vengono eseguiti i container.
Consente di gestire e distribuire su vasta scala applicazioni containerizzate, legacy e app cloud native, così come quelle convertite in microservizi, fra ambienti diversi quali cloud privati e i principali cloud pubblici, come Amazon Web Services (AWS), Google Cloud, IBM Cloud e Microsoft Azure.
Una delle caratteristiche fondamentali di questo strumento è la così detta portabilità, ovvero la possibilità di trasportare le applicazioni da un provider cloud ad un altro e da un cloud privato ad uno pubblico e viceversa.
Contesto
Secondo "The CTO's Guide to Containers and Kubernetes" di Gartner, entro il 2027 oltre il 90% delle organizzazioni globali utilizzerà applicazioni containerizzate per lo sviluppo di software.
L'avvento dei microservizi ha aperto nuove opportunità, trasformando le regole sulla scalabilità delle applicazioni così da permettere alle organizzazioni di costruire una struttura informatica più resiliente, affidabile e in grado di gestire gli alert.
I dati confermano questo trend: il mercato globale dei container applicativi, stando a un’analisi di Data Bridge Market Research, è previsto espandersi con un CAGR (tasso annuo di crescita composto) del 32,7% nel periodo 2023-2030. In questo comparto, la voce “container data management & orchestration” risulta rappresentare il più ampio segmento di offerta.
Per entrare un po’ di più nel merito della nascita dell’esigenza di sviluppare applicazioni a microservizi confrontiamo questa modalità con la classica applicazione monolitica.
Per app monolitica s’intende un'app con un’architettura composta da un unico processo o contenitore, suddivisa in componenti, librerie o livelli interni. Lo svantaggio di questo approccio diventa evidente quando la crescita dell’applicazione richiede un ridimensionamento della stessa.
Invece, una struttura a microservizi prevede una composizione a più contenitori (più servizi) che permettono l'esistenza indipendente di ogni funzione principale di un'applicazione.
Quando gli elementi di un'applicazione sono distinti i team di sviluppo e i team operativi possono lavorare in tandem senza intralciare le reciproche attività, lavorando simultaneamente alla stessa app e riducendo le tempistiche.
Il successo di Kubernetes sta proprio nella gestione dello sviluppo a microservizi che porta i vantaggi di avere costi minori, performance più efficienti, rilasci di aggiornamenti e funzionalità molto più veloci rispetto a quelli di un’applicazione monolitica.
Ma che differenza c’è tra Docker e Kubernetes?
Kubernetes e Docker sono due tecnologie compatibili e complementari che possono essere utilizzate in contesti differenti.
Docker è un container runtime cioè un software che mette a disposizione dell’utente tutti gli strumenti e le funzionalità per l’esecuzione dei container su un singolo host, sia esso un server che una workstation. Grazie a Docker gli sviluppatori sono in grado di deployare ed eseguire le proprie applicazioni all’interno di un singolo host.
Kubernetes è uno strumento più complesso che permette l’orchestrazione dei container su più nodi dove è in esecuzione un software sviluppato su container runtime (che potrebbe essere Docker o un altro prodotto analogo). Grazie a Kubernetes le applicazioni possono scalare orizzontalmente ed essere eseguite con un’alta affidabilità, in quanto anche in caso di fault di un nodo tutti i container in esecuzione verrebbero ospitati all’interno dei restanti nodi.
Il vantaggio nell’adozione di Kubernetes è l’esecuzione di applicazioni complesse containerizzate su scala, mentre quello di Docker, grazie ai container, è la possibilità di standardizzare le operazioni legate alla gestione delle applicazioni e velocizzare il rilascio di applicazioni.
Perché utilizzare Kubernetes?
Rendere lo sviluppo software più semplice e agile è il fattore principale che spinge le aziende ad adottare questa soluzione. Da una recente ricerca è emerso che il 62% delle aziende sceglie di aumentare la flessibilità delle applicazioni e il 54% di migliorare l'efficienza degli sviluppatori. L’elemento fondante di questa soluzione è, come dicevamo prima, la portabilità che permette di eseguire un’applicazione sia on-premise sia in cloud senza la necessità di re-platforming o di re-factoring, risparmiando così sul tempo degli sviluppatori.
La pandemia ha spinto molte aziende ad adottare soluzioni cloud per avvicinare i servizi digitali ai clienti e ai dipendenti, portando però ad un aumento dei costi. Kubernetes non solo semplifica l'utilizzo del cloud, ma aumenta l'efficienza dell'infrastruttura e aiuta a controllare la crescita dei costi legati ad esso.
Infine, più di un terzo (37%) ha dichiarato che la necessità di migliorare l'efficienza del proprio lavoro è stato un altro fattore determinante. Questo aspetto diventerà ancora più importante man mano che le infrastrutture ibride e multi-cloud continueranno ad espandersi, e ci sarà bisogno di gestire cluster Kubernetes in più ambienti.
Il successo dipende dalla capacità di scegliere correttamente gli ambienti cloud e i metodi di standardizzazione dei processi DevOps nei cloud adottati.
Perché scegliere Kubernetes? 3 punti per implementare questa tecnologia.
- Integrazione con tutti i cloud provider
Consiste nella scelta dell’infrastruttura sulla quale far girare l’applicazione, definita in base alle esigenze dell’azienda.
- Accessibilità a tutti gli strumenti e ambienti di test e sviluppo
Kubernetes mette a diposizione tutti gli strumenti che facilitano lo sviluppo e la fase di migrazione.
Inoltre, la creazione di vari ambienti risulta semplificata grazie all'impiego di Kubernetes, il quale agevola la predisposizione di diversi ambienti in cui condurre lo sviluppo o i test per l'applicazione.
- Automazione CI/CD
L’organizzazione che sfrutta questa tecnologia potrà mettere in piedi un sistema automatico di deploy degli aggiornamenti per garantire il continuo miglioramento delle applicazioni sviluppate.
Caso d’uso
L’azienda aveva la necessità di modernizzare l’esecuzione e lo sviluppo delle proprie applicazioni. Prima del nostro intervento aveva l’IT basato su prodotti legacy, virtual machine, application server come Jboss o Websphere.
Questo portava a:
- Effort elevato per la gestione dell’infrastruttura IT (patching OS, deploy, networking etc.)
- Elevata richiesta di risorse applicative
- Ridotta scalabilità e portabilità applicativa
- Tempi di sviluppo applicativo elevato
- Security dei sistemi bassa
Si è deciso di valutare una piattaforma cloud native on-premise, dopo che l’azienda ha espresso l’impossibilità di migrare i propri dati all’interno di cloud pubblici.
Per rispondere alle richieste dell’azienda abbiamo implementato diversi cluster per test/sviluppo e produzione, tutti controllabili come un unico cluster da un’unica dashboard.
La soluzione proposta non prevedeva la gestione di sistemi operativi, ma quella di container. Si è proceduto quindi alla migrazione delle applicazioni sui container, permettendo così di beneficiare di una grande libertà strategica e di una riduzione delle operations IT fino al 90%.
Tale ottimizzazione ha permesso alle applicazioni di ridurre l’utilizzo delle risorse e gestire in maniera automatica il networking, la business continuity e il rilascio degli applicativi garantendo un miglior servizio e maggiore sicurezza.
I benefici derivanti dalla migrazione applicativa a container e dall’adozione di piattaforme cloud native sono stati:
- Scalabilità di infrastruttura
- Maggiore affidabilità dell'infrastruttura
- Efficientamento dei processi di deploy
- Riduzione delle operations IT fino al 90%
- Diminuzione delle richieste di risorse applicative
- Autonomia dei Dev e riduzione del time to market
- Maggiore sicurezza implementata by design nelle soluzioni
- Cloud Experience anche on-premise
- Standardizzazione e governance dei processi IT su tutto lo stack a prescindere dall’infrastruttura sottostante
AUTORE:
Alessio Panizzi -Innovation Manager Var Group