Kubernetes si è affermato come la piattaforma di riferimento per il deployment e la gestione delle applicazioni cloud-native.
Per molti versi, è come un sistema operativo (OS) per il cloud:
-
Si installa un sistema operativo tradizionale (Linux o Windows) su un server, che astrae le risorse del server e gestisce i processi delle applicazioni;
-
Si installa Kubernetes su un cloud, che astrae le risorse del cloud e gestisce i microservizi delle applicazioni.
Allo stesso modo in cui Linux astrae le differenze hardware tra le varie piattaforme server, Kubernetes astrae le differenze tra i diversi cloud pubblici e privati.
Risultato finale… finché stai utilizzando Kubernetes, non importa se l’infrastruttura sottostante si trova nei tuoi data center locali, su dispositivi edge o in un cloud pubblico.
Kubernetes rappresenta un passo fondamentale verso un vero cloud ibrido, consentendo di spostare e bilanciare i carichi di lavoro in modo fluido tra infrastrutture cloud pubbliche e private differenti.
Si potrebbe anche migrare da un cloud all’altro, il che significa si può scegliere un provider oggi senza doversi legare a quella scelta per sempre.
Scalabilità nel Cloud
In generale, le applicazioni cloud-native basate su microservizi rendono i problemi di scalabilità e complessità del passato quasi semplici. Google gestisce miliardi di container ogni settimana.
Fantastico, ma la maggior parte di noi non è Google. Come funziona per le “persone normali”?
Beh, in linea di massima, se le tue applicazioni legacy usano centinaia di macchine virtuali, è probabile che le tue applicazioni cloud-native containerizzate usino migliaia di container.
Con questo scenario, ti servirà aiuto per gestirli. Ed è qui che entra in gioco Kubernetes.
Viviamo in un mondo tecnologico e aziendale sempre più frammentato e in costante stato di cambiamento.
Abbiamo un bisogno disperato di un framework e di una piattaforma ampiamente accettati, che nascondano la complessità. Ancora una volta: benvenuto Kubernetes.
Scheduling delle Applicazioni
Un tipico computer è un insieme di CPU, memoria, storage e rete. Ma i sistemi operativi moderni hanno fatto un ottimo lavoro nell’astrarre tutto ciò.
Ad esempio, quanti sviluppatori si preoccupano di sapere quale core CPU o quale indirizzo di memoria esatto usa la loro applicazione? Pochi, perché lasciamo che se ne occupi il sistema operativo. E questa è una cosa positiva, perché rende lo sviluppo molto più semplice.
Kubernetes fa qualcosa di simile con le risorse del cloud e dei datacenter. A un livello alto, un cloud o datacenter è un insieme di risorse di calcolo, rete e storage.
Kubernetes le astrae, così da non dover codificare a mano su quale nodo o volume di storage devono girare le applicazioni, né preoccuparsi su quale cloud vengano eseguite.
Kubernetes si occupa di tutto questo.
Sono finiti i tempi in cui si dava un nome a ogni server, si mappavano i volumi in un foglio Excel e si trattava l’infrastruttura come se fosse un animale domestico. Le moderne applicazioni cloud-native semplicemente non si curano di questi dettagli.
Nel mondo cloud-native (per semplificare) diciamo solo:
“Ehi Kubernetes, ecco un’app. Per favore, distribuiscila e assicurati che continui a funzionare…”
Una Rapida Analogia
Pensa al processo di spedizione di un pacco tramite un corriere. Tu impacchetti il contenuto usando il formato standard del corriere, ci applichi un’etichetta e lo consegni.
Il corriere si occupa di tutto il resto: tutta la logistica complessa su quali aerei e camion usare, quali autostrade percorrere, chi saranno gli autisti, ecc. Forniscono anche servizi per tracciare il pacco e modificarne la consegna.
Il punto è che l’unica cosa che devi fare è impacchettare e etichettare il contenuto.
Tutto il resto lo fa il corriere.
Lo stesso vale per le app su Kubernetes: impacchetti l’app in un container, gli fornisci un manifest di Kubernetes, e lasci che Kubernetes si occupi del deployment e della gestione.
Hai anche a disposizione un ricco set di strumenti e API per osservarla, monitorarla ed esaminarla costantemente.