Perché Kubernetes? Dalle VM ai container, in pochi minuti

Perché Kubernetes? Dalle VM ai container, in pochi minuti

Introduzione

Il mondo sta cambiando ed è cambiato tantissimo rispetto al passato. Un tempo non tutti usavamo Internet, non tutti avevano un PC a casa e il Web contava pochissimi siti. Negli ultimi 30 anni c’è stata un’evoluzione enorme e l’informatica si è adattata per soddisfare, giorno dopo giorno, l’aumento del bacino di utenti (client) che usano le applicazioni.

Si è partiti tra gli anni ’90 e i primi 2000, quando solo poche persone avevano un computer in casa, fino all’avvento degli smartphone, che permettono a chiunque di accedere a Internet in pochi secondi: questo ha portato a un utilizzo massiccio delle applicazioni e a una grande diffusione del Web.

Quindi, se prima un’applicazione gestiva un carico di 1000 richieste al secondo, con l’avvento dei social — che hanno rivoluzionato l’informatica — si è dovuta adattare a carichi elevatissimi: milioni di richieste in pochi secondi.
Oggi si parla molto di strumenti come Kubernetes. Ma che cos’è esattamente, cosa fa e quali problemi risolve?

Prima di parlare di Kubernetes dobbiamo spiegare che cosa sono i container e che cos’è la virtualizzazione.

Virtualizzazione

La virtualizzazione è una tecnologia che permette di eseguire più sistemi operativi (OS) su una singola macchina fisica tramite un software chiamato hypervisor. Questo consente di ottimizzare le risorse hardware eseguendo più istanze di sistemi operativi (i cosiddetti Guest OS) su un unico host fisico.

Questo approccio, anni fa, andava benissimo; tuttavia ha sempre avuto alcune grandi limitazioni, ad esempio:

  • Ogni VM ha il proprio Guest OS, che consuma CPU, RAM e storage.
  • Più VM girano su un server, più risorse hardware sono necessarie.
  • Questo aumenta i costi operativi e l’uso inefficiente dell’hardware.
  • Ogni VM ha un Guest OS separato, anche se esegue le stesse applicazioni.
  • L’hypervisor deve gestire più Guest OS, aumentando il carico di lavoro.
  • Più VM significano più aggiornamenti, patch di sicurezza e manutenzione.

La gestione degli aggiornamenti su ogni Guest OS aumenta il rischio di errori.

Visti i limiti della virtualizzazione, in epoca recente si è passati alla containerizzazione. Vediamo che cos’è e come può aiutarci.

Containerizzazione

La containerizzazione è un metodo di virtualizzazione a livello di sistema operativo che permette di eseguire più applicazioni in ambienti isolati chiamati container.

A differenza delle macchine virtuali, i container non necessitano di un Guest OS separato, riducendo il consumo di risorse e migliorando l’efficienza.

  • Ogni container ospita una singola applicazione con il runtime necessario per funzionare.
  • Non ci sono Guest OS separati per ogni applicazione: tutti i container condividono lo stesso OS host.
  • Non essendoci un Guest OS per applicazione, i container sono più leggeri delle VM.
  • È possibile eseguire più applicazioni sullo stesso hardware con meno overhead.
  • I container si avviano in millisecondi, a differenza delle VM che spesso richiedono minuti.
  • I container possono essere eseguiti su qualsiasi sistema che supporti Docker o Kubernetes.
  • Ogni container è isolato dagli altri, quindi problemi o crash di un container non influenzano le altre applicazioni

Che cos’è Docker?

Docker è uno strumento che “impacchetta” un’applicazione con tutto ciò che le serve (librerie, configurazioni) dentro un container: un ambiente leggero e portatile che gira sempre allo stesso modo su qualsiasi macchina. In altre parole, è uno strumento che permette di eseguire container.

Questi container però partono sempre da qualcosa: da una definizione di ciò che devono contenere al loro interno. Se volessimo usare la programmazione a oggetti per capirlo, possiamo dire che un container è un’istanza: qualcosa che viene creato a partire dalla definizione di qualcos’altro. Questo “qualcos’altro”, cioè la classe, è l’immagine.

Immagine

Un’immagine è un blueprint, ossia la definizione di ciò che deve contenere un container. Nell’immagine specifichiamo cosa fa e cosa include al suo interno, perché — come abbiamo detto — un container non è altro che un’esecuzione, un’istanza. Possiamo averne n a partire dalla stessa immagine.

Perfetto! Sembra tutto fantastico: con Docker e i container abbiamo raggiunto un grande traguardo. Ma se è tutto così ottimo, perché le persone usano Kubernetes e cosa c’entra Kubernetes con tutto questo?

Prima di rispondere, dobbiamo spiegare che cos’è un’architettura a microservizi.

Microservizi (in breve)

Come dicevamo, il mondo è cambiato: oggi le applicazioni sono enormi e fanno tantissime cose. È nata quindi l’esigenza di suddividerle in blocchi indipendenti tra loro, applicando il principio del divide et impera.

Un’applicazione a microservizi è un sistema composto da più servizi piccoli e indipendenti, ognuno con una responsabilità ben definita (es. “ordini”, “pagamenti”, “catalogo”).

Questi servizi:

  • comunicano tra loro tramite API o messaggi,
  • possono essere sviluppati, rilasciati e scalati in modo indipendente,
  • possono usare tecnologie diverse (linguaggi, database) e avere team dedicati.

L’obiettivo è aumentare agilità, scalabilità e resilienza rispetto al modello monolitico, accettando però una maggiore complessità di integrazione e operativa.

Un microservizio non è altro che un’applicazione a sé stante: un blocco indipendente che comunica con altri blocchi indipendenti.
Diversi microservizi possono essere scritti in linguaggi di programmazione differenti, così da usare il linguaggio più adatto al caso d’uso.

Ora che sappiamo che cos’è un microservizio, che cos’è un container e che cos’è Docker, possiamo finalmente rispondere alla domanda: che cos’è Kubernetes e a cosa serve?

Kubernetes

Kubernetes è una piattaforma open-source che orchestra container: distribuisce, scala, aggiorna e mantiene in salute le tue applicazioni containerizzate in modo automatico su cluster di macchine.
In pratica tu dichiari lo stato desiderato (quante repliche, quali immagini, risorse, rete), e Kubernetes si occupa del come: programmazione dei pod sui nodi, bilanciamento de traffico, riavvio dei container falliti, rollout/rollback controllati, gestione di configurazioni e segreti.

Il fatto che Kubernetes sia un orchestratore di container, cosa significa?
Abbiamo detto che un microservizio è un’applicazione indipendente che comunica con altre applicazioni indipendenti. Un’immagine è la definizione di un container (cioè tutto ciò che il container contiene), e un container è un ambiente isolato in cui gira tutto il necessario per eseguire un’applicazione.

Quindi, ogni applicazione può essere vista come un container, e Kubernetes è il modo per orchestrare nel migliore dei modi questi container.

Immaginiamo, ad esempio, che un microservizio venga usato moltissimo: potremmo voler aumentare automaticamente il numero di container per quel microservizio, così da distribuire il numero di richieste. Questo si chiama scalabilità orizzontale, ovvero aumentare il numero di istanze (container) per suddividere il traffico.
Oppure immaginiamo che un container vada in crash. Nulla è infallibile: sarebbe utile avere un meccanismo automatico tale per cui, ogni volta che un container crasha, venga ricreato automaticamente. Tutto questo lo fa Kubernetes in modo automatico. Noi definiamo quante istanze di un container vogliamo, e sarà compito di Kubernetes far sì che siano sempre attive.

Questi sono solo alcuni dei tantissimi vantaggi di Kubernetes: uno strumento davvero efficace che aiuta la gestione di applicazioni a microservizi nel mondo enterprise.

Conclusione

Negli anni l’informatica si è evoluta tantissimo e continuerà a farlo. Tutto nasce da un’esigenza: soddisfare un bacino di utenza sempre più ampio, mantenendo i servizi attivi e affidabili.
Kubernetes è uno strumento che ci facilita molto. Come ogni cosa, però, va compreso e usato in base al contesto: non è la soluzione a ogni problema. Se adottato in modo appropriato, può essere un’arma in più per offrire applicazioni funzionanti e performanti agli utenti, riducendo al tempo stesso l’overhead per chi le costruisce.
Questo articolo nasce proprio per spiegare in modo semplice cos’è Kubernetes, come ci siamo arrivati negli anni e perché è il risultato di un’evoluzione continua dettata dalle necessità che emergono ogni giorno.