Panoramica
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 provider in e deve essere personalizzabile a partire da un file di configurazione.
Risorse da Red Hat
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 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 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 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.
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.
Non è un processo semplice
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.
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 Data Foundation, una piattaforma di servizi dati e di storage, ottimizzata per container.
Il blog ufficiale di Red Hat
Leggi gli articoli del blog di Red Hat per scoprire novità e consigli utili sulle nostre tecnologie, e avere aggiornamenti sul nostro ecosistema di clienti, partner e community.