Jump to section

Introduzione all'architettura Kubernetes

Copia URL

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.

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 provider in e deve essere personalizzabile a partire da un file di configurazione.

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:

A diagram showing how the parts of a Kubernetes cluster relate to one another

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 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.

Nodi

Un cluster Kubernetes richiede almeno un nodo di calcolo, 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 calcolo 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 calcolo 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 calcolo 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.

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.

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 protezione 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

Guarda questa serie di webinar per conoscere le opinioni degli esperti e determinare la piattaforma dati Kubernetes di livello enterprise più adatta alle tue esigenze per realizzare, eseguire, distribuire e rinnovare le applicazioni. 

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 Data Foundation, una piattaforma di servizi dati e di storage, ottimizzata per container.

Keep reading

ARTICOLO

Container e VM

I container Linux e le macchine virtuali (VM) sono entrambi pacchetti di ambienti di elaborazione che combinano vari componenti IT e li isolano dal resto del sistema.

ARTICOLO

Cos'è l'orchestrazione dei container?

Definiamo orchestrazione dei container l'automazione dei processi di deployment, gestione, scalabilità e networking dei container.

ARTICOLO

Cos'è un container Linux?

Un container Linux è un insieme di processi, isolati dal resto del sistema, che esegue un'immagine distinta contenente tutti i file necessari per supportare tali processi.

Scopri di più sui container

Prodotti

Una piattaforma applicativa aziendale che offre servizi verificati per consentire la distribuzione delle app sulle infrastrutture preferite.

Risorse

Checklist

10 considerazioni sui deployment Kubernetes

Checklist

Sei considerazioni per scegliere la piattaforma Kubernetes giusta

Serie Open Answers: Cos'è Red Hat OpenShift?

Formazione

Corso di formazione gratuito

Running Containers with Red Hat Technical Overview

Corso di formazione gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Corso di formazione gratuito

Developing Cloud-Native Applications with Microservices Architectures