Come funziona e che vantaggi porta la piattaforma che si sta affermando come standard per l'orchestrazione dei container
La virtualizzazione mediante
container è nata come evoluzione dell'approccio convenzionale basato su macchine virtuali ma ha avuto il suo vero boom quando, parallelamente, ha cominciato a imporsi il modello dello
sviluppo a microservizi. L'idea di scomporre un'applicazione in componenti fondamentali che svolgono funzioni "atomiche" specifiche si sposa bene con la logica dei container. Ogni microservizio viene
idealmente tradotto in un container e questo permette di dare più o meno potenza elaborativa (più o meno container attivi) alle funzioni più richiamate in un dato momento.
In questo modo però
tutto si fa più complicato rispetto alla classica virtualizzazione a macchine virtuali e anche rispetto a un approccio tradizionale per cui un container corrisponde a tutta un'applicazione. Serve qualcosa che aiuti a
gestire questa complessità e per questo è nato il progetto
Kubernetes, che si sta affermando come la piattaforma principale per l'
orchestration dei container. Vediamo di capirci di più.
Cosa fa in concreto Kubernetes?In estrema sintesi
gestisce il ciclo di vita dei container per noi in funzione degli obiettivi delle nostre applicazioni, nascondendoci la complessità che questo compito ha in generale e in particolare quando si tratta di applicazioni realizzate con una collezione di microservizi. Nella pratica attiva e disattiva container
in funzione del carico di lavoro dei vari microservizi, gestisce il dialogo dei container fra loro e verso altre risorse esterne (networking, storage), garantisce che un'applicazione funzioni sempre come previsto indipendentemente dalla sua scomposizione in container, bilancia il carico tra gruppi di container. Il tutto
automaticamente.
Kubernetes prende il posto di Docker?No,
sono due cose diverse. La confusione nasce probabilmente dal fatto che oggi si parla molto più di Kubernetes che di Docker, come se questo fosse un po' scomparso dai radar. Docker è - e per il momento resta - la piattaforma di riferimento per
eseguire la virtualizzazione a container, Kubernetes si occupa dell'
orchestration dei container eseguiti in Docker (in effetti in qualsiasi piattaforma compatibile con la Open Container Initiative). In questo senso va a sostituire
Docker Swarm, la piattaforma integrata in Docker per la gestione dei container. Rispetto a Swarm è peraltro decisamente più complesso e ha un raggio d'azione più ampio.
Come funziona la logica di Kubernetes?Il principio di Kubernetes è che non si deve essere costretti a gestire i singoli container in sé - e soprattutto le loro sinergie - ma
varie entità astratte che sono molto più vicine a come un utente vede il funzionamento di un'applicazione. Ovviamente poi ciò si traduce proprio nella gestione dei singoli container, ma questa rimane dietro le quinte di Kubernetes.
L'unità base di gestione in Kubernetes non è il container ma il
pod, ossia un gruppo di container che insieme realizzano tutta un'applicazione o una sua parte fondamentale (ad esempio un microservizio). Kubernetes attiva e disattiva pod nel loro complesso
in funzione dello stato voluto per l'applicazione o il microservizio, stato che viene descritto nella definizione dei pod stessi.
Kubernetes prevede anche altre entità astratte che ricoprono ruoli diversi. Dal punto di vista dello sviluppo quella probabilmente più comprensibile è il
service, che logicamente concide con un microservizio o un servizio web. Un service è
una entità stabile (un servizio non può scomparire improvvisamente) anche
si concretizza in vari pod che nascono e muoiono molto velocemente.
Quali sono i vantaggi e gli svantaggi principali di Kubernetes?Il vantaggio principale è
nascondere la complessità collegata all'implementazione in container di una applicazione minimamente articolata. In ogni momento questa può corrispondere a
migliaia di container eseguiti in server diversi, che devono collaborare fra loro ed essere attivi in numero adeguato per supportare le richieste di accesso ai servizi che abilitano. Il tutto facendo in modo che i container attivi utilizzino al meglio le risorse di sistema e che le applicazioni si comportino sempre in maniera appropriata. Kubernetes garantisce tutto questo in maniera automatica, oltre ad occuparsi della "installazione" in sé di un'applicazione scomposta in container.
Lo svantaggio principale di Kubernetes è che
si tratta di un sistema complesso, che opera in una architettura distribuita e che non è semplice da gestire pienamente. La sua curva di apprendimento, in sostanza, è piuttosto ripida.
In che scenari si può implementare Kubernetes?Praticamente in
tutti quelli più comuni. In primo luogo on-premise o in ambienti di cloud privato, grazie al fatto che
molte piattaforme lo prevedono come modulo di base od aggiuntivo. Kubernetes si sta diffondendo anche in ambienti di cloud pubblico: diversi cloud provider offrono
una forma as-a-Service di Kubernetes per semplificare la vita dei loro utenti. Peraltro Kubernetes è per sua stessa concezione adatto ad ambienti di hybrid cloud
o multicloud, potendo - anche se da poco - gestire architetture di container
sparse su sistemi diversi, anche per finalità di high availability o disaster revovery delle applicazioni.