Un cluster Ku­ber­ne­tes è un insieme di almeno un nodo di controllo (master) e diversi nodi di lavoro (nodes) sui quali vengono eseguite ap­pli­ca­zio­ni con­tai­ne­riz­za­te. Il cluster gestisce au­to­ma­ti­ca­men­te la di­stri­bu­zio­ne, la sca­la­bi­li­tà e la tol­le­ran­za ai guasti dei container. Questa struttura consente di eseguire ap­pli­ca­zio­ni in modo af­fi­da­bi­le ed ef­fi­cien­te in ambienti di­stri­bui­ti.

Managed Ku­ber­ne­tes
Or­che­stra­zio­ne sicura dei carichi di lavoro dei container
  • Con­fi­gu­ra­zio­ne au­to­ma­ti­ca dei cluster Ku­ber­ne­tes
  • Ar­chi­via­zio­ne per­si­sten­te com­ple­ta­men­te integrata
  • As­si­sten­za clienti 24/7

Cos’è un cluster Ku­ber­ne­tes?

I cluster sono ge­ne­ral­men­te un gruppo di computer che appaiono autonomi dall’esterno. Nel caso di Ku­ber­ne­tes, invece dei computer fisici, per formare dei cluster vengono combinati diversi nodi. Questi sono macchine virtuali o fisiche.

Le singole ap­pli­ca­zio­ni vengono eseguite nei cluster Ku­ber­ne­tes, che sono quindi il livello più alto nella gerarchia Ku­ber­ne­tes.

Quali casi d’uso ci sono per i cluster Ku­ber­ne­tes?

I cluster sono una parte im­por­tan­te dell’utilizzo di Ku­ber­ne­tes. Questi con­sen­to­no di di­stri­bui­re le ap­pli­ca­zio­ni senza legarle alle macchine. Il loro scopo prin­ci­pa­le è quindi quello di astrarre i container ed eseguirli su più macchine. Allo stesso tempo, i cluster Ku­ber­ne­tes non sono legati a un sistema operativo specifico e sono quindi molto portabili.

Tra i tipici ambiti di ap­pli­ca­zio­ne ci sono:

  • Di­stri­bu­zio­ne di ap­pli­ca­zio­ni complete: queste sono tra­sver­sa­li ai container e in­di­pen­den­ti dall’hardware sot­to­stan­te. Si possono quindi di­stri­bui­re ra­pi­da­men­te ag­gior­na­men­ti o nuove funzioni senza modifiche ai singoli server, ga­ran­ten­do l’ese­cu­zio­ne coerente delle ap­pli­ca­zio­ni in ogni ambiente.
  • Fun­zio­na­men­to in ar­chi­tet­tu­re a mi­cro­ser­vi­zi: in questo caso le ap­pli­ca­zio­ni possono co­mu­ni­ca­re tra loro e rimanere altamente scalabili. I singoli mi­cro­ser­vi­zi possono essere svi­lup­pa­ti, ag­gior­na­ti e scalati in­di­pen­den­te­men­te, au­men­tan­do no­te­vol­men­te l’agilità e la re­si­lien­za com­ples­si­va dell’ap­pli­ca­zio­ne.
  • Con­ti­nuous In­te­gra­tion (CI)/Con­ti­nuous Delivery (CD): i lavori di Con­ti­nuous In­te­gra­tion o di Con­ti­nuous Delivery con­sen­to­no l’au­to­ma­zio­ne dei processi di build, test e de­ploy­ment. In questo modo, i cicli di sviluppo si ac­cor­cia­no, le fonti di errore manuale si riducono e le nuove fun­zio­na­li­tà o patch rag­giun­go­no più ra­pi­da­men­te l’ambiente di pro­du­zio­ne.

Da cosa è co­sti­tui­to un cluster Ku­ber­ne­tes?

Un cluster Ku­ber­ne­tes è co­sti­tui­to da un’unità di controllo, detta anche nodo master, e da uno o più nodi worker.

Nodo master

Il nodo master è la base dell’intero cluster ed è re­spon­sa­bi­le dell’am­mi­ni­stra­zio­ne dello stesso. Con­se­guen­te­men­te, questo nodo si occupa dello stato del cluster, ad esempio de­ter­mi­nan­do quale ap­pli­ca­zio­ne viene eseguita e quando. L’unità di controllo, a sua volta, è suddivisa in vari com­po­nen­ti:

  • Server API: il server API è il front end del nodo master e coordina la co­mu­ni­ca­zio­ne con il cluster Ku­ber­ne­tes. At­tra­ver­so l’in­ter­fac­cia, ad esempio, si definisce lo stato del cluster. È possibile in­te­ra­gi­re con l’API Ku­ber­ne­tes sia tramite la riga di comando sia tramite l’in­ter­fac­cia grafica nella Google Cloud Console.
  • Scheduler: lo scheduler si occupa della di­stri­bu­zio­ne dei container in base alle risorse di­spo­ni­bi­li. Ga­ran­ti­sce che tutti i pod Ku­ber­ne­tes (gruppi di container) siano assegnati a un nodo e possano quindi essere eseguiti.
  • Con­trol­ler Manager: con il Con­trol­ler Manager vengono coor­di­na­ti i vari con­trol­ler, che in sostanza non sono altro che processi. Ciò ga­ran­ti­sce, tra l’altro, che si reagisca ade­gua­ta­men­te in caso di guasti di singoli nodi. Più in generale, il Con­trol­ler Manager si occupa di adeguare lo stato attuale di un cluster allo stato de­si­de­ra­to in ogni momento.
  • etcd: etcd è un com­po­nen­te dell’unità di controllo che memorizza tutti i dati im­por­tan­ti del cluster. Pertanto, può essere con­si­de­ra­to un archivio di backup per Ku­ber­ne­tes, or­ga­niz­za­to come un Key Value Store.

Nodo worker

Ogni cluster ha almeno un nodo worker, nella maggior parte dei casi anche diversi. Questi eseguono i compiti e le ap­pli­ca­zio­ni assegnati loro dall’unità di controllo e com­pren­do­no due com­po­nen­ti:

  • Kubelet: Kubelet è un com­po­nen­te dei nodi worker che ga­ran­ti­sce che ogni container in un pod venga eseguito. A tal fine, Kubelet in­te­ra­gi­sce con il motore dei container uti­liz­za­to, un programma per la creazione e la gestione dei container.
  • Kube proxy: con Kube proxy si ga­ran­ti­sce che le regole di rete vengano ri­spet­ta­te. Inoltre, questo com­po­nen­te è re­spon­sa­bi­le dell’in­stra­da­men­to delle con­nes­sio­ni.

Come si crea un cluster Ku­ber­ne­tes?

Un cluster Ku­ber­ne­tes può essere di­stri­bui­to su macchine virtuali o fisiche. Per creare dei cluster propri esistono diverse opzioni.

Impostare un cluster Ku­ber­ne­tes con Minikube

Per creare un semplice cluster con un nodo worker, è possibile usare Minikube, ovvero uno strumento per eseguire Ku­ber­ne­tes in locale sulla propria macchina. È possibile in­stal­lar­lo su tutti i prin­ci­pa­li sistemi operativi e viene descritto esau­rien­te­men­te da molti tutorial di Ku­ber­ne­tes. Per ve­ri­fi­ca­re se l’in­stal­la­zio­ne sia avvenuta con successo, inserisci il seguente comando nel terminale:

minikube version
bash

Utilizza la seguente istru­zio­ne per avviare Minikube:

minikube start
bash

Dopo aver eseguito questo comando, Minikube avvia una macchina virtuale sulla quale verrà au­to­ma­ti­ca­men­te eseguito un cluster. È quindi possibile in­te­ra­gi­re con Ku­ber­ne­tes uti­liz­zan­do la riga di comando. Per sapere se quest’ultima è già in­stal­la­ta sul tuo server, usa il seguente comando da terminale:

kubectl version
bash

Potrai vi­sua­liz­za­re i dettagli del tuo cluster tramite il seguente comando:

kubectl cluster-info
bash

È inoltre possibile vi­sua­liz­za­re di­ret­ta­men­te nel terminale i singoli nodi su cui possono essere eseguite le ap­pli­ca­zio­ni:

kubectl get nodes
bash

Creare un cluster Ku­ber­ne­tes con kind

Se desideri creare un cluster Ku­ber­ne­tes con più di un nodo, puoi uti­liz­za­re lo strumento kind, di­spo­ni­bi­le per tutti i prin­ci­pa­li sistemi operativi. Il modo più semplice per in­stal­lar­lo è tramite il gestore di pacchetti. Negli esempi qui riportati, viene uti­liz­za­to choco per Windows:

choco install kind
bash

Per un cluster con più nodi worker, crea ora un file YAML di con­fi­gu­ra­zio­ne in una qualsiasi directory. In questo file si definisce la struttura del cluster. Ad esempio, un file di con­fi­gu­ra­zio­ne per un cluster Ku­ber­ne­tes con un nodo master e due nodi worker potrebbe essere simile a quanto segue:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

Suc­ces­si­va­men­te, puoi creare un cluster Ku­ber­ne­tes, in base alla con­fi­gu­ra­zio­ne scelta, con il seguente comando:

kind create cluster --config fileesempio.yaml
Vai al menu prin­ci­pa­le