Post

Kubernetes da Zero: Guida Completa all'Installazione e Gestione di un Cluster - Introduzione

Guida pratica a Kubernetes: installa un cluster su Debian 13 con kubeadm, gestisci Deployment, RBAC, Helm e risolvi i problemi più comuni.

Kubernetes da Zero: Guida Completa all'Installazione e Gestione di un Cluster - Introduzione

In passato avevo accennato qualcosa sull’argomento (qui) adesso volevo ampliarlo dato che ormai è uno standard enterprise avere esposti servizi in questa forma di containerizzazione, scriverò in più parti la seguente guida, illustrando passo passo o aggiornando in caso migliorie.


1.1 Cos’è Kubernetes?

Kubernetes (abbreviato spesso in K8s) è una piattaforma open-source per l’orchestrazione di container. Sviluppato originariamente da Google in linguaggio Go, è oggi mantenuto dalla Cloud Native Computing Foundation (CNCF). I principali punti di forza sono la possibilità di automatizzare il deployment, lo scaling e la gestione delle applicazioni containerizzate, diventando lo strumento standard de facto ormai per i team DevOps di tutto il globo.

In sintesi, si può:

  • Distribuire automaticamente le applicazioni su più macchine
  • Scalare verso l’alto o verso il basso in base al carico di lavoro
  • Gestire aggiornamenti senza downtime (chiamato rolling updates)
  • Garantire l’alta disponibilità delle applicazioni
  • Effettuare il rollback in caso di errori

1.2 Architettura del Cluster

Un cluster kubernetes è composto da due tipologie di nodi: il Master Node (Control Plane) e i Worker Nodes.

Desktop View

Master Node (Control Plane)

Il Master Node è il cervello del cluster. I suoi componenti principali sono:

ComponenteRuolo
kube-apiserverPunto di ingresso per tutte le operazioni. Espone le API REST di Kubernetes
etcdDatabase chiave-valore distribuito che memorizza l’intero stato del cluster
kube-schedulerDecide su quale nodo eseguire i nuovi Pod
kube-controller-managerEsegue i controller che regolano lo stato del cluster

Worker Nodes

ComponenteRuolo
kubeletAgente che comunica con il Control Plane e garantisce che i container girino
kube-proxyGestisce le regole di rete sul nodo
Container RuntimeMotore che esegue i container (es. containerd)

1.3 Concetti Fondamentali

Pod

Il Pod è l’unità minima di deployment in Kubernetes. Contiene uno o più container che condividono la stessa rete e lo stesso storage. I Pod sono effimeri: possono essere creati, distrutti e ri-schedulati dinamicamente.

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
  name: mio-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

Namespace

I Namespace sono spazi di lavoro virtuali all’interno di un cluster. Permettono di isolare risorse tra team o ambienti diversi (dev, staging, production) o semplicemente per tipologia di applicazione.

1
2
3
4
5
6
7
8
# Namespace presenti in un cluster nuovo

kubectl get namespaces
# NAME              STATUS   AGE
# default           Active   1d
# kube-node-lease   Active   1d
# kube-public       Active   1d
# kube-system       Active   1d

Deployment

Un Deployment è un controller che gestisce applicazioni stateless. Garantisce che un numero specificato di repliche identiche sia sempre in esecuzione. In caso di crash, il controller ricrea automaticamente il Pod.

Service

I Service forniscono un punto di accesso stabile (IP e DNS) per raggiungere un insieme di Pod. Poiché i Pod hanno IP temporanei, il Service astrae questa volatilità.

Label e Selector

Le Label sono coppie chiave-valore attaccate alle risorse. I Selector filtrano le risorse per label è il meccanismo con cui i Service trovano i Pod da raggiungere.

1
2
3
4
5
6
7
8
9
10
11
# Pod con label
metadata:
  labels:
    app: nginx
    env: production

# Service che seleziona quei Pod
spec:
  selector:
    app: nginx
    env: production

1.4 Requisiti di Sistema (Debian 13)

Info: Per seguire i concetti o applicarli in base a queste spiegazioni prederemo in considerazione un cluster formato da 3 macchine (fisiche o virtuali): 1 Master Node e 2 Worker Nodes. importante sapere che se si ha necessità specifiche di HA (Alta affidabilità) si ha bisogno di avere minimo 2/3 nodi master dato che se va giù o avviene indisponibiltà di uno di questi nodi è impossibile orchestrare i worker e le applicazioni, anche se l’applicazione/servizio potrebbe continuare ad essere disponibile ed erogato

RequisitoMinimoConsigliato
Sistema operativoDebian 13 (Trixie)Debian 13 minimal
CPU2 vCPU4 vCPU
RAM2 GB4 GB
Disco20 GB50 GB
ReteIP staticoIP statico + accesso Internet
AccessoSSH con sudoSSH con sudo

Questo post è sotto licenza CC BY 4.0 a nome dell'autore.