Kubernetes è uno strumento indipendente per la gestione di cluster e container, di provenienza aperta da Google nel 2014. Fornisce una "piattaforma per automatizzare l'implementazione, il ridimensionamento e le operazioni dei container di applicazioni tra cluster di host". Soprattutto, ciò riduce il costo delle spese di cloud computing e semplifica le operazioni e l'architettura.
Prima di spiegare cosa fa Kubernetes, dobbiamo spiegare cosa sono i container e perché si usano.
Un container è una macchina mini-virtuale. È piccolo, in quanto non ha driver di dispositivo e tutti gli altri componenti di una normale macchina virtuale. Docker è di gran lunga il container manager più popolare ed è scritto in Linux.
Il modo migliore per illustrare perché questo è utile e importante è fare un esempio.
Supponiamo di voler installare il server Web nginx su un server Linux. Hai diversi modi per farlo. Innanzitutto, è possibile installarlo direttamente sul sistema operativo del server fisico. Ma la maggior parte delle persone usa macchine virtuali ora, quindi probabilmente lo installeresti lì.
Ma la configurazione di una macchina virtuale richiede anche alcuni sforzi e costi amministrativi. E le macchine sono sprecate se la dedicherai solo a un'attività. Sarebbe meglio caricare quella macchina con nginx, software di messaggistica, un server DNS, ecc.
Le persone che hanno inventato i container hanno riflettuto su questi problemi e hanno ragionato che, poiché nginx o qualsiasi altra applicazione necessita solo di un sistema operativo minimo indispensabile, perché non creare una versione ridotta di un sistema operativo, inserire nginx ed eseguirlo. Quindi hai un'unità autonoma, indipendente dalla macchina che può essere installata ovunque.
Il container può essere distribuito proprio come un modello di macchina virtuale, ovvero un'applicazione pronta all'uso che richiede una configurazione minima o nulla.
Esistono migliaia di immagini Docker preconfigurate nel repository pubblico Dockerhub. Lì, le persone hanno caricato software opensource che potrebbero richiedere ore o giorni per produrli. Le persone ne traggono vantaggio perché possono installare nginx o anche oggetti molto più complicati semplicemente scaricandoli da lì.
Ad esempio, questo comando si riduci ad una semplice riga di comando, installa e avvia Apache Spark con i notebook Jupyter (iPython):
docker run -d -p 8888: 8888 jupyter/all-spark-notebook
Come puoi vedere, è in esecuzione sulla porta 8888. Quindi potresti installare qualcos'altro su un'altra porta o persino installare una seconda istanza di Spark e Jupyter.
Ora, c'è un problema intrinseco con i container, proprio come accade con le macchine virtuali. Questa è la necessità di tenerne traccia. Quando le aziende cloud ti addebitano il tempo di utilizzo di CPU o lo spazio di archiviazione, devi assicurarti di non avere macchine orfane che girano là fuori senza fare nulla. Inoltre, è necessario richiedere automaticamente più risorse quando una macchina ha bisogno di più memoria, oltre a spegnerle quando il carico si alleggerisce. È qui che entra in gioco Kubernetes.
Google ha creato Kubernetes e lo utilizza da oltre 10 anni. Che sia stato utilizzato per far funzionare i sistemi di Google per così tanto tempo è uno dei suoi punti di forza. Da un bel poì di tempi Google ha spinto Kubernetes nell'open source.
Kubernetes è uno strumento di gestione di cluster e container. Ti consente di distribuire container in cluster, ovvero una rete, diciamo, di macchine virtuali.
L'idea di base di Kubernetes è quella di astrarre ulteriormente macchine, storage e reti dalla loro implementazione fisica. Quindi è un'unica interfaccia per distribuire container su tutti i tipi di cloud.
Ecco alcuni concetti di Kubernetes per aiutare a capire cosa fa.
Un nodo è una macchina fisica o virtuale. Non verrà creato da Kubernetes. Puoi crearli con un sistema operativo cloud, come OpenStack o Amazon EC2, o installarli manualmente. Pertanto, è necessario stabilire l'infrastruttura di base prima di utilizzare Kubernetes per distribuire le app. Ma da quel momento può definire reti virtuali, archiviazione, ecc. Ad esempio, è possibile utilizzare OpenStack per definire le reti e generarle da Kubernetes.
Un pod è uno o più container che logicamente vanno insieme. I pod vengono eseguiti su nodi. I pod funzionano insieme come unità logica. Quindi hanno lo stesso contenuto condiviso. Tutti condividono l'indirizzo IP ma possono raggiungerne altri, nello stesso pod, tramite localhost. Possono condividere l'archiviazione e ionltre possono funzionare su piu macchine poiché i contenitori possono estendersi su più di una macchina. Un nodo può eseguire più pod.
I pod sono compatibili con il cloud. Ad esempio, potresti creare due istanze di Nginx e assegnare loro un indirizzo IP pubblico su Google Compute Engine (GCE). Per fare ciò dovresti avviare il cluster Kubernetes, configurare la connessione a GCE e quindi digitare:
kubectl expose deployment my-nginx –port=80 –type=LoadBalancer
Una serie di pod è una distribuzione. Una distribuzione garantisce che un numero sufficiente di pod sia in esecuzione contemporaneamente per servire l'app e spegnere quei pod che non sono necessari. Può farlo osservando, ad esempio, l'utilizzo della CPU.
Per iniziare ad imparare kubernates, pui installare MiniKube su un unico computer e inizire a sperimentare.