Cosa fa Kubernetes

Un container Docker su una sola macchina lo gestisci a mano senza problemi. Cinquanta container su dieci macchine โ€” riavviarli quando crashano, spostarli quando una macchina muore, ripartire il traffico tra loro, aggiornarli senza downtime โ€” no. Kubernetes (abbreviato in K8s) รจ il sistema che se ne occupa al posto tuo.

Cos’รจ Kubernetes?

Kubernetes รจ una piattaforma open source per l’orchestrazione di container. รˆ stato creato da Google nel 2014 basandosi su 15 anni di esperienza nella gestione di container su larga scala, ed รจ ora mantenuto dalla Cloud Native Computing Foundation (CNCF).

L’orchestrazione, in concreto: un’orchestra sinfonica ha bisogno di un direttore per tenere insieme a tempo decine di strumentisti.

  • I musicisti sono i tuoi container, ognuno sa suonare il proprio strumento
  • Il direttore d’orchestra รจ Kubernetes, che coordina tutti i musicisti
  • La partitura รจ la configurazione che definisce come devono suonare insieme

Senza un direttore, ogni musicista suonerebbe per conto suo. Con Kubernetes, tutti i container lavorano in armonia per far funzionare la tua applicazione.

Il Nome Kubernetes

Il nome deriva dal greco ฮบฯ…ฮฒฮตฯฮฝฮฎฯ„ฮทฯ‚ (kybernetes), che significa “timoniere” o “pilota”. Il logo con il timone a sette raggi rappresenta proprio questo concetto. L’abbreviazione K8s nasce dal fatto che ci sono 8 lettere tra la “K” e la “s”.

Perchรฉ Serve Kubernetes?

Docker risolve il problema di creare e far girare singoli container. Ma in produzione le cose si complicano:

  • Cosa succede se un container crasha alle 3 di notte?
  • Come distribuisci il traffico tra 10 istanze della stessa applicazione?
  • Come aggiorni l’applicazione senza downtime?
  • Come gestisci 50 microservizi che devono comunicare tra loro?

Kubernetes risponde a tutte queste domande.

Docker vs Kubernetes: Non Sono Alternativi

Un malinteso comune รจ pensare che Kubernetes sostituisca Docker. In realtร  lavorano insieme:

StrumentoRuoloAnalogia
DockerCrea e esegue singoli containerIl musicista che suona il violino
KubernetesOrchestra e gestisce molti containerIl direttore d’orchestra

Kubernetes puรฒ usare Docker (o altri runtime come containerd) per eseguire i container. Non devi scegliere tra uno o l’altro: li usi entrambi.

A Cosa Serve Kubernetes: 6 Problemi che Risolve

1. Self-Healing: Container che Si Riparano da Soli

Se un container crasha, Kubernetes lo rileva e ne avvia automaticamente uno nuovo. Non serve che qualcuno sia sveglio alle 3 di notte per riavviare manualmente i servizi.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Kubernetes garantisce sempre 3 repliche attive
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3  # Se una muore, K8s ne crea una nuova
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx:latest

2. Scaling Automatico

Hai un picco di traffico? Kubernetes puรฒ aumentare automaticamente il numero di container. Il traffico cala? Li riduce per risparmiare risorse.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Scala automaticamente tra 2 e 10 repliche in base alla CPU
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

3. Load Balancing Integrato

Kubernetes distribuisce automaticamente il traffico tra tutti i container disponibili. Se un container รจ sovraccarico o non risponde, il traffico viene reindirizzato agli altri.

4. Rolling Updates: Aggiornamenti Senza Downtime

Quando deployi una nuova versione, Kubernetes:

  1. Avvia i nuovi container con la versione aggiornata
  2. Verifica che funzionino correttamente
  3. Gradualmente sposta il traffico sui nuovi container
  4. Termina i vecchi container

Se qualcosa va storto, puรฒ fare rollback automatico alla versione precedente.

5. Service Discovery

In un sistema con molti microservizi, come fa il servizio A a trovare il servizio B? Kubernetes fornisce un sistema DNS interno: ogni servizio ha un nome e Kubernetes si occupa di tradurlo nell’indirizzo corretto.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Il servizio "database" sarร  raggiungibile come "database.default.svc.cluster.local"
apiVersion: v1
kind: Service
metadata:
  name: database
spec:
  selector:
    app: postgres
  ports:
  - port: 5432

6. Gestione dei Secrets e Configurazioni

Password, API key, configurazioni: Kubernetes li gestisce in modo sicuro e li inietta nei container senza hardcodarli nel codice.

1
2
3
4
5
6
7
8
9
# Secret per le credenziali del database
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  username: YWRtaW4=      # base64 encoded
  password: cGFzc3dvcmQ=  # base64 encoded

I Concetti Fondamentali di Kubernetes

Pod

Il Pod รจ l’unitร  base di Kubernetes. Contiene uno o piรน container che condividono rete e storage. Nella maggior parte dei casi, un Pod contiene un solo container.

Node

Un Node รจ una macchina (fisica o virtuale) che esegue i Pod. Un cluster Kubernetes ha tipicamente piรน Node per garantire alta disponibilitร .

Cluster

Il Cluster รจ l’insieme di tutti i Node gestiti da Kubernetes. Include:

  • Control Plane: il “cervello” che prende decisioni (dove piazzare i Pod, quando scalarli, ecc.)
  • Worker Nodes: le macchine che eseguono effettivamente i container

Deployment

Un Deployment descrive lo stato desiderato della tua applicazione: quale immagine usare, quante repliche, come aggiornarla. Kubernetes si assicura che lo stato reale corrisponda sempre a quello desiderato.

Service

Un Service espone i Pod alla rete. Fornisce un indirizzo IP stabile e load balancing, anche se i Pod sottostanti cambiano.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      CLUSTER                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              CONTROL PLANE                       โ”‚   โ”‚
โ”‚  โ”‚  โ€ข API Server  โ€ข Scheduler  โ€ข Controller        โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚   NODE 1    โ”‚  โ”‚   NODE 2    โ”‚  โ”‚   NODE 3    โ”‚    โ”‚
โ”‚  โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚    โ”‚
โ”‚  โ”‚ โ”‚  Pod A  โ”‚ โ”‚  โ”‚ โ”‚  Pod A  โ”‚ โ”‚  โ”‚ โ”‚  Pod B  โ”‚ โ”‚    โ”‚
โ”‚  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚    โ”‚
โ”‚  โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚    โ”‚
โ”‚  โ”‚ โ”‚  Pod B  โ”‚ โ”‚  โ”‚ โ”‚  Pod C  โ”‚ โ”‚  โ”‚ โ”‚  Pod C  โ”‚ โ”‚    โ”‚
โ”‚  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Kubernetes vs Docker Swarm

Docker ha il suo orchestratore integrato: Docker Swarm. Qual รจ la differenza?

CaratteristicaKubernetesDocker Swarm
Complessitร AltaBassa
Curva di apprendimentoRipidaDolce
Funzionalitร Molto riccheEssenziali
EcosistemaEnormeLimitato
ScalingMolto potenteBuono
Adozione enterpriseStandard de factoDi nicchia
Setup minimoComplessoSemplice

Quando scegliere Docker Swarm:

  • Progetti piccoli/medi
  • Team con poca esperienza in orchestrazione
  • Necessitร  di partire velocemente

Quando scegliere Kubernetes:

  • Progetti enterprise o in crescita
  • Necessitร  di funzionalitร  avanzate
  • Team disposto a investire nell’apprendimento
  • Requisiti di scaling importanti

Quando NON Usare Kubernetes

Kubernetes non รจ sempre la risposta giusta. Evitalo se:

  • Hai pochi container: gestire 2-3 container con K8s รจ come usare un TIR per portare la spesa
  • Il team รจ piccolo: la complessitร  operativa puรฒ superare i benefici
  • L’applicazione รจ monolitica: K8s brilla con i microservizi
  • Non hai requisiti di scaling: se il traffico รจ costante e prevedibile, potresti non averne bisogno
  • Budget limitato: i cluster Kubernetes hanno costi operativi significativi

Alternative Piรน Semplici

ScenarioAlternativa a Kubernetes
Pochi container, un serverDocker Compose
Orchestrazione sempliceDocker Swarm
ServerlessAWS Lambda, Azure Functions
PaaS gestitoHeroku, Railway, Render

Su un singolo host, Docker Compose copre gran parte di ciรฒ per cui di solito si ricorre subito a Kubernetes.

Come Iniziare con Kubernetes

Se vuoi esplorare Kubernetes senza impazzire, ecco un percorso graduale:

1. Impara i Fondamenti di Docker

Se non l’hai giร  fatto, parti da Docker. Kubernetes orchestra container, quindi devi prima saperli creare.

2. Sperimenta in Locale con Minikube

Minikube crea un cluster Kubernetes sul tuo computer. Perfetto per imparare senza costi cloud.

1
2
3
4
5
# Installa Minikube e avvia un cluster locale
minikube start

# Verifica che funzioni
kubectl get nodes

3. Esplora kubectl

kubectl รจ il comando per interagire con Kubernetes. Impara le operazioni base:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Vedere i Pod in esecuzione
kubectl get pods

# Creare risorse da un file YAML
kubectl apply -f deployment.yaml

# Vedere i log di un Pod
kubectl logs nome-pod

# Entrare in un container
kubectl exec -it nome-pod -- /bin/bash

4. Prova un Cluster Gestito

Quando sei pronto per la produzione, usa un servizio gestito:

  • Google Kubernetes Engine (GKE)
  • Amazon Elastic Kubernetes Service (EKS)
  • Azure Kubernetes Service (AKS)

Questi servizi gestiscono il Control Plane per te, riducendo la complessitร  operativa.

Ti serve davvero Kubernetes?

Kubernetes ripaga la sua complessitร  quando esegui molti servizi, su piรน di una macchina, con un uptime che conta. Self-healing, autoscaling e rolling update sono difficili da costruire da soli, e Kubernetes te li dร  pronti.

Sotto quella soglia costa piรน di quanto renda. Una manciata di container su un server gira bene con Docker Compose. Un piccolo cluster con esigenze modeste gira bene con Docker Swarm. Passa a Kubernetes quando questi non stanno piรน al passo, non prima.

Per impararlo senza pagare un cluster di produzione, parti da Minikube sulla tua macchina e affronta i concetti qui sopra uno alla volta.

Articoli correlati