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.
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
shellL’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
yamlNella 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
shellL’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
shellOtteniamo 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
shellIl 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
shellLa 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
shellDopo 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
shellRipristino della versione precedente
Questo comando ripristina una revisione precedente, considerata stabile:
kubectl rollout undo deployment/nginx-deployment
shellRipristino 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
shellSe hai appena iniziato a utilizzare Kubernetes, ti consigliamo di seguire il tutorial di Kubernetes nella nostra Digital Guide.
- Configurazione automatica dei cluster Kubernetes
- Archiviazione persistente completamente integrata
- Assistenza clienti 24/7