I microservizi sono l’approccio infrastrutturale del momento e anche da questo deriva l’estrema popolarità dei container e del fenomeno Kubernetes.
Tutti sono giustamente convinti della loro flessibilità come metodo per una virtualizzazione “light”, non tutti però si pongono il problema che delineare uno scenario in cui decine di microservizi operano in sinergia significa anche immaginare un sistema per gestire il ciclo di vita di centinaia – o anche più – container in azione.
Un compito non semplice che viene di solito affidato, appunto, a Kubernetes.
Kubernetes nasce come progetto interno di Google proprio per la gestione di container distribuiti in un cluster di server e viene poi ceduto in open source.
Non si tratta di una piattaforma monolitica in senso proprio ma di un insieme di componenti che dialogano attraverso una API e insieme si occupano di tutte le funzioni necessarie.
La gestione dei container è complessivamente indicata come orchestration, infatti, ma nella pratica comprende diversi elementi infrastrutturali per le funzioni di scheduling, load balancing tra nodi del cluster, alta disponibilità dei nodi, monitoraggio delle risorse e via dicendo.
Per eseguire Kubernetes serve un sistema Linux, anche se la piattaforma oggi va oltre i container Linux e può gestire pure i Windows Server Container. La prima scelta da fare è quindi il tipo di ambiente Linux che vogliamo creare: on-premise, in cloud, una semplice macchina di test.
Kubernetes in locale
Kubernetes in teoria si può installare su qualsiasi distribuzione Linux, nella pratica le cose non sono proprio così nette. Implementare la piattaforma infatti non è semplice e la procedura (download, installazione, configurazione) diventa molto più fluida per le distribuzioni che prevedono tool specifici di installazione. Meglio ancora se integrano già Kubernetes quasi del tutto configurato.
Le “distro” già configurate non sono molte. La principale è probabilmente Tectonic, un prodotto commerciale che si basa su una versione ridotta all’osso di Linux, sfrondata di tutto quello che non serve al supporto di Kubernetes. RancherOS segue la stessa impostazione, con la differenza di essere un progetto completamente open source.
L’installazione della piattaforma in una distribuzione Linux non ottimizzata rischia di essere un processo troppo complicato per chi non sa davvero bene dove mettere le mani. Inoltre non tutte le distribuzioni commerciali – alla Red Hat Enterprise Linux, per intenderci – supportano ufficialmente Kubernetes se non per attività di test.
Ciò premesso, le distribuzioni citate nella documentazione della piattaforma per l’installazione bare metal sono in particolare CoreOS (che peraltro è la base di Tectonic), Fedora e Ubuntu.
Le cose sono più semplici se vogliamo installare Kubernetes su una singola macchina per giocarci un po’. In questo caso non servono davvero tutti i componenti e i servizi di una installazione completa ed esistono già “pacchetti” più immediati da implementare e configurare. In realtà propriamente ne esiste uno solo – Minikube – perché l’alternativa Kubernetes Solo funziona unicamente su Mac e ha una natura un po’ diversa. Entrambi comunque attivano un nodo unico di Kubernetes all’interno di una macchina virtuale.
Kubernetes in cloud
In generale le principali software house che operano in ambito Kubernetes spingono perché la piattaforma venga usata come servizio cloud PaaS. È in effetti una scelta che elimina buona parte della complessità legata all’installazione, anche se configurarla in cloud può richiedere comunque una buona dose di abilità. E qualche aiuto nella documentazione.
Dato che Kubernetes è nato in Google, è logico la Google Cloud Platform sia la “nuvola” che lo supporta meglio. È l’unica a offrire un servizio – il Google Container Engine – che integra in modo specifico gli strumenti a linea di comando della piattaforma per gestire un cluster di container. In alternativa si può usare il classico Google Compute Engine per creare un cluster di macchine virtuali Linux su cui installare Kubernetes manualmente. È più complesso, dà un maggiore spazio di manovra per le personalizzazioni.
Anche in Microsoft Azure troviamo questa doppia possibilità. L’Azure Container Service somiglia concettualmente al Google Container Engine ma c’è una differenza sottile: Kubernetes non è un servizio offerto in cloud ma va implementato usando un template di Azure Resource Manager.
L’alternativa, come nel Google Compute Engine, è attivare macchine virtuali con una distribuzione Linux su cui installare la piattaforma.
In Amazon AWS o su IBM Bluemixnon ci sono strade differenti da quest’ultima. Si crea un cluster di macchine virtuali e poi si installa.