Kubernetes è una delle piattaforme più utilizzate per gestire e orchestrare applicazioni containerizzate. Tuttavia, eseguire il deploy di un’applicazione su Kubernetes può sembrare complesso, specialmente per chi è alle prime armi. In questa guida pratica, vedremo come eseguire il deploy di un’applicazione su Kubernetes utilizzando file YAML, con esempi chiari e dettagliati. Alla fine di questo articolo, sarai in grado di eseguire il deploy di applicazioni su Kubernetes in modo autonomo.
Indice dei contenuti
Prerequisiti per il Deploy su Kubernetes
Prima di iniziare con il deploy, è importante avere alcune cose già pronte:
- Un Cluster Kubernetes Funzionante: Se non ne hai uno, puoi configurarne uno locale con Minikube o un cluster remoto con provider come Google Kubernetes Engine (GKE), Amazon EKS o Azure AKS.
- kubectl Configurato:
kubectl
è lo strumento da riga di comando per interagire con il cluster Kubernetes. Assicurati che sia installato e configurato per comunicare con il tuo cluster. - Un’immagine Docker dell’Applicazione: Dovresti avere un’immagine Docker già pronta e disponibile su un registry pubblico (come Docker Hub) o privato.
Cos’è un File YAML in Kubernetes?
Prima di vedere gli esempi pratici, è fondamentale comprendere cos’è un file YAML in Kubernetes. YAML (YAML Ain’t Markup Language) è un formato leggibile dall’uomo utilizzato per definire la configurazione delle risorse in Kubernetes. Attraverso i file YAML, è possibile descrivere come un’applicazione dovrebbe essere distribuita nel cluster, specificando dettagli come immagini del container, quantità di risorse, replica dei pod, servizi esposti e molto altro.
Creare un Deployment di Base
Per iniziare, vediamo come creare un deployment di base per un’applicazione semplice. In questo esempio, utilizzeremo un’applicazione web containerizzata con Nginx.
- Crea un File YAML per il Deployment: Crea un file chiamato
nginx-deployment.yaml
con il seguente contenuto:
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
image: nginx:1.14.2
ports:
- containerPort: 80
Spiegazione del File YAML:
apiVersion
: Specifica la versione dell’API Kubernetes utilizzata.kind
: Tipo di risorsa, in questo casoDeployment
.metadata
: Contiene il nome del deployment.spec
: Specifica il numero di repliche (pod) e le informazioni sul container, come l’immagine Docker e la porta esposta.
- Esegui il Deploy del File YAML: Esegui il seguente comando per creare il deployment nel cluster:
kubectl apply -f nginx-deployment.yaml
Questo comando eseguirà il deploy dell’applicazione definita nel file YAML. Kubernetes creerà tre pod dell’applicazione Nginx, come specificato.
- Verifica lo Stato del Deployment: Per verificare che tutto sia andato a buon fine, esegui il seguente comando:
kubectl get deployments
Dovresti vedere il deployment nginx-deployment
con tre repliche pronte.
Esposizione dell’Applicazione con un Service
Ora che il nostro deployment è attivo, dobbiamo esporre l’applicazione al di fuori del cluster utilizzando un Service. I Service in Kubernetes permettono di esporre i pod all’interno del cluster o all’esterno, come nel caso di un servizio di tipo LoadBalancer
o NodePort
.
- Crea un File YAML per il Service: Crea un file chiamato
nginx-service.yaml
con il seguente contenuto:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007
Spiegazione del File YAML:
apiVersion
: Specifica la versione dell’API Kubernetes utilizzata.kind
: Tipo di risorsa, in questo casoService
.metadata
: Contiene il nome del service.spec
: Specifica il tipo di service (NodePort
), il selettore per trovare i pod associati e le porte da esporre.
- Esegui il Deploy del Service: Esegui il seguente comando per creare il service nel cluster:
kubectl apply -f nginx-service.yaml
Questo comando esporrà l’applicazione Nginx sulla porta 30007
di ogni nodo del cluster.
- Verifica lo Stato del Service: Per verificare che il service sia attivo, esegui il seguente comando:
kubectl get services
Dovresti vedere il nginx-service
con il tipo NodePort
e la porta correttamente configurata.
Aggiornare un Deployment Esistente
Uno dei vantaggi di Kubernetes è la possibilità di aggiornare le applicazioni in modo continuo senza downtime. Vediamo come aggiornare il deployment Nginx a una nuova versione.
- Modifica il File YAML del Deployment: Cambia l’immagine del container nel file
nginx-deployment.yaml
da:
image: nginx:1.14.2
a:
image: nginx:1.16.0
- Applica l’Aggiornamento: Esegui il comando per aggiornare il deployment:
kubectl apply -f nginx-deployment.yaml
Kubernetes gestirà l’aggiornamento dei pod uno alla volta, assicurando che ci siano sempre pod disponibili durante il processo.
- Verifica l’Aggiornamento: Controlla che l’aggiornamento sia andato a buon fine con il seguente comando:
kubectl rollout status deployment/nginx-deployment
Dovresti vedere un messaggio che conferma che il rollout è stato completato con successo.
Cancellare un Deployment
Quando non hai più bisogno di un deployment o un servizio, puoi rimuoverli facilmente con i seguenti comandi:
- Cancella il Deployment:
kubectl delete -f nginx-deployment.yaml
- Cancella il Service:
kubectl delete -f nginx-service.yaml
Questi comandi rimuoveranno rispettivamente il deployment e il service dal cluster Kubernetes.
Best Practices per il Deploy su Kubernetes
Per assicurarti che il deploy delle applicazioni su Kubernetes sia sempre efficiente e sicuro, segui queste best practices:
- Usa le Risorse Adeguate: Definisci limiti di risorse (CPU e memoria) per i pod per evitare che un’applicazione consumi tutte le risorse del cluster.
- Utilizza ConfigMap e Secret: Evita di inserire informazioni sensibili direttamente nei file YAML. Usa
ConfigMap
eSecret
per gestire configurazioni e credenziali in modo sicuro. - Monitora lo Stato del Cluster: Usa strumenti di monitoraggio come Prometheus e Grafana per tenere sotto controllo le performance delle tue applicazioni e l’integrità del cluster.
Conclusione
Con questa guida, hai appreso come eseguire il deploy di un’applicazione su Kubernetes, esporre il servizio e gestire aggiornamenti e cancellazioni. Ora sei pronto per sperimentare e implementare le tue applicazioni containerizzate su Kubernetes. Continua a esplorare e sperimentare con diverse configurazioni e funzionalità per sfruttare al meglio la potenza di Kubernetes!