Cos'è un deployment Kubernetes?

Copia URL

Un deployment Kubernetes è un oggetto risorsa di Kubernetes che fornisce aggiornamenti dichiarativi alle applicazioni. Un deployment consente di descrivere il ciclo di vita dell'applicazione, specificando ad esempio le immagini da utilizzare, il numero di pod necessari e le modalità di aggiornamento relative. 

Un oggetto Kubernetes serve per indicare al sistema Kubernetes in che modo il carico di lavoro del cluster deve funzionare. Dopo che è stato creato l'oggetto, il cluster agisce per garantirne l'esistenza e per mantenere lo stato desiderato del cluster Kubernetes

L'aggiornamento manuale delle applicazioni containerizzate è esigente in termini di tempo e risorse di lavoro. Per aggiornare la versione di un servizio è necessario avviare la nuova versione del pod, arrestare quella precedente, attendere e verificare che la versione più recente si avvii correttamente; in caso di errore, è a volte necessario reinstallare la versione obsoleta.

L'esecuzione manuale di questi passaggi è soggetta a errori e la compilazione corretta dello script può essere laboriosa; entrambi questi fattori possono ostacolare il processo di release, rallentandolo. 

Un deployment Kubernetes rende il processo automatico e ripetibile. Interamente gestiti dal backend Kubernetes, i deployment eseguono il processo di aggiornamento sul lato server, senza interagire con il client.

Un deployment garantisce l'esecuzione e la disponibilità del numero previsto di pod, in ogni momento. Il processo di aggiornamento è completamente registrato e le diverse versioni contengono opzioni per sospendere, continuare o tornare a quelle precedenti.

Il deployment Kubernetes consente di:

  • Eseguire il deployment di un set di repliche o pod
  • Aggiornare i pod e i set di repliche
  • Ripristinare versioni precedenti del deployment
  • Rendere scalabile il deployment
  • Sospendere o continuare il deployment

Gestire le applicazioni tramite un deployment Kubernetes significa prevedere la modalità di aggiornamento dell'applicazione. Uno dei principali vantaggi del processo è la possibilità di avviare e arrestare in modo prevedibile un set di pod.

Strategia di aggiornamento incrementale 

Una strategia di aggiornamento incrementale o in sequenza consente di sostituire i pod dell'applicazione in maniera controllata e progressiva, garantendo la disponibilità costante di un numero minimo di pod.

Per impostazione predefinita, il deployment controlla che la percentuale di pod non disponibili, in qualsiasi momento, sia al massimo del 25% e che non venga eseguito l'over provisioning di una percentuale superiore al 25% del numero dei pod previsti nello stato desiderato. 

I pod obsoleti non vengono eliminati fino a quando è disponibile un numero sufficiente di nuovi pod per mantenere la soglia di disponibilità, e non crea nuovi pod fino a quando non viene rimosso il numero sufficiente di pod obsoleti.

L'oggetto deployment consente di controllare l'intervallo di pod disponibili e in eccesso utilizzando i campi maxSurge e maxUnavailable.

L'adozione di una distribuzione incrementale consente di evitare i tempi di inattività durante il processo di aggiornamento; è tuttavia necessario che l'applicazione sia strutturata per tollerare l'eliminazione dei pod e la creazione di processi.

Durante il processo di aggiornamento vengono eseguite contemporaneamente due versioni del container, e ciò può causare problemi agli utenti del servizio.

Strategia basata su pod di nuova creazione

Una strategia che si basa su pod di nuova creazione prevede che, prima di creare nuovi pod, tutti quelli esistenti vengano eliminati. Kubernetes arresta tutti i container della versione corrente e quindi avvia tutti i nuovi container in simultanea, non appena i container obsoleti vengono eliminati. 

Da un lato, l'adozione di questa strategia comporta tempi di inattività durante l'arresto di tutti i container con vecchie versioni, quando i nuovi container non sono ancora pronti a gestire le richieste in entrata. 

Dall'altro, il fatto di non eseguire contemporaneamente due versioni dei container, evita potenziali problemi agli utenti del servizio.

Risorse da Red Hat

Per creare un deployment è necessario compilare un file manifest, che viene applicato al cluster Kubernetes utilizzando il comando kubectl apply; in alternativa, è possibile utilizzare un modello di deployment dichiarativo. I file di configurazione per Kubernetes possono essere scritti usando il formato YAML o JSON.

La creazione di un deployment implica la descrizione di uno stato desiderato che Kubernetes implementerà tramite una strategia di aggiornamento incrementale o basata su pod di nuova creazione. 

L'impiego di un modello di deployment dichiarativo permette di usare un deployment Kubernetes per ottenere processi di aggiornamento e rollback automatizzati di un gruppo di pod. I modelli Kubernetes sono modelli di progettazione riutilizzabili per applicazioni e servizi containerizzati.  

Puoi aggiornare un deployment modificando le specifiche del modello del pod. Una modifica apportata al campo di specificazione genera automaticamente una sequenza di aggiornamento.

Il ciclo di vita della sequenza è costituito da stati di avanzamento, completamento ed errore. Un deployment è in stato di avanzamento quando esegue attività di aggiornamento o di adeguamento del numero di pod. 

Lo stato di completamento si ha quando tutte le attività sono state finalizzate in modo corretto e il sistema ha raggiunto lo stato desiderato. Lo stato di errore indica che durante il deployment si sono verificati errori, impedendone il completamento. 

Per controllare o monitorare lo stato di un deployment puoi utilizzare il comando kubectl rollout status. 

Non sai da dove iniziare con Kubernetes? Scopri come creare e gestire i container per il deployment in cluster Kubernetes e Red Hat® OpenShift®. Questo corso consente di acquisire le conoscenze di base nella gestione dei container attraverso un laboratorio pratico basato sui container e su Kubernetes. 

Iscriviti al corso di formazione

Red Hat OpenShift è una piattaforma Kubernetes di livello enterprise, che offre agli sviluppatori ambienti self service per la creazione di app e servizi, nonché processi automatizzati in tutto lo stack su qualsiasi infrastruttura.

Red Hat OpenShift include tutti i componenti aggiuntivi che rendono Kubernetes una soluzione efficiente di livello enterprise, tra cui: registro, reti, telemetria, sicurezza, automazione e servizi.

 

Con Red Hat OpenShift, gli sviluppatori possono creare nuove app containerizzate, ospitarle e distribuirle nel cloud con la scalabilità, il controllo e l'orchestrazione necessari per commercializzare nuove iniziative, in modo rapido e facile.

Scopri di più su Red Hat OpenShift
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

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.

Cloud computing: OpenShift operators

Gli operatori Red Hat OpenShift consentono di automatizzare la creazione, la configurazione e la gestione delle istanze del software applicativo Kubernetes native.

Container: risorse consigliate

Articoli correlati