Docker Swarm vs Kubernetes

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.