Kubernetes rappresenta una delle tecnologie maggiormente richieste dalle aziende oggigiorno. Si tratta di uno strumento per l’orchestrazione di container, cioè permette di gestire, sotto ogni aspetto, applicazioni costituite da reti di decine o centinaia di container.

Il container è una componente software che incapsula un’applicazione con tutto ciò di cui questa ha bisogno per funzionare. Svetta per l’alto livello di portabilità, cosa che gli consente di essere uno strumento perfetto per eseguire applicazioni in qualsiasi ambiente di produzione senza il rischio di avere comportamenti inaspettati rispetto all’ambiente di test.

Le moderne architetture a microservizi concepiscono le applicazioni come costituite da una rete di servizi minimali che, collaborando tra loro, forniscono tutte le funzionalità interne ed esterne che il software offre. Ciò ha portato all’abbandono delle più tradizionali strutture monolitiche, rigide e difficili da gestire. I container vengono proprio incontro a questa logica moderna e flessibile divenendo l’ossatura di base dei microservizi.

I vantaggi dei container

I vantaggi di tali nuove architetture sono svariati. Infatti, ogni container:

  • può essere affidato a un diverso gruppo di lavoro che risulta così più organizzato e agile;
  • può essere sviluppato con un linguaggio diverso e disporre di un proprio database divenendo a tutti gli effetti “un programma nel programma”;
  • è autonomo a sufficienza da poter essere aggiornato, testato e ricaricato secondo necessità senza dover fermare l’applicazione intera per manutenzione.

Tanti pregi però vengono offerti a costo di una maggiore necessità di organizzazione del lavoro di progettazione, sviluppo e manutenzione. Tanti container devono quindi essere diretti come se si trattasse di una sorta di orchestra e per questo nasce il termine orchestrazione in cui Kubernetes svolge il ruolo di direttore.

Caratteristiche di Kubernetes

Kubernetes è ormai uno degli orchestrator di container più usati al mondo e tra le sue caratteristiche troviamo:

  • struttura a cluster ovvero si basa su un insieme di nodi che collaborano a un medesimo scopo. Ciò garantisce maggiore stabilità e alta disponibilità;
  • una serie di componenti specializzate ognuna in un ruolo particolare. Le principali sono i Pod per l’attivazione di container, i Deployment per la gestione delle applicazioni e delle loro versioni, i Service e gli Ingress per connettività ai workload e load balancing;
  • scalabilità ossia quella capacità di un’applicazione di aumentare o restringere le risorse a sua disposizione al variare del carico di richieste. In particolare, in questi contesti si applica la scalabilità orizzontale che consiste non nell’aumentare le risorse a disposizione di un singolo nodo ma di aumentare il numero di nodi a disposizione;
  • self-healing. La capacità di un sistema di autoripararsi preservando il suo stato di salute. Ciò comprende tutte quelle attività per cui vengono continuamente monitorati i container avviati e si verifica quali tra questi non riesce più a svolgere completamente le proprie mansioni;
  • service discovery. I container dialogano in rete e per questo devono sapere come trovarsi. L’indirizzo IP di cui sono dotati potrebbe essere una soluzione ma questo è una risorsa dinamica e pertanto varia. Con il service discovery si può attribuire un nome al servizio e invocarlo solo tramite quello: qualora l’indirizzo di rete dovesse variare quello nuovo verrebbe associato al nome del servizio evitando qualsiasi interruzione nelle funzionalità;
  • gestione dei rollout e delle versioni delle applicazioni. Una delle componenti che mette a disposizione Kubernetes, il Deployment, dispone di tutto il necessario per permettere il continuo miglioramento e ampliamento dei software che produciamo;
  • storage per la gestione della persistenza dei dati. Salvare i dati nei container non conviene quasi mai soprattutto se teniamo alla loro persistenza. Per questo esistono i Volume che in Kubernetes possono essere gestiti con vari approcci soprattutto in dipendenza di ciò che serve per il nostro progetto;
  • i Secret offrono la possibilità di gestire i dati sensibili come password e codici d’accesso che non sarebbe sicuro memorizzare diversamente.

Queste sono solo alcune delle caratteristiche che Kubernetes offre ma sono già più che indicative per capire perché questo sia uno dei progetti open source più curati, seguiti e diffusi al mondo soprattutto per quanto riguarda lo sviluppo di applicazioni in Cloud.

Visto così però potrebbe sembrare complicato predisporre un ambiente idoneo al suo studio e alla sua sperimentazione, adatto sia ai primi approcci sia al prosieguo della propria esperienza professionale. Fortunatamente esiste minikube, un sistema gratuito e altamente disponibile che permette di formarsi su Kubernetes in modo estremamente pratico.

Minikube: provare Kubernetes in modo facile

Si può installare minikube seguendo le istruzioni sul sito del progetto seguendo i semplici passaggi, per ogni sistema operativo, descritti nella pagina “Get started!” la quale inizia illustrando l’installazione e conduce fino ai primi esperimenti con le componenti.

Uno dei vantaggi di minikube consiste nella possibilità di trovarlo già installato in ambienti di sperimentazione on line come per esempio:

  • la Cloud Shell della Google Cloud Platform, un runtime Linux già dotato di tanti strumenti tra i quali docker e minikube accessibile gratuitamente a chiunque disponga di un indirizzo Gmail;
  • Play with Kubernetes accessibile con credenziali Github o Docker;
  • Killercoda altro progetto dotato di playground.

Queste sono solo alcune risorse disponibili ma è sufficiente passare per la documentazione di pagine come “Hello Minikube” e cliccare il pulsante “Launch terminal” per vedere l’avvio di un altro ambiente operativo che mette in condizione di sperimentare minikube.

Oltre alla facilità di installazione e avvio, questo strumento risulta estremamente importante in quanto permette di trovarsi in una condizione di sperimentazione (ricordiamo che non è adatto alla produzione) piuttosto realistica. E’ basato anch’esso su cluster sebbene costituito da un nodo solo pertanto non si tratta di un simulatore bensì di una versione in piccolo di Kubernetes.

Inoltre, offre tutte le componenti principali che potremmo trovare in un vero cluster Kubernetes pronto all’avvio di applicazioni. In alcuni casi, come si può immaginare, qualora si voglia sperimentare qualche tecnica in grado di coinvolgere più nodi sarà tuttavia necessario aspettare di avere a disposizione un vero cluster.

Gli Add-on di Minikube

Molto interessante il sistema di addon di cui dispone minikube. Si tratta infatti di una piattaforma modulare che può essere estesa all’occasione. Per esempio, il load balancing – fondamentale attività di bilanciamento del carico tra vari server per gestire carichi variabili – può essere applicato in Kubernetes sia con i Service sia con gli Ingress ma per sperimentare questi ultimi in minikube è necessario attivare il relativo addon con:

$ minikube addons enable ingress

Una volta, scelto o predisposto il proprio ambiente minikube si può iniziare a lavorare semplicemente avviandolo con:

$ minikube start

Da qui in poi si prosegue con kubectl, il client ufficiale per Kubernetes che rimane lo strumento principale per dialogare anche con minikube creando in questo caso un perfetto livello di continuità tra la sperimentazione e la messa in produzione.

Il comando minikube start potrebbe non essere necessario sempre in quanto spesso i playground tendono ad avviarlo autonomamente per rendere l’ambiente di sperimentazione già totalmente pronto: tuttavia, ogni contesto in cui agiremo sarà sempre corredato dalla propria documentazione che andrà consultata.

Al termine delle nostre operazioni su minikube, se necessario, potremo arrestarlo con:

$ minikube stop

Conclusioni

Kubernetes è una competenza assolutamente fondamentale al giorno d’oggi sia per i singoli professionisti sia per le aziende. E’ estremamente legato alla progettazione e allo sviluppo di applicazioni in Cloud ma è richiesto in ogni ambito: si pensi, a titolo di esempio, che è una delle piattaforme che più comunemente fa da fondamento ai cluster di Apache Spark usatissimi nell’analisi di Big Data. La praticità di minikube rende lo studio di Kubernetes estremamente agevole ed è un fattore che sta contribuendo molto alla sua diffusione ormai inarrestabile.