Kubernetes e orchestrazione dei container
Il problema che Kubernetes risolve
Containerizzare un'applicazione con Docker e semplice. Gestire decine o centinaia di container in produzione, distribuiti su piu macchine, con aggiornamenti senza downtime, scalabilita automatica e auto-riparazione, e tutta un'altra storia. Kubernetes e il sistema che orchestra questa complessita.
I concetti fondamentali
Pod
Il pod e l'unita base di deployment: uno o piu container che condividono rete e storage. Di norma un pod contiene un singolo container applicativo.
Deployment
Un Deployment descrive lo stato desiderato: quante repliche di un pod devono essere attive. Kubernetes lavora per mantenere costantemente quello stato.
apiVersion: apps/v1
kind: Deployment
metadata:
name: telemetry-service
spec:
replicas: 3
selector:
matchLabels:
app: telemetry
template:
metadata:
labels:
app: telemetry
spec:
containers:
- name: telemetry
image: registry.mustnode.it/telemetry:1.4.2
ports:
- containerPort: 8080
Service
Un Service fornisce un punto di accesso stabile a un insieme di pod, distribuendo il traffico tra le repliche, anche quando i pod vengono ricreati e cambiano indirizzo.
Le capacita chiave
- Self-healing: se un container va in crash, Kubernetes lo riavvia; se un nodo muore, ricolloca i pod altrove.
- Scaling: si aumentano o diminuiscono le repliche manualmente o automaticamente in base al carico (Horizontal Pod Autoscaler).
- Rolling update: gli aggiornamenti avvengono progressivamente, senza downtime, con rollback automatico in caso di errore.
- Dichiarativita: si descrive lo stato desiderato in YAML e il sistema lo realizza e lo mantiene.
Il principio dichiarativo
La filosofia di Kubernetes e dichiarativa: non si danno comandi imperativi ("avvia questo container"), ma si descrive il risultato voluto ("voglio 3 repliche sempre attive"). Un loop di controllo confronta continuamente lo stato reale con quello desiderato e agisce per colmare la differenza.
Quando (non) usarlo
Kubernetes e potente ma complesso. Introdurlo ha senso quando:
- si gestiscono molti servizi che devono scalare in modo indipendente;
- servono alta disponibilita e aggiornamenti frequenti;
- il team ha le competenze per operarlo.
Per applicazioni piccole o monolitiche, una semplice configurazione Docker o un servizio gestito sono spesso la scelta piu saggia. La complessita va adottata solo quando porta valore reale.
Conclusione
Kubernetes e lo standard per orchestrare container su larga scala, on-premise o in cloud Azure e AWS. In MUSTNODE valutiamo caso per caso se la sua adozione e giustificata, evitando di introdurre complessita non necessaria e privilegiando soluzioni proporzionate alle esigenze reali.
Articoli correlati
Altri approfondimenti dalla categoria Cloud & DevOps.
On-premise vs Cloud Azure/AWS: criteri di scelta
Una guida pratica per scegliere tra deployment on-premise e cloud, valutando costi, sicurezza, latenza, compliance e scalabilita.
Osservabilita: logging, metriche e tracing
I tre pilastri dell'osservabilita e come usarli per capire cosa succede davvero nei sistemi distribuiti in produzione.
AWS Lambda e l'approccio serverless
Cos'e il serverless, quando conviene e quali sono i limiti: una guida pratica a AWS Lambda con un esempio di funzione.