Kubernetes è un sistema di gestione (orchestratore) di container che è diventato di fatto lo standard per distribuire applicazioni containerizzate.

Questo perché Kubernetes è potente, affidabile, flessibile e per lo più facile da usare (come no).

Si facile da utilizzare dopo che si supera il primo scoglio iniziale..

Io personalmente ho avuto difficoltà nel visualizzare mentalmente il cluster e tutti i componenti che ne facevano parte utilizzando solo gli strumenti della riga di comando finché non ho familiarizzato con la sua struttura.

Per fare ciò è stato di grandissimo aiuto (per me) l’utilizzo di Rancher!

Con questo articolo spero di aiutare tutti gli interessati che vogliono conoscere e sperimentare Kubernetes, il risultato finale di questa guida vi permetterà di avere una sorta di laboratorio sulla vostra workstation/server e toccare con mano un cluster Kubernetes.

Per raggiungere le scopo verranno installati i seguenti elementi:

Docker: Il sistema più diffuso per gestire container

Kubectl: Strumento a riga di comando utilizzato per controllare il cluster Kubernetes

Helm: Gestore di pacchetti per Kubernetes. Consente di installare, aggiornare e gestire applicazioni su un cluster Kubernetes.

K3d: k3d è un progetto guidato dalla community, supportato da Rancher (SUSE). È un wrapper per eseguire k3s in Docker.

K3s: È una distribuzione Kubernetes pronta per la produzione, molto leggera, sviluppata da Rancher.

Rancher: Banalmente potrebbe essere considerata una GUI per Kubernetes ma fa molto di più! Permette di gestire e configurare più cluster Kubernetes da un unico punto di controllo.

Premessa

  • avere a disposizione una workstation o server con distribuzione Linux (si potrebbe utilizzare anche WSL2 su Windows ma non lo tratteremo in questo articolo)
  • accesso alla rete per scaricare pacchetti

Procedura parte 1

Qui procediamo con installazione degli elementi Docker, K3D, Helm e Kubectl

Docker

# Aggiungiamo la chiave **GPG key** ufficiale del repository Docker
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io 

K3D

 sudo wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

Helm

sudo curl -s https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Kubectl

sudo curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo chmod +x kubectl
sudo mv kubectl /usr/local/bin

Procedura parte 2

Adesso procederemo con la creazione del cluster Kubernetes tramite K3D utilizzando K3S e infine completeremo installando Rancher tramite Helm.

Creazione cluster Kubernetes

sudo k3d cluster create k8s-test-rancher -p "8900:30080@agent:0" -p "8901:30081@agent:0" -p "8902:30082@agent:0" --agents 2

Il comando andrà a creare un cluster chiamato “k8s-test-rancher” con 3 porte esposte: 30080, 30081 e 30082. Verranno mappate rispettivamente alle porte 8900, 8901 e 8902 della workstation o server che state utilizzando. Il cluster saà composto da 1 nodo master e 2 nodi worker.

Ora facciamo in modo che Kubectl conosca il file di configurazione del cluster eseguendo il seguente comando

sudo k3d kubeconfig merge k8s-test-rancher --kubeconfig-switch-context

Eseguiamo ora una prima verifica della presenza del cluster e dei nodi elencati

sudo kubectl get nodes

Se tutto procede come dovrebbe dovreste avere lo stesso risultato di sotto

NAME                            STATUS   ROLES                  AGE   VERSION
k3d-k8s-test-rancher-server-0   Ready    control-plane,master   36s   v1.27.4+k3s1
k3d-k8s-test-rancher-agent-0    Ready    <none>                 32s   v1.27.4+k3s1
k3d-k8s-test-rancher-agent-1    Ready    <none>                 32s   v1.27.4+k3s1

Adesso siamo pronti per l’ultimo passaggio fondamentale, installare Rancher tramite Helm

sudo helm repo add rancher-latest https://releases.rancher.com/server-charts/latest

sudo helm install rancher rancher-latest/rancher --namespace cattle-system --create-namespace --set ingress.enabled=false --set tls=external --set replicas=1

Nel frattempo che Helm completerà l’installazione, se siete cusiosi potete interagire con il cluster e verificare cosa stia installando

sudo kubectl get deployment -n cattle-system
sudo kubectl get pods -n cattle-system

A questo punto dobbiamo metterci nelle condizioni di poter raggiungere Rancher sulla propria web-gui, per farlo è necessario creare un NodePort. Create questo file yaml

sudo vi rancher.yaml

al suo interno incollate questa dichiarazione, che sostanzialmente eseguirà un match con le porte settate in precedenza

apiVersion: v1
kind: Service
metadata:
  labels:
  app: rancher
  name: ranchernodeport
  namespace: cattle-system
spec:
  ports:
  - name: http
    nodePort: 30080
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 30081
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: rancher
type: NodePort

Attenzione è importante sia identato correttamente, dovete rispettare gli spazi, yaml non perdona, lo scoprirete presto :D

Attiviamo il NodePort eseguendo il comando

sudo kubectl apply -f rancher.yaml

Adesso potete utilizzare il vostro browser e chiamare la seguente url

https://vostroip:8901/dashboard/auth/login

Non date importanza al warning sul certificato è perche utilizza un self signed, andate avanti e vi ritroverete la pagina web di Rancher, vi verrà suggerito come recuperare la passwd seguite le indicazioni con il comando kubectl

Benvenuti su Rancher il vostro cluster Kubernetes è pronto! la guida termina quì, spero sia stata semplice e chiara da seguire!

ps. immagine in copertina creata da Dall-E tramite co-pilot