Distribuzione di Kubernetes

Creare correttamente una distribuzione di Kubernetes è fondamentale per gestire in modo efficiente le applicazioni containerizzate. In questo tutorial troverai informazioni dettagliate sui passaggi più importanti e sulle migliori prassi per realizzare una distribuzione affidabile in un ambiente Kubernetes.

Che cos’è una distribuzione di Kubernetes?

Una distribuzione di Kubernetes è un concetto fondamentale della piattaforma che semplifica il provisioning e la gestione delle applicazioni nei container. Questo meccanismo di controllo funge da intermediario tra la configurazione e la sua effettiva esecuzione nel cluster Kubernetes. In questo modo puoi stabilire le condizioni che desideri per le tue applicazioni, compresi i dettagli per le repliche, le immagini dei container e le impostazioni di configurazione.

La distribuzione di Kubernetes penserà successivamente ad automatizzare il provisioning, organizzare i container in pod di Kubernetes e distribuirli fra le risorse disponibili nel cluster. Inoltre, consente i rolling update, ossia aggiornamenti in sequenza eseguiti gradualmente che riducono al minimo i tempi di inattività. Le funzionalità di scalabilità automatica garantiscono inoltre un adattamento dinamico del numero di istanze in esecuzione in base al carico corrente.

Consiglio

Con Managed Kubernetes di IONOS puoi sfruttare i vantaggi dell’orchestrazione di container senza dover pensare a impegnative attività amministrative come monitoraggio, aggiornamenti e routine di manutenzione. Grazie al servizio di gestione gratuito di IONOS Cloud potrai aumentare la tua produttività e risparmiare risorse preziose.

La creazione di una distribuzione di Kubernetes può basarsi su due metodi principali:

  • Metodo imperativo
  • Metodo dichiarativo

Creazione di una distribuzione di Kubernetes: metodo imperativo

Con il metodo imperativo devi fornire comandi specifici per eseguire direttamente le azioni desiderate. Queste possono essere la creazione di risorse, come pod e servizi, oppure l’aggiornamento delle configurazioni. La configurazione imperativa è adatta per requisiti situazionali o sperimentali.

Il comando seguente crea una distribuzione di Kubernetes denominata nginx-deployment e la configura in modo da implementare un server web Nginx in un container a partire dall’immagine Nginx ufficiale sulla porta 80.

$ kubectl create deployment nginx-deployment --image nginx --port=80
shell

L’approccio imperativo è implementabile rapidamente, ma presenta anche alcuni svantaggi. I passaggi del metodo imperativo sono direttamente legati alla situazione effettiva, il che può complicare la ripetibilità delle azioni. In pratica, ripetere l’esecuzione dello stesso comando potrebbe non portare sempre allo stesso stato come risultato, soprattutto se la situazione iniziale è cambiata.

Guida sul metodo dichiarativo

Rispetto alla configurazione di tipo imperativo, il metodo dichiarativo segue un approccio più astratto. È necessario definire lo stato desiderato per l’applicazione in un file di configurazione e sarà poi Kubernetes a fare in modo che il cluster sia conforme allo stato previsto. Il tuo compito, in questo caso, è descrivere cosa vuoi ottenere, mentre Kubernetes penserà all’implementazione e al mantenimento di tale stato.

Primo passaggio: creazione del file di configurazione YAML

Per iniziare, apriamo un editor di testo e creiamo il file YAML nginx-deployment.yaml per definire la configurazione per la distribuzione di Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
    name: nginx-deployment
spec:
    replicas: 3
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: nginx-container
                image: nginx
                ports:
                - containerPort: 80
yaml

Nella sezione spec specifichiamo la configurazione desiderata. Con replicas: 3 indichiamo che la distribuzione dovrà creare tre repliche (pod) dell’applicazione. La sezione selector definisce come selezionare i pod, dove app=nginx funge da criterio di selezione. Il template è il modello dei pod da creare, comprese le etichette. Tra i containers viene configurato il container nginx-container, che utilizza l’immagine Nginx e rimane in ascolto sulla porta 80.

Secondo passaggio: applicazione della configurazione

Esegui il comando seguente dalla riga di comando per applicare la configurazione al cluster:

kubectl apply -f nginx-deployment.yaml
shell

L’opzione -f indica il percorso del file YAML o JSON che contiene la configurazione per le risorse Kubernetes.

Terzo passaggio: controllo dello stato della distribuzione

Questo passaggio permette di verificare se la distribuzione di Kubernetes è stata creata correttamente e quanti pod sono attualmente disponibili.

kubectl get deployments nginx-deployment
shell

Otteniamo questo output:

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment         3/3            3           3    2m
shell
  • READY: indica il numero di pod attualmente in esecuzione rispetto al numero desiderato.
  • UP-TO-DATE: indica il numero di pod aggiornati alla configurazione più recente.
  • AVAILABLE: mostra il numero di pod disponibili e in grado di accettare richieste.
  • AGE: indica da quanto tempo è in esecuzione la distribuzione.

Quarto passaggio: visualizzazione di informazioni aggiuntive

Il comando seguente ti fornisce informazioni dettagliate sulla distribuzione di Kubernetes, sulle strategie utilizzate, sulle repliche attuali e desiderate e sulle etichette dei selettori.

kubectl describe deployment nginx-deployment
shell

Il risultato è il seguente:

Name:                               nginx-deployment
Namespace:                    default
CreationTimestamp:      Thu, 22 Feb 2024 12:34:56 +0000
Labels:                              <none>
Annotations:                   deployment.kubernetes.io/revision: 1
Selector:                           app=nginx
Replicas:                           3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:                  RollingUpdate
MinReadySeconds:         0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
shell

La strategia di aggiornamento è configurata come rolling update, con un’indisponibilità massima del 25% e un aumento fino al 25% di pod aggiuntivi durante un aggiornamento.

Quinto passaggio: scalabilità della distribuzione

Per adeguare il numero di pod di una distribuzione di Kubernetes, utilizza il comando kubectl scale.

kubectl scale deployment nginx-deployment --replicas=2
shell

Dopo aver eseguito questo comando, Kubernetes aggiorna la distribuzione e garantisce che sia presente il numero desiderato di repliche. Nel nostro esempio, riduciamo il numero di pod in esecuzione a 2.

Strategie di distribuzione di Kubernetes

Le strategie di distribuzione di Kubernetes definiscono il modo in cui le modifiche in un’applicazione vengono implementate in un cluster.

  • Rolling Deployment (Standard): la strategia di distribuzione in sequenza è il metodo standard per le distribuzioni di Kubernetes. In questo caso, i nuovi pod vengono distribuiti gradualmente, mentre i vecchi pod vengono rimossi a poco a poco. Questa strategia offre una disponibilità continua durante il processo di aggiornamento.
  • Recreate Deployment: questa strategia rimuove innanzitutto tutti i pod esistenti e quindi avvia i pod aggiornati. Questo metodo può causare un’interruzione temporanea del servizio perché i pod non sono disponibili durante il processo di ricreazione.
  • Blue/Green Deployment: in questo caso vengono creati due set di pod (Blue e Green), uno che rappresenta la versione corrente dell’applicazione e l’altro la nuova versione. Assegnando etichette specifiche a questi pod, è possibile reindirizzare il traffico senza intoppi tra le due versioni. Questa soluzione consente di passare rapidamente da una versione all’altra ed eseguire facilmente un ripristino a una versione precedente.

Ripristino della distribuzione di Kubernetes

Se si verifica un errore nella versione più recente della tua applicazione, è fondamentale eseguire un ripristino (rollback) il più rapidamente possibile. In Kubernetes, puoi avviare il processo di rollback controllando la cronologia delle revisioni della tua distribuzione e ripristinando una versione precedente, se necessario.

Controllo della cronologia delle revisioni

Per visualizzare la cronologia delle revisioni della tua distribuzione, utilizza questo comando:

kubectl rollout history deployment/nginx-deployment
shell

Ripristino della versione precedente

Questo comando ripristina una revisione precedente, considerata stabile:

kubectl rollout undo deployment/nginx-deployment
shell

Ripristino a una versione specifica

Se vorresti tornare a una revisione specifica, esegui il comando seguente indicando il numero di revisione desiderato:

kubectl rollout undo deployment/nginx-deployment --to-revision=1
shell
Consiglio

Se hai appena iniziato a utilizzare Kubernetes, ti consigliamo di seguire il tutorial di Kubernetes nella nostra Digital Guide.

Managed Kubernetes
Orchestrazione sicura dei carichi di lavoro dei container
  • Configurazione automatica dei cluster Kubernetes
  • Archiviazione persistente completamente integrata
  • Assistenza clienti 24/7
Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top