Ciao, e benvenuto nella prima puntata della tredicesima stagione di questo podcast. Nella stagione scorsa abbiamo esplorato Docker e il mondo dei container: le scatole autosufficienti che portano con sé il proprio ambiente e girano identiche ovunque. E alla fine avevamo lasciato una porta socchiusa: avevamo detto che, per gestire tanti container su una sola macchina, c'è Docker Compose, ma che per le scale enormi, con moltissimi container distribuiti su tante macchine, servono strumenti più potenti, i veri orchestratori. Questa stagione è dedicata al più famoso di questi orchestratori: Kubernetes. Oggi partiamo, come sempre, dal problema che è nato per risolvere.
Ripartiamo da dove eravamo. Con Docker abbiamo imparato a impacchettare un programma in un container e a farlo girare. Con Compose abbiamo imparato a far girare insieme più container, il programma e il database per esempio, su una singola macchina. E per moltissimi casi, questo basta e avanza. Ma cosa succede quando la tua applicazione diventa grande, davvero grande? Quando non ti bastano più i container di una macchina sola, ma te ne servono centinaia, distribuiti su decine di macchine diverse, che devono lavorare insieme come un unico sistema? Qui Compose, pensato per una macchina sola, non arriva. Serve qualcosa di più grande.
Immaginiamo il problema in concreto, perché diventi vivido. Immagina un servizio usato da milioni di persone: ha bisogno di far girare tanti container, magari centinaia, sparsi su molte macchine, per reggere il carico. E ora immagina tutto ciò che può andare storto in un sistema così. Un container si blocca e va rimesso in piedi. Una macchina intera si guasta, e tutti i container che ci giravano vanno spostati altrove. Il traffico degli utenti aumenta all'improvviso, e servono più container per reggerlo. Poi cala, e vanno tolti per non sprecare risorse. Bisogna aggiornare il programma senza mai spegnere il servizio. Tutto questo, su centinaia di container e decine di macchine, contemporaneamente.
Ora fermiamoci a immaginare di dover fare tutto questo a mano, perché è la chiave per capire il bisogno. Dovresti sorvegliare di persona centinaia di container, notare quando uno si blocca e riavviarlo. Dovresti accorgerti quando una macchina muore e ricollocare a mano tutti i suoi container su altre macchine. Dovresti decidere tu, in tempo reale, quanti container servono a seconda del traffico, avviarli e spegnerli. Dovresti coordinare aggiornamenti delicati senza far cadere il servizio. È semplicemente impossibile per degli esseri umani. Nessun team, per quanto sveglio e numeroso, può gestire a mano un sistema così grande, così mutevole, ventiquattr'ore su ventiquattro, senza sbagliare e senza esaurirsi.
Ed è qui che nasce il bisogno di un orchestratore, e ti anticipo l'idea di fondo. Un orchestratore è un sistema automatico che si occupa di tutto questo al posto tuo: sorveglia i container su tante macchine, li riavvia quando cadono, li sposta quando una macchina muore, ne aggiunge o ne toglie secondo il carico, coordina gli aggiornamenti, e lo fa senza sosta, instancabilmente, senza bisogno che tu intervenga. Tu gli dici cosa vuoi ottenere, e lui si occupa di realizzarlo e di mantenerlo, gestendo lui tutta la complessità del far girare tanti container su tante macchine. L'orchestratore è il cervello automatico che governa la flotta di container.
Kubernetes è, oggi, il più diffuso e importante di questi orchestratori, ed è utile sapere da dove viene, perché racconta la sua natura. Nacque dentro una grande azienda che gestiva servizi su scala planetaria, usati da miliardi di persone, e che aveva quindi il problema di far girare quantità immense di container su enormi flotte di macchine. Quell'azienda aveva sviluppato per anni sistemi interni per orchestrare tutto questo, accumulando un'esperienza rarissima. Kubernetes nasce da quell'esperienza, e poi fu regalato al mondo come progetto aperto, diventando lo standard di fatto per l'orchestrazione. Porta quindi nel suo cuore la saggezza di chi ha davvero gestito la scala planetaria, il che spiega sia la sua potenza sia la sua complessità.
Devo darti subito un avvertimento onesto, che riprende lo spirito della scorsa stagione e che percorrerà tutta questa. Kubernetes è potentissimo, ma è anche notoriamente complesso, e non serve a tutti. Ricordi il monito su Docker, e prima ancora sui microservizi: non imitare le soluzioni dei giganti se non hai i problemi dei giganti. Per un piccolo sito, Kubernetes è come usare una gru industriale per appendere un quadro: enormemente sovradimensionato. Racconteremo Kubernetes con ammirazione, ma anche con questo realismo: è uno strumento straordinario per un certo tipo di problema, e una complicazione inutile per tutti gli altri. Tenere a mente quando serve è importante quanto capire come funziona.
Per oggi ci fermiamo qui. Con Docker sappiamo far girare container, e con Compose farne girare alcuni su una macchina. Ma quando servono centinaia di container su tante macchine, con container che cadono, macchine che si guastano, traffico che oscilla e aggiornamenti da fare senza interruzioni, gestire tutto a mano diventa impossibile. Serve un orchestratore: un sistema automatico che sorveglia, ripara, sposta, scala e aggiorna la flotta di container al posto tuo. Kubernetes è il più diffuso, nato dall'esperienza di chi gestiva la scala planetaria, potente ma complesso, e non adatto a tutti. Nella prossima puntata capiamo meglio cos'è, davvero, un orchestratore. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.