sabato 17 febbraio 2018

Kubernetes: cos'è e perché ne avete bisogno

Kubernetes è un sistema che permette di deployare e gestire semplicemente applicazioni containerizzate.
Poichè le applicazioni girano in containers, non si disturbano tra di sé, anche se girano sullo stesso server.

Kubernetes è stato sviluppato in primis da Google come progetto interno, e poi reso open source.
L'obbiettivo di sviluppare un tale software che servisse da "orchestratore" per i containers è quello di creare e soprattutto gestire microservices invece di applicazioni monolitiche.

Per far girare una applicazione in Kubernetes è necessario impacchettarla in uno o più containers (via Docker o simili), caricare le immagini in un registro e creare una descrizione della app da dare in pasto al server Kubernetes.
La descrizione include informazioni sulle immagini che compongono l'applicazione, come questi componenti sono legati l'un l'altro, quali devono essere eseguiti sullo stesso nodo e quali no. Per ogni componente è possibile specificare quante copie o repliche devono essere istanziate. Inoltre, la descrizione include l'elenco dei servizi che devono essere esposti attraverso un singolo indirizzo ip e resi accessibili agli altri componenti.

In pratica Kubernetes può essere pensato come un sistema operativo per il cluster, che si occupa di tenere attiva ed in buona salute la nostra applicazione.

Inoltre, riesce a dividere perfettamente i compiti di sviluppatori e amministratori di sistema, permettendo che ognuno faccia ciò che sa fare meglio.

Ora, una descrizione esaustiva di Kubernetes non è fattibile in poco tempo, l'argomento è piuttosto complesso e richiederebbe molti post, né tantomeno al momento sono così competente per parlarne in profondità.

L'ultima versione Edge di Docker ha deciso di incorporare Kubernetes, e il pacchetto sembra perfetto come ambiente di test.
Dalle prove che ho fatto all'inizio è tutto un po' più complicato del normale, perché si deve virtualizzare tutto, a partire dallo spazio disco fino al network. Una volta che si è superato questo scoglio ci si accorge però che si guadagna in flessibilità aggiungendo e togliendo funzionalità in pochi comandi, e non dovendosi preoccupare affatto di tenere in piedi l'applicazione, poiché è il motore che si occupa di queste incombenze. Anche l'aggiornamento è semplice, ed il motore si occupa di farlo in maniera progressiva, senza dare discontinuità all'applicazione.

Tutta la configurazione è salvabile in files YAML, che vengono dati in pasto al motore e che, ovviamente, possono essere versionati come un qualsiasi sorgente. Il sistemista diventa qui quasi uno sviluppatore, rispettando anch'egli il ciclo di sviluppo del software.

Un'ultima notazione, per gli amici sistemisti e sviluppatori che conosco: ormai l'era dell'installazione fisica della macchina, a partire dal sistema operativo, è in declino. E' necessario progettare bene le architetture, sia di rete che software, e capire come i vari pezzi possano incastrarsi al meglio. Anche per i software, non si fanno più monoliti, ma tanti piccoli pezzetti che dialogano fra loro.
Il resto è sempre meno a nostro carico, e sempre più automatizzato.
Facciamocene una ragione, e cominciamo a pensare in modo nuovo.