Kubernetes

Software per gestire containers in un cluster di server
Versione del 28 apr 2020 alle 11:59 di Banhgao (discussione | contributi) (Aggiornato template software)

Kubernetes (abbreviato K8s) è un sistema open-source di orchestrazione e gestione di container.[1] Inizialmente sviluppato da Google, adesso è mantenuto da Cloud Native Computing Foundation. Funziona con molti sistemi di containerizzazione, compreso Docker.

Kubernetes
software
Logo
Logo
Schermata di esempio
Schermata di esempio
GenereSoftware per gestione cluster (non in lista)
SviluppatoreGoogle
Data prima versione7 giugno 2014
Ultima versione1.33.0 (23 aprile 2025)
Sistema operativoMultipiattaforma
LinguaggioGo
Licenzalicenza Apache 2.0
(licenza libera)
Sito webkubernetes.io


Architettura

 
Architettura di un cluster Kubernetes

Kubernetes è un software formato da più componenti software disposte secondo il pattern orchestrator. Tale pattern distingue i partecipanti in master e nodi. Essi si coordinano per l'esecuzione del carico di lavoro sui server che vanno a formare un cluster controllato da Kubernetes.

Le componenti che si occupano di controllare l'esecuzione dei container applicativi sono raggruppate nel control plane. Il data plane raggruppa invece le componenti software coinvolte nelle funzionalità che gestiscono il carico di lavoro del cluster.

Master

Il master è l'attore centrale di un cluster in quanto a lui fanno riferimento tutti gli altri nodi per coordinarsi nell'esecuzione dei container. Il master si occupa solo della funzione di orchestrare i nodi e non di eseguire container applicativi.

Sia i nodi che gli operatori/amministratori usano l'API esposta dal master come unico canale di coordinamento e controllo.

Essendo centrale al funzionamento del cluster, spesso il master viene replicato su più server in modo da garantire un'alta disponibilità del servizio.

Etcd

Etcd[2] è il componente del master che si occupa di mantenere lo stato del sistema. Il controllo del sistema avviene specificando un desired state (stato desiderato). Ogni partecipante si attiva per contribuire a mutare il sistema verso il desired state definito nel master.

Lo stato del sistema viene rappresentato in Kubernetes mediante in concetto di risorsa. Sono definite delle risorse base sufficienti a far funzionare il cluster, che possono essere poi integrate con risorse definite da terzi per esterndere le funzionalità disponibili.

Controller manager

Il controller manager si occupa costantemente di fare in modo che lo stato attuale del sistema coincida con il desired state all'interno del cosidetto reconciliation loop. Gli interventi necessari al raggiungimento del desired state vengono fatti da controller per specifiche funzionatià attivati a loro volta dal controller manager.

Scheduler

Lo scheduler decide come assegnare il carico di lavoro specificato dal desired state sui nodi che compongono il cluster. La scelta dei nodi a cui assegnare il carico dipende dall'algoritmo di allocazione usato. Nel caso più comune la scelta viene fatta in base alla disponibilità di risorse sui nodi.

Nodo

Un nodo, anche chiamato worker, si occupa di eseguire il carico di lavoro secondo le modalità definite dal master. Per poter eseguire i carichi di lavoro, il nodo deve disporre di un container runtime come Docker.

Generalmente un nodo è identificabile uno ad uno con un singolo server del cluster. Spesso quindi ci si riferisce ad un gruppo di nodi direttamente con "cluster Kubernetes".

L'architettura decentralizzata del cluster permette ad un nodo di mantenere una continuità limitata nel supportare il carico di lavoro anche in caso di fallimento nella comunicazione col master.

Kubelet

Il kubelet è il componente di control plane che controlla le risorse e gestisce il carico di lavoro su un singolo nodo. Mantiene una comunicazione col master e interviene costantemente sul nodo al fine di raggiungere e mantenere il desired state.

Container runtime

Il carico di lavoro è composto da container che vengono eseguiti in un container runtime controllato dal kubelet. Il runtime astrae aspetti quali le risorse computazionali disponibili, lo storage e il networking. Docker è un esempio di container runtime compatibile con Kubernetes.

Risorse del cluster

Pods

Il più semplice elemento in Kubernetes è il pod. Il pod aggiunge un più alto livello di astrazione raggruppando i container. All'interno di un pod i container condividono le risorse, mentre il pod si occupa di astrarre rete e storage al fine di poter spostare più facilmente un container all'interno del cluster. Ogni pod in Kubernetes ha il proprio Indirizzo IP dentro il cluster, questo permette alle applicazioni di usare diverse porte senza rischiare conflitti.[3] Un pod può definire un volume, una sorta di disco locale o disco di rete e metterlo a disposizione a tutti i container all'interno del pod.[4] I pod possono essere gestiti manualmente tramite le API di Kubernetes o tramite i controller.

Label

Kubernetes permette di aggiungere informazioni di tipo key-value chiamate "labels" a qualunque elemento all'interno del sistema, come ad esempio pod e nodi.

Services

Un service Kubernetes è un insieme di pod che lavorano assieme, come uno strato di una applicazione multi-tier. Il set di pod che costituiscono un servizio sono definiti mediante label e selector. Di default un service è esposto all'interno di un cluster, ma può essere esposto anche all'esterno del cluster.[5]

Vedi anche

Note

  1. ^ github.com, https://github.com/kubernetes/kubernetes/.
  2. ^ Container Linux di CoreOS, in Wikipedia, 2 aprile 2020. URL consultato il 28 aprile 2020.
  3. ^ dasblinkenlichten.com, http://www.dasblinkenlichten.com/kubernetes-101-networking/.
  4. ^ medium.com, https://medium.com/fabric8-io/kubernetes-for-developers-2a9c7202fcd3#.b6u76jxar.
  5. ^ dasblinkenlichten.com, http://www.dasblinkenlichten.com/kubernetes-101-external-access-into-the-cluster/.

Altri progetti

Collegamenti esterni

Controllo di autoritàGND (DE1153019000
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica