Kubernetes: cos'è?

Copia URL

Kubernetes è una piattaforma open source per l'orchestrazione dei container che consente di automatizzare molti dei processi manuali necessari per il deployment, la gestione e la scalabilità delle applicazioni containerizzate.

Kubernetes automatizza la configurazione delle applicazioni, oltre a mantenere e monitorare l'allocazione delle risorse. Nato nel 2014 come progetto della Cloud Native Computing Foundation (CNCF), Kubernetes è diventato un punto di riferimento per le aziende che necessitano di una piattaforma su cui eseguire applicazioni e servizi distribuiti su larga scala.

Kubernetes è una piattaforma per la gestione dei container, che racchiudono il codice, la configurazione e le dipendenze di un'applicazione in modo che possa essere eseguita come processo isolato con le proprie risorse. Ciascuna applicazione dispone di uno o più container, raggruppati in pod Kubernetes.

Kubernetes può essere eseguito su server bare metal, macchine virtuali, provider di cloud pubblico, cloud privati e ambienti di cloud ibrido. Uno dei principali vantaggi di Kubernetes è la compatibilità con diverse tipologie di infrastruttura.

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

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

Risorse da Red Hat

Kubernetes automatizza gran parte delle attività ripetitive legate alla distribuzione e alla scalabilità delle applicazioni, aprendo la strada a metodi di sviluppo cloud native che consentono di risparmiare tempo e velocizzare il lancio sul mercato del software.Ecco alcuni dei vantaggi principali:

Supporto di ambienti ampi e complessi: un ambiente di produzione in cui vengono eseguite più applicazioni richiede la distribuzione e l'utilizzo simultaneo di più container in diversi host. Kubernetes offre le capacità di orchestrazione e gestione necessarie per distribuire i container in base al volume dei carichi di lavoro.

Scalabilità: Kubernetes è scalabile automaticamente in base alle esigenze, perciò offre la capacità necessaria alle applicazioni con un risparmio di costi e risorse.

Portabilità: puoi eseguire Kubernetes on site nel tuo datacenter, in un cloud pubblico e in configurazioni ibride con istanze pubbliche e private, sapendo di poter usare ovunque gli stessi comandi.

Distribuzioni coerenti: le distribuzioni Kubernetes sono uniformi nell'intera infrastruttura. I container rappresentano il concetto di infrastruttura immutabile; tutte le dipendenze e le istruzioni di configurazione necessarie per eseguire un'applicazione sono raggruppate con il container.

Operazioni e sviluppo separati e automatizzati: i container consentono agli sviluppatori di risparmiare tempo, velocizzando così i cicli iterativi. Allo stesso tempo, con Kubernetes i team operativi hanno la certezza che il sistema sia stabile.

Supporto per la strategia di cloud ibrido: molte organizzazioni abbinano i datacenter on site a soluzioni di cloud pubblico o privato, distribuendo i carichi di lavoro tra più provider cloud per approfittare dei diversi prezzi e livelli di servizio. La coerenza e la portabilità di Kubernetes possono favorire strategie ibride di questo tipo.

Supporto continuo per le applicazioni tradizionali: Kubernetes consente di gestire e distribuire applicazioni containerizzate, tradizionali e cloud native, così come quelle convertite in microservizi.

Gestione di ambienti complessi: i microservizi nei container semplificano l'orchestrazione dei servizi, tra cui storage, reti e sicurezza, ma al tempo stesso aumentano notevolmente il numero dei container nell'ambiente rendendolo più complesso. Kubernetes raggruppa i container in pod, aiutandoti a programmare i carichi di lavoro e a fornire i servizi necessari, tra cui rete e storage, ai container stessi.

Sicurezza aumentata: con le pratiche di sicurezza di Kubernetes, le aziende possono migliorare significativamente la sicurezza dell'IT. Gli amministratori possono adottare criteri di sicurezza e governance, così come criteri specifici per pod o gruppi di pod. I team di sviluppo possono individuare i problemi di sicurezza nei container durante il runtime e correggerli in fase di creazione, anziché eseguire aggiornamenti o applicare patch in produzione.Il controllo degli accessi basato sui ruoli (RBAC) consente di assegnare a ciascun account (utente o servizio) un determinato livello di autorizzazione. I segreti di Kubernetes sfruttano le chiavi di crittografia per tutelare i dati sensibili.

Integrazione DevOps: offrendo una base coerente per l'infrastruttura dei container, Kubernetes è in grado di supportare un approccio DevOps, che promuove la collaborazione efficiente tra team operativi e di sviluppo. Con l'integrazione e la distribuzione continue (CI/CD), è possibile semplificare e accelerare il ciclo di sviluppo dei software. Evoluzione delle DevOps, le DevSecOps anticipano i controlli di sicurezza e la gestione delle vulnerabilità alle prime fasi del ciclo di vita dello sviluppo software.

Ebook: DevOps culture and practice with OpenShift

Un deployment Kubernetes in funzione è chiamato cluster, cioè un gruppo di host che eseguono container.

Gli amministratori definiscono la condizione target di un cluster Kubernetes, determinando le applicazioni o gli altri carichi di lavoro da eseguire, le immagini che utilizzano, le risorse a cui devono avere accesso e altre informazioni di configurazione analoghe.

I cluster Kubernetes sono costituiti da due parti: un piano di controllo e una serie di nodi di elaborazione, che di solito sono server o server virtuali.

Il piano di controllo mantiene la condizione target del cluster, decidendo ad esempio le applicazioni da eseguire e le immagini dei container utilizzate da queste ultime.

I nodi, invece, ricevono le istruzioni del piano di controllo ed eseguono nel concreto le applicazioni e i carichi di lavoro. Ogni nodo è un ambiente Linux® autonomo, e può essere una macchina virtuale o fisica. Un cluster Kubernetes richiede almeno un nodo di calcolo, ma generalmente ne sono presenti numerosi.

Un nodo Kubernetes è composto da pod, ciascuno rappresentante un'istanza di un'applicazione. Un 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.

Una serie di servizi Kubernetes collabora per individuare in automatico quale nodo sia più adatto a ciascun task, allocare le risorse e assegnare i pod al nodo per svolgere il lavoro necessario. Kubernetes fa pervenire in modo automatico le richieste al pod giusto, anche se questo è stato dislocato altrove nel cluster o sostituito.

Tenendo tutto sotto controllo, Kubernetes offre un'interfaccia di programmazione delle applicazioni (API) per gestire, creare e configurare il cluster. 

Vediamo cosa succede all'interno di un cluster Kubernetes.

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

L'API Kubernetes, o kube-apiserver, 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.

L'unità di pianificazione di Kubernetes, o kube-scheduler, 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.

I controller, o kube-controller-manager, 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 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.

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

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

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

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 alla base. I volumi permanenti sono specifici del cluster e non del pod, e per questo possono avere una durata maggiore del pod stesso.

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

Scopri di più sull'architettura Kubernetes

Il serverless computing è un modello di sviluppo cloud native che consente agli sviluppatori di creare ed eseguire applicazioni senza gestire i server. Anche se in questo modello i server vengono utilizzati comunque, sono astratti dallo sviluppo delle app. Gli sviluppatori devono semplicemente creare pacchetti di codice all'interno di container per il deployment.

Dopo il deployment le app serverless rispondono alle richieste e si adattano automaticamente in base alle diverse esigenze di scalabilità. L'utilizzo delle soluzioni serverless offerte dai provider di cloud pubblico viene solitamente misurato on demand tramite un modello di esecuzione basato su eventi, pertanto le funzioni serverless non costano nulla, quando non vengono utilizzate.

Kubernetes è molto diffuso per l'esecuzione di ambienti serverless, ma di per sé non è predisposto per l'esecuzione nativa di applicazioni serverless.Knative è un progetto della community open source che aggiunge componenti per il deployment, l'esecuzione e la gestione di applicazioni serverless su Kubernetes.

Con Knative è possibile creare il pacchetto di codice di un servizio come immagine container e passarlo al sistema, che lo esegue solo quando necessario, poiché Knative avvia e arresta le istanze automaticamente.

Scopri di più sul serverless

Gli operatori Kubernetes sono controller specifici dell'applicazione, che estendono le funzionalità dell'API Kubernetes consentendo di creare, configurare e gestire le istanze di applicazioni complesse per conto di un utente di Kubernetes e aggiungere altre funzionalità applicative. Partendo dai concetti di base delle risorse e dei controller Kubernetes, integra conoscenze specifiche relative all'applicazione o al dominio per automatizzare l'intero ciclo di vita del software che gestisce.

Le attività possibili a un operatore Kubernetes sono innumerevoli: dalla scalabilità di un'applicazione complessa agli aggiornamenti delle versioni dell'applicazione, fino alla gestione dei moduli kernel per i nodi in un cluster di elaborazione con hardware specializzato. Tra gli strumenti e i software distribuiti come operatori Kubernetes sono inclusi l'operatore Prometheus per il monitoraggio e l'operatore Elastic Kubernetes per la ricerca automatica.

Scopri di più sugli operatori Kubernetes

Di per sé, Kubernetes è un software open source pensato per il deployment, la gestione e la scalabilità dei container. Nel concreto, la sua adozione è piuttosto complessa. Le organizzazioni devono integrare funzionalità come automazione, monitoraggio, analisi dei log, service mesh, serverless e strumenti per la produttività degli sviluppatori. Potrebbero voler aggiungere altri strumenti legati ad ambiti come reti, ingressi, bilanciamento dei carichi, storage, monitoraggio, log, gestione di più cluster e integrazione e distribuzione continue (CI/CD). In sostanza, in molti scenari di utilizzo Kubernetes non può essere usato da solo.

Molti fornitori di software offrono le proprie versioni di Kubernetes, che includono distribuzioni autogestite, servizi in hosting, programmi di installazione e soluzioni Platform-as-a-service (PaaS). La CNCF gestisce un elenco di decine di soluzioni Kubernetes certificate.

Red Hat® OpenShift® è una soluzione Kubernetes certificata dalla CNCF, ma include molto di più. Red Hat OpenShift si basa su Kubernetes per offrire una piattaforma completa per la distribuzione coerente di applicazioni cloud native in diversi ambienti di cloud ibrido.

Usando Kubernetes come motore di orchestrazione dei container, Red Hat OpenShift fornisce molte altre funzioni dell'ecosistema open source CNCF, tutte testate, raggruppate in pacchetti e supportate da Red Hat. È disponibile come servizio cloud pubblico dei principali provider cloud come AWS, Microsoft Azure, Google e IBM, o come software autogestito in svariate infrastrutture bare metal e virtuali su datacenter, cloud pubblici e all'edge.

Scopri di più su Red Hat OpenShift e Kubernetes

OKD è un progetto della community che raggruppa in pacchetti i componenti software necessari per l'esecuzione di Kubernetes. Oltre a Kubernetes, OKD offre strumenti per sviluppatori e team operativi che contribuiscono ad accelerare lo sviluppo, il deployment e la scalabilità delle applicazioni e aiutano a garantire cicli di vita a lungo termine. Permette agli sviluppatori di creare, testare e distribuire le applicazioni in ambienti cloud e supporta diversi linguaggi di programmazione, tra cui Go, Node.js, Ruby, Python, PHP, Perl e Java.

È il progetto upstream di Red Hat OpenShift, ottimizzato per lo sviluppo e il deployment di applicazioni continui. Presenta in genere funzionalità più aggiornate rispetto a OpenShift, questo perché gli aggiornamenti della community sono rilasciati prima nel progetto OKD, dove vengono testati per l'uso in ambienti enterprise, e successivamente introdotti anche in OpenShift.

La differenza principale tra OKD e OpenShift è che quest'ultimo è convalidato e testato da Red Hat, e offre una sottoscrizione con vantaggi pensati per le operazioni aziendali. Include infatti supporto tecnico, team di risposta agli incidenti di sicurezza, opzioni di supporto a lungo termine, operatori di terze parti convalidati, database e middleware certificati, e tanto altro.

Scopri di più su Red Hat OpenShift e OKD

Red Hat è leader nello sviluppo di tecnologie open source per container, tra cui Kubernetes; realizza inoltre strumenti strategici per proteggere, semplificare e aggiornare in modo automatico l'infrastruttura dei container.

Red Hat OpenShift permette agli sviluppatori di creare nuove app containerizzate, ospitarle e distribuirle nel cloud con i livelli di scalabilità, controllo e orchestrazione necessari per trasformare le idee migliori in nuove opportunità di business, in modo semplice e rapido. Se stai pensando di distribuire o spostare i carichi di lavoro Kubernetes su un servizio cloud gestito, OpenShift è disponibile anche come servizio cloud native su Amazon Web Services (AWS), Microsoft Azure, Google Cloud, IBM Cloud e altri provider.

Basandoti su OpenShift, puoi utilizzare insieme Red Hat Advanced Cluster Management e Red Hat Ansible® Automation Platform per distribuire e gestire in modo efficiente più cluster Kubernetes in diverse regioni e in ambienti diversi: cloud pubblici, on-premise ed edge.

Hub

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.

Tutte le versioni di prova dei prodotti Red Hat

Grazie alle versioni di prova gratuite dei prodotti Red Hat potrai acquisire esperienza pratica, prepararti per le certificazioni o capire se il prodotto che hai scelto è giusto per le esigenze della tua organizzazione.

Continua a leggere

Microservices: i vantaggi di Red Hat OpenShift Serverless

Red Hat OpenShift Serverless estende Kubernetes per l'implementazione e la gestione di carichi di lavoro per il serverless computing.

Virtualizzazione: Container Linux e VM

Container e macchine virtuali consentono di isolare alcuni componenti IT per facilitarne l'utilizzo e la gestione. Scopri le differenze tra container e vm.

Cos'è il Kubernetes Java Client?

Il Kubernetes Java Client è una libreria client che permette di utilizzare il linguaggio di programmazione Java per interfacciarsi con Kubernetes.

Container: risorse consigliate

Prodotto in evidenza

  • Red Hat OpenShift

    Una piattaforma per lo sviluppo di applicazioni unificata che ti consente di creare, modernizzare e distribuire applicazioni in modo scalabile, in base all'infrastruttura hybrid cloud di tua scelta.

Articoli correlati