Tra i principali vantaggi della containerizzazione troviamo:
- Portabilità: un’applicazione può essere eseguita in ambienti differenti mantenendo un comportamento coerente.
- Isolamento: ogni container dispone di un ambiente di esecuzione separato.
- Efficienza: le risorse hardware vengono utilizzate in maniera più flessibile.
- Velocità: creazione, avvio e distribuzione dei container sono generalmente molto rapidi.
- Scalabilità: è possibile aumentare o ridurre il numero di istanze di un’applicazione in base alle necessità.
Il problema emerge quando un’infrastruttura deve gestire decine, centinaia o migliaia di container distribuiti su più server. In questi scenari è necessario un sistema di orchestrazione che automatizzi attività come:
- Distribuzione dei container sui nodi disponibili.
- Gestione delle repliche delle applicazioni.
- Bilanciamento del traffico.
- Monitoraggio dello stato dei servizi.
- Riavvio dei container in caso di problemi.
- Gestione delle risorse computazionali.
- Aggiornamento delle applicazioni.
Docker Swarm e Kubernetes nascono proprio per rispondere a queste esigenze.
Che cos’è Kubernetes?
Kubernetes, spesso abbreviato in K8s, è una piattaforma open source per l’orchestrazione e la gestione dei container.
Originariamente sviluppato da Google e successivamente donato alla Cloud Native Computing Foundation (CNCF), Kubernetes è oggi uno dei principali standard per la gestione di applicazioni cloud-native. Il suo obiettivo è automatizzare la distribuzione, la scalabilità e la gestione delle applicazioni containerizzate, permettendo di amministrare infrastrutture distribuite anche molto complesse.
Come funziona Kubernetes?
Kubernetes organizza le risorse computazionali in cluster, composti da due categorie principali di nodi:
Control Plane
È il componente responsabile del controllo e della gestione del cluster.
Tra i principali componenti troviamo:
- kube-apiserver: espone le API utilizzate per comunicare con Kubernetes.
- etcd: database distribuito che memorizza lo stato del cluster.
- kube-scheduler: assegna i Pod ai nodi disponibili.
- kube-controller-manager: esegue i controller che mantengono lo stato desiderato delle risorse.
Worker Node
Sono le macchine sulle quali vengono eseguite le applicazioni. Ogni worker node dispone generalmente di:
- kubelet: agente che comunica con il Control Plane e gestisce i Pod.
- Container Runtime: componente responsabile dell’esecuzione dei container, ad esempio containerd.
- kube-proxy: componente che implementa le funzionalità di rete dei Service, quando utilizzato nel cluster.
Le applicazioni vengono eseguite all’interno di unità chiamate Pod, che possono contenere uno o più container.

