Accedi / Registrati Account

Container

Com'è composta l'architettura di Kubernetes?

Jump to section

Qualche nozione di base su Kubernetes è sufficiente per capire che si tratta di una piattaforma di orchestrazione per container open source, progettata per l'esecuzione di applicazioni e servizi distribuiti su larga scala. Ciò non basta tuttavia per comprendere questi componenti e le modalità con cui interagiscono tra loro.

Questa breve presentazione illustra i principi di progettazione su cui si fonda Kubernetes e spiega come i vari componenti operano in sinergia.

I principi di progettazione di Kubernetes

La progettazione di un cluster Kubernetes si basa su tre principi, come indicato nella guida all'implementazione di Kubernetes.

Un cluster Kubernetes deve essere:

  • Sicuro. Deve rispettare le best practice più aggiornate in ambito di sicurezza.
  • Facile da usare. Deve poter funzionare con pochi e semplici comandi. 
  • Estendibile. Non deve vincolare ad alcun vendor lock in e deve essere personalizzabile a partire da un file di configurazione.

Quali sono i componenti di un cluster Kubernetes?

Un deployment Kubernetes funzionante è chiamato cluster, e possiamo immaginarlo suddiviso in due parti: il piano di controllo e i sistemi di elaborazione, o nodi. Ogni nodo è un ambiente Linux® autonomo, e può essere una macchina fisica o virtuale. Ogni nodo esegue i pod, che sono composti da container.

Questa immagine mostra la correlazione tra i diversi componenti di un cluster Kubernetes:

componenti di un cluster Kubernetes

Componenti del piano di controllo Kubernetes

Piano di controllo

Il centro nevralgico del cluster Kubernetes è il piano di controllo, in cui troviamo i componenti Kubernetes che controllano il cluster e i dati sullo stato e sulla configurazione del cluster. I componenti principali di Kubernetes hanno il compito fondamentale di accertarsi che il numero di container in esecuzione sia sufficiente e che siano disponibili le risorse necessarie. 

Il piano di controllo comunica costantemente con i sistemi di elaborazione. Il cluster è stato configurato per essere eseguito in una determinata maniera, e il piano di controllo garantisce che questo avvenga.

kube-apiserver

Fondamentale per interagire con il cluster Kubernetes, l'API Kubernetes costituisce il front end del piano di controllo di Kubernetes in quanto ne gestisce le richieste interne ed esterne. Il server API stabilisce se una richiesta è valida, e in caso positivo, procede alla sua elaborazione. Si può accedere all'API tramite chiamate REST, tramite l'interfaccia a riga di comando kubectl o tramite strumenti a riga di comando come kubeadm.

kube-scheduler

Lo scheduler Kubernetes si occupa di garantire l'integrità del cluster e di assicurare che abbia la capacità sufficiente per ospitare altri nuovi container, se necessari.

Questo strumento determina le risorse necessarie ai pod, ad esempio CPU o memoria, quindi verifica l'integrità del cluster e infine pianifica il pod in funzione del nodo di lavoro più adeguato.

kube-controller-manager

I controller si occupano dell'effettiva esecuzione del cluster; nello specifico, il controller-manager Kubernetes raggruppa in un unico controller numerose funzioni di controllo. Un controller contatta lo scheduler e verifica che sia in esecuzione il numero corretto di pod. Se un pod smette di funzionare, un altro controller si attiva e reagisce. Un altro controller connette i servizi ai pod, in modo che le richieste siano recapitate agli endpoint corretti. Infine, esistono controller per la creazione di account e token di accesso all'API.

etcd

Un etcd, ovvero un database di archiviazione chiave-valore, memorizza dati e informazioni di configurazione relativi allo stato del cluster. A tolleranza di errore e distribuito, un etcd è progettato per essere l'unica sorgente di dati del cluster.

Componenti di un nodo Kubernetes

Nodi

Un cluster Kubernetes richiede almeno un nodo di lavoro, ma generalmente ne sono presenti numerosi. I pod vengono pianificati e orchestrati per essere eseguiti sui nodi. Per aumentare la capacità del cluster è sufficiente aggiungere altri nodi.

Pod

Il pod è l'unità più piccola e semplice di un modello di oggetto Kubernetes. Rappresenta una singola istanza di un'applicazione. Ogni pod è costituito da un container o da una serie di container a basso livello di accoppiamento e dalle opzioni che controllano le modalità di esecuzione dei container. Per l'esecuzione di applicazioni stateful, è possibile connettere i pod a uno storage permanente.

Motore di runtime del container

Ogni nodo di lavoro dispone di un motore di runtime per eseguire i container. Docker è un esempio, ma Kubernetes supporta altri runtime conformi all'iniziativa Open Container, come rkt e CRI-O.

kubelet

Ogni nodo di lavoro contiene un kubelet, una piccola applicazione che comunica con il piano di controllo e verifica che i container vengano eseguiti in un pod. Quando il piano di controllo deve far eseguire un'azione in un nodo, tale esecuzione viene affidata al kubelet.

kube-proxy

Ogni nodo di lavoro contiene anche un kube-proxy, un proxy di rete che ottimizza i servizi di rete Kubernetes. La sua funzione è gestire le comunicazioni di rete interne ed esterne al cluster affidandosi al livello di filtraggio dei pacchetti del sistema operativo oppure inoltrando il traffico per proprio conto.

Altri elementi necessari in un cluster Kubernetes

Storage permanente

Oltre a gestire i container che eseguono un'applicazione, Kubernetes può anche gestire i dati applicativi collegati a un cluster. Kubernetes consente agli utenti di richiedere le risorse di storage senza dover conoscere i dettagli dell'infrastruttura di storage sottostante. I volumi permanenti sono specifici del cluster e non del pod, e per questo possono avere una durata maggiore del pod stesso.

Registro dei container

Le immagini di container su cui Kubernetes fa affidamento sono archiviate nel registro dei container, che può essere configurato dall'utente o da terzi.

Infrastruttura di base

In funzione delle diverse esigenze, Kubernetes può essere eseguito su server bare metal, macchine virtuali, provider di cloud pubblico, cloud privato e ambienti ibridi. Uno dei principali vantaggi di Kubernetes è la compatibilità con diverse tipologie di infrastruttura.

La trasformazione digitale a partire da Kubernetes

Questa panoramica dell'architettura di Kubernetes si limita a descrivere gli elementi fondamentali che la costituiscono. Approfondendo il modo in cui questi componenti interagiscono tra loro, con le risorse esterne e con l'infrastruttura, si comprendono meglio le complessità di configurazione e sicurezza di un cluster Kubernetes.

Kubernetes offre gli strumenti necessari a orchestrare un'applicazione containerizzata complessa e di grandi dimensioni, ma lascia all'utente molte decisioni, ad esempio quelle relative alla scelta del sistema operativo, del runtime dei container, degli strumenti per i flussi di integrazione e distribuzione continue (CI/CD), dei servizi applicativi, dello storage e di altri componenti. All'utente spetta anche il compito di gestire ruoli, controllo degli accessi, multi-tenancy e impostazioni di sicurezza predefinite. È possibile scegliere di eseguire Kubernetes per proprio conto o di collaborare con un fornitore che può offrire una versione supportata.

Questa libertà di scelta è parte integrante della natura flessibile di Kubernetes. A fronte delle complessità di implementazione, Kubernetes offre gli strumenti necessari per eseguire le applicazioni containerizzate assecondando le proprie esigenze, e per trasformare la tua azienda in modo agile.

Creare applicazioni cloud native con Kubernetes

Ti proponiamo una serie di webinar su Kubernetes in cui potrai scoprire come sviluppare applicazioni cloud native, rinnovare le applicazioni, e rendere efficienti la gestione dello storage dei dati, garantendo la sicurezza dei dati, i processi di disaster recovery efficaci e un'elevata disponibiltà delle applicazioni. 

Perché scegliere Red Hat OpenShift per Kubernetes?

Red Hat guida e contribuisce attivamente allo sviluppo delle tecnologie open source per container tra cui Kubernetes; ha realizzato strumenti strategici per proteggere, semplificare e aggiornare in modo automatico l'infrastruttura dei container. 

Red Hat® OpenShift® è una distribuzione Kubernetes di livello enterprise, che rende disponibile ai team operativi e di sviluppo un'unica piattaforma integrata per adottare le metodologie DevOps. Red Hat OpenShift consente agli sviluppatori di scegliere i linguaggi, i framework, il middleware e i database che preferiscono, creando e distribuendo l'automazione tramite i flussi CI/CD, per potenziare la produttività. Red Hat offre inoltre Red Hat OpenShift Container Storage, una piattaforma di servizi dati e di storage, ottimizzata per container.

Open Answers: Cos'è Red Hat OpenShift?

Red Hat OpenShift Container Platform è Kubernetes, ma è anche molto di più. Scott McCarty (Red Hat) descrive Red Hat OpenShift come una piattaforma open source per applicazioni containerizzate che include una serie di strumenti software che consentono alle aziende di gestire un ambiente basato interamente su Kubernetes.

Scopri Red Hat OpenShift