Jump to section

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.

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. 

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.

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