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.
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.
Master Node (Control Plane)
Il Master Node è il cervello del cluster. I suoi componenti principali sono:
| Componente | Ruolo |
|---|---|
| kube-apiserver | Punto di ingresso per tutte le operazioni. Espone le API REST di Kubernetes |
| etcd | Database chiave-valore distribuito che memorizza l’intero stato del cluster |
| kube-scheduler | Decide su quale nodo eseguire i nuovi Pod |
| kube-controller-manager | Esegue i controller che regolano lo stato del cluster |
Worker Nodes
| Componente | Ruolo |
|---|---|
| kubelet | Agente che comunica con il Control Plane e garantisce che i container girino |
| kube-proxy | Gestisce le regole di rete sul nodo |
| Container Runtime | Motore 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
| Requisito | Minimo | Consigliato |
|---|---|---|
| Sistema operativo | Debian 13 (Trixie) | Debian 13 minimal |
| CPU | 2 vCPU | 4 vCPU |
| RAM | 2 GB | 4 GB |
| Disco | 20 GB | 50 GB |
| Rete | IP statico | IP statico + accesso Internet |
| Accesso | SSH con sudo | SSH con sudo |
