Panoramica
Un pod Kubernetes è una raccolta di uno o più container Linux®, nonché la più piccola unità di un'applicazione Kubernetes. Ciascun pod può includere più container ad alto accoppiamento (scenario di utilizzo avanzato) o un singolo container (scenario di utilizzo più comune). I container vengono raggruppati in pod Kubernetes per aumentare l'intelligenza di condivisione delle risorse, come descritto di seguito.
All'interno del sistema Kubernetes, i container nello stesso pod condivideranno le stesse risorse di calcolo. Queste risorse di calcolo sono raggruppate in Kubernetes per formare cluster, in grado di fornire un sistema più potente e distribuito in modo intelligente per l'esecuzione di applicazioni. Inizialmente la distinzione fra i vari componenti di Kubernetes (container, pod, nodi e cluster) può sembrare confusa, ma per comprendere appieno i vantaggi dei pod Kubernetes è sufficiente aver chiara la suddivisione seguente:
Scopri come un'orchestrazione open source basata su container consente di automatizzare i processi manuali necessari per il deployment, la gestione e la scalabilità delle app containerizzate.
Unità hardware
Nodo: la più piccola unità hardware di calcolo in Kubernetes (immaginabile facilmente come un singolo computer).
Cluster: un insieme di nodi raggruppati insieme per fornire operazioni di condivisione e bilanciamento intelligenti delle risorse.
Unità software
Container Linux: il set di uno o più processi, che include tutti i file necessari per la relativa esecuzione, rendendoli portatili tra computer.
Pod Kubernetes: la raccolta di uno o più container Linux, raggruppati in pacchetti per ottimizzare i vantaggi della condivisione delle risorse tramite la gestione cluster.
In sostanza, il singolo hardware viene rappresentato in Kubernetes come un nodo. Più nodi vengono raccolti in cluster, consentendo di distribuire la capacità di elaborazione in base alle esigenze. I pod vengono eseguiti in questi cluster, il che garantisce che al loro interno tutti i container ad alto accoppiamento vengano eseguiti insieme sullo stesso cluster.
Perché Kubernetes utilizza i pod?
La relazione tra pod e cluster è il motivo per cui Kubernetes non gestisce i container direttamente, mentre esegue i pod per garantire che ciascun container al loro interno condivida le stesse risorse e la stessa rete locale. Tale raggruppamento consente ai container di comunicare reciprocamente come se condividessero lo stesso hardware fisico, pur rimanendo in qualche modo isolati.
Questa organizzazione di container in pod è alla base di una delle funzionalità ben note di Kubernetes: la replica. Quando i container vengono organizzati in pod, Kubernetes può utilizzare controller di replica per ridimensionare orizzontalmente un'applicazione in base alle esigenze. Di fatto, ciò significa che se un singolo pod si sovraccarica, Kubernetes è in grado di replicarlo e distribuirlo automaticamente nel cluster. Oltre a supportare un funzionamento corretto durante i periodi di carico eccessivo, i pod Kubernetes spesso vengono replicati in modo continuo per offrire resistenza agli errori di sistema.
Cosa sono i modelli Kubernetes?
L'ottimizzazione degli elementi riutilizzabili, ad esempio i pod, è un vantaggio fondamentale del sistema Kubernetes. Potrebbe volerci molto tempo per scoprire i migliori usi di Kubernetes negli ambienti di produzione, ma con i ritmi di deployment serrati delle applicazioni cloud native di oggigiorno, la maggior parte delle aziende non può permettersi di sperimentare.
Tuttavia, poiché Kubernetes è creato sulla base di standard open, sono emersi modelli di successo (e di fallimento) mediante i test e gli errori dei primi utenti utilizzatori. I modelli Kubernetes offrono design replicabili che molte organizzazioni possono utilizzare per accelerare la propria implementazione.
Presentato dagli autori Bilgin Ibryam e Roland Huß e fornito attraverso O'Reilly: Kubernetes patterns: Reusable elements for designing cloud-native applications offre una presentazione dettagliata di elementi, modelli, principi e procedure comuni riutilizzabili per la progettazione e l'implementazione di applicazioni cloud native su Kubernetes.