Installa Kubernetes su Ubuntu con MicroK8s

Installa Kubernetes su Ubuntu con MicroK8s

In questo tutorial, ti mostrerò come installare Kubernetes su Ubuntu in pochissimi minuti grazie a Microk8s di Canonical. Inoltre, impareremo e useremo i concetti di Pod, Deployment, Service e Ingress che sono alla base del successo di Kubernetes.

Kubernetes è senza dubbio la tecnologia che ha avuto più impatto nell’ultimo decennio nel campo dello sviluppo software. Il movimento DevOps non sarebbe lo stesso senza Kubernetes. Questo è il motivo per cui è molto importante conoscerne almeno le basi.

Cos’è MicroK8s

MicroK8s è una distribuzione di Kubernetes curata da Canonical e certificata. Il suo obiettivo è essere semplice da installare e gestire, e leggera per poterla utilizzare su qualunque tipo di device. Infatti, è cosi leggera che potresti installarla anche su una Raspberry PI.

Un altro punto di forza di MicroK8s è che gira su Linux, Window, e macOS, quindi non ci sono scuse per non provarla.

In questo articolo, installeremo MicroK8s su Ubuntu. Io userò la versione LTS più moderna che, al momento, è 22.04. Tu puoi utilizzare una versione qualunque a partire dalla 16.04.

Tutto quello di cui abbiamo bisogno è una VM, PC o Server con almeno 2 vCPU e 4GB RAM. La RAM che MicroK8s consuma è inferiore a 600MB, ma dobbiamo averne un po’ di più per poter lanciare le nostre applicazioni.

Installazione

L’installazione consiste di una sola linea di comando perché utilizzeremo una snap preparata da Canonical.

sudo snap install microk8s --classic --channel=1.25

Con una connessione internet veloce questo comando dovrebbe completare in pochi secondi. Dopo di che, passiamo alla configurazione del gruppo microk8s aggiungendo il nostro utente per evitare di usare sudo ogni qualvolta dobbiamo invocare microk8s.

sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
su - $USER
microk8s status --wait-ready

Se tutto è in ordine dovremmo vedere una schermata simile alla seguente.

microk8s status

Attiviamo le addon

MicroK8s ha un sistema di addon che ci permettono di attivare delle funzionalità importanti come DNS, Ingress e Storage.

microk8s enable dns ingress storage

Pro-Tip: Completamento e Alias

MicroK8s espone la Kubernetes CLI come microk8s.kubectl che è molto scomodo come comando. Ci creeremo un bell’alias, k, e attiveremo il completamento automatico, senza di cui lavorare con Kubernetes sarebbe un incubo.

echo 'source <(microk8s.kubectl completion bash)' >>~/.bashrc
echo 'alias k=microk8s.kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
exec bash

Pods

Pod

I Pod sono l’unità di base in Kubernetes. Rappresentano un gruppo di processi e risorse isolate che possono essere condivise da uno o più containers. È buona pratica associare solo un'applicazione per ogni Pod, opzionalmente insieme ad altri container come sidecar con lo scopo di facilitare alcune funzioni generiche come logging, sicurezza, ecc.

Creeremo due Pod: uno con Nginx come web server; e un altro con BusyBox per potere interagire col web server.

k run pod1 --image nginx
k run pod2 --image busybox --command – sleep infinity
k get pods -w
Pod in esecuzione

Deployments

Deployment

In produzione difficilmente dichiariamo Pod, ma utilizziamo invece la risorsa di Deployment. I Deployment ci permettono di definire un numero di istanze che vogliamo del nostro Pod e anche di specificare quali strategie di deployment preferiamo per aggiornare i nostri Pod. Nel nostro caso, richiederemo due Pod con Nginx web server.

k delete pod pod1
k create deployment nginx --image nginx --replicas 2
k get pods -w
Deployment in creazione

Servizi

Servizi

Se volessimo accedere il nostro web server potremmo utilizzare l’IP del target Pod, ma sarebbe l’approccio sbagliato. In Kubernetes esponiamo le nostre applicazioni come servizi o Services.

k expose deployment nginx --port 80

Grazie all’addon DNS che abbiamo attivato in precedenza, nginx è un nome risolvibile da qualunque Pod nel nostro cluster. Quindi proveremo a contattare Nginx dal nostro BusyBox pod2.

k exec pod2 – wget -O- nginx
Prova servizio

Ingress

Ingress

L’ultimo step di questo tutorial è esporre il nostro web server al di fuori del nostro Kubernetes cluster. In questo caso, useremo il concetto di Ingress.

k create ingress nginx --class nginx --rule="/=nginx:80"

Adesso puoi raggiungere la pagina di benvenuto anche al di fuori del cluster.

Welcome page nginx

Se dovessi avere problemi prova a cambiare il parametro --class nginx con --class public.

Conclusione

In pochi minuti abbiamo installato Kubernetes e imparato a gestire i costrutti principali. Se vuoi approfondire fai riferimento alla documentazione ufficiale o lasciami un messaggio.

Alla prossima!