Questo articolo è volto a presentare in maniera generica le tappe che, nel mondo dell’informatica, hanno portato alla containerizzazione dei servizi e, di conseguenza, a Kubernetes.
Innanzitutto è bene definire Kubernetes come una piattaforma open-source utilizzata per la gestione di servizi containerizzati che facilita da un lato la configurazione dichiarativa di questi e, dall’altro, l’intero processo di automazione.
Kubernetes è una piattaforma estensibile, dotata di un grande e vasto ecosistema in esponenziale crescita: tutto il supporto, gli strumenti ed i servizi sono disponibili all’interno di questo mondo.
Prima di parlare delle fasi che hanno portato all’ideazione di Kubernetes, spieghiamo l’origine del nome; Kubernetes è un termine che deriva dal greco e vuol dire pilota; la piattaforma è stata resa open source da Google nel 2014 ed unisce una pluridecennale esperienza nell’esperienza di carichi di lavoro di produzione su scala mondiale, grazie all’utilizzo delle migliori idee e pratiche della comunità.
Perché Kubernetes è diventata così utile oggigiorno?
STEP BY STEP developers!, Dividiamo la sua evoluzione in 3 fasi principali:
1. Fase del deployment classico/tradizionale: le applicazioni usate dalle organizzazioni, erano eseguite su server fisici; di conseguenza non c’era il modo di definire eventuali limiti delle risorse!
Questo comportò nel tempo molti problemi in termine di allocazione delle risorse.
Per quale motivo???
Dunque, immaginate che un numero elevato di applicazioni vengano eseguite sullo stesso server fisico; ci potrebbe essere la possibilità che una di queste (in particolare) possa assorbire maggiori risorse, togliendo alle restanti applicazioni la possibilità di offrire le prestazioni attesa.
La soluzione sarebbe quindi quella di eseguire ogni applicazione su server fisico, ma DIVERSO!
La conseguenza sarebbe un aumento dei costi per le organizzazioni (più software fisici presenti da mantenere —>più costi ingenti da sostenere) ed un sottoutilizzo delle risorse!
2. Fase della virtualizzazione del deployment: ecco che, per far fronte al problema di cui sopra abbiamo accennato, entrò in gioco la virtualizzazione.
Si presentò da subito come una buona soluzione che permise di eseguire più macchine virtuali (le VM) su una singola CPU fisica.
Di conseguenza, il beneficio fu quello di isolare le applicazioni su più macchine virtuali, fornendo così un livello di sicurezza nettamente superiore, dal momento in cui le informazioni di un’applicazione non sono accessibili da un’altra applicazione.
Quali sono stati altri benefici che la virtualizzazione ha portato?
Migliore utilizzo delle risorse con riduzione dei costi per hardware
Migliore scalabilità
Ogni VM rappresenta una macchina completa che esegue tutti i componenti (compreso il proprio sistema operativo).
3. La fase del deployment containerizzato: first of all, è bene definire il concetto di container, ovvero: i container sono molto simili alle macchine virtuali ma dispongono di un modello di isolamento più leggero e condividono il sistema operativo (OS) tra tutte le applicazioni.
Ecco perché i container sono considerati leggeri ed, inoltre, sono disaccoppiati dall’infrastruttura sottostante, risultando portabili tra diversi cloud e varie distribuzioni.
Perché i container nel tempo hanno raggiunto popolarità?
Ovviamente per i loro vantaggi, quali ad esempio:
1. Creazione e distribuzione di applicazioni in modalità Agile: si ha maggiore facilità e maggiore efficienza nella creazione di immagini containerizzata rispetto a quelle VM;
2.Utilizzo di pratiche per lo sviluppo/test/rilascio continuativo: grazie a ciò è possibile creare e distribuire container image con un alto livello di affidabilità, offrendo allo stesso tempo la possibilità di effettuare rollback veloci e semplici (grazie al fatto che l’immagine rimane la stessa e non cambia);
3. Dev ed Ops SEPARATI: tutte le container image sono prodotte nel momento in cui avviene la compilazione dell’applicativo piuttosto e non nel momento di rilascio; questo fa sì che si presenta un disaccoppiamento tra le applicazioni dell’infrastruttura sottostante.
4. Parola d’ordine? COERENZA: esatto, perché tra i diversi ambienti (sviluppo, test e produzione), c’è coerenza ed i container funzionano allo stesso modo, sia su un pc portatile, sia sul cloud.
5. Portabilità tra cloud e sistemi operativi diversi: il medesimo container funziona su Ubuntu, RHEL, CoreOS, on-premise.
6. Libertà di combinazione dei microservizi: i microservizi sono liberamente combinabili e liberamente distribuiti con un’elevata scalabilità: tutte le app sono divise in parti più piccole ed indipendenti tra loro che possono essere gestite in maniera dinamica (no ad eventuali stack monolitici che girano su una singola grande macchina).
7. Risorse isolate: tutte le prestazioni delle app sono facilmente prevedibili;
8. Uso delle risorse: i container garantiscono efficienza e densità.
Ma perché è bene usare Kubernetes?
I container rappresentano un ottimo modo per la distribuzione e l’esecuzioni delle applicazioni.
All’interno di un ambiente di produzione, ad esempio, è prioritario gestire container che eseguono applicazioni garantendo l’assenza di interruzioni di servizi.
Pensate alla situazioni in cui un container si interrompe e bisogna avviarne un altro.
Tutto sarebbe più facile se fosse gestito SOLO da un sistema, giusto?
ECCO! E’ per questo che Kubernetes entra in gioco.
Kubernetes fornisce un framework per il funzionamento dei sistemi che vengono distribuiti in modo resiliente ed, inoltre, si occupa di garantire scalabilità, distribuzione e failover.
Kubernetes è fonte di vantaggi e benefici, come ad esempio:
1. Usando Kubernetes si ha la possibilità di esporre un container usando un DNS o l’indirizzo IP (qualora il traffico diretto ad un container fosse alto, Kubernetes interviene distribuendo il traffico su più container garantendo stabilità a tutto il sistema);
2. Storage Orchestrato: grazie a Kubernetes si ha la possibilità di montare in maniera automatica un sistema di archiviazione a scelta: che sia locale, con dischi forniti da public cloud, ecc
3. Rollout e rollback automatizzati: Kubernetes è in grado di cambiare lo stato attuale dei propri container per raggiungere quello che si desidera con una velocità controllata.
Se, ad esempio, il tuo team IT sta creando nuovi container per alcuni tuoi servizi, Kubernetes permette di rimuovere i container già esistenti, adattandoli alle risorse che vengono richieste da quelli nuovi.
Kubernetes è dotato di un sistema intelligente di Self-Healing, in grado di sostituire i container che si bloccano e di terminare quelli che non rispondono agli health checks, evitando di fare arrivare traffico ai container che non sono in grado di rispondere correttamente.
La privacy è importante: Kubernetes consente di memorizzare e di gestire le informazioni sensibili come token OAuth, password,….
Inoltre, è possibile distribuire ed aggiornare le informazioni sensibili configurando le applicazioni senza dover ricostruire le immagini dei container evitando quindi di svelare le informazioni sensibili nel momento di configurazione del sistema.
Se vuoi anche tu passare a Kubernetes, contattaci!
Saremo lieti di aiutarti e di guidarti passo dopo passo in questa tua scelta.
Latest posts