Come Kubernetes cambia il modello di failure del tuo sistema
Come Kubernetes cambia il modello di failure del tuo sistema

Kubernetes non è solo un orchestratore di container.
È un cambio radicale nel modo in cui il tuo sistema fallisce.
Molti team adottano Kubernetes pensando in termini di scalabilità, deploy e automazione.
Ma il vero impatto — quello più profondo e spesso sottovalutato — è sul failure model.
E se non aggiorni il tuo modo di pensare, Kubernetes non renderà il tuo sistema più robusto.
Lo renderà semplicemente più complesso.
Dal deterministico al probabilistico
Prima di Kubernetes, la maggior parte dei sistemi era implicitamente deterministica:
- server noti
- failure localizzati
- infrastruttura relativamente stabile
Se un server cadeva, lo sapevi.
Se un processo crashava, lo vedevi.
Con Kubernetes, entri in un mondo probabilistico:
- i pod sono effimeri
- il scheduling è dinamico
- i restart sono automatici
- la topologia cambia continuamente
Non puoi più chiederti:
“Il sistema fallirà?”
Ma devi chiederti:
“Quando fallirà, e in che modo?”
Il failure non è più un’eccezione.
È una proprietà del sistema.
Failure invisibili e falsa affidabilità
Uno degli effetti più pericolosi di Kubernetes è che nasconde i failure locali.
- un pod crasha → viene rimpiazzato
- un nodo muore → i workload vengono rischedulati
- un container fallisce → restart automatico
Dal punto di vista superficiale, tutto sembra funzionare.
Ma sotto:
- errori transienti aumentano
- retry silenziosi mascherano problemi
- degradazioni lente passano inosservate
Questo crea una false sense of reliability.
Kubernetes non elimina i failure. Li rende meno visibili.
E quando emergono, spesso lo fanno in modo sistemico.
Kubernetes non è resilienza
Uno dei miti più diffusi:
“Se uso Kubernetes, il mio sistema è resiliente.”
Non è vero.
Kubernetes non rende il tuo sistema fault-tolerant.
Espone i tuoi difetti architetturali.
Esempi concreti:
- servizi non idempotenti → problemi con retry automatici
- dipendenze sincrone → cascading failure
- database centralizzato → single point of failure invariato
- timeout mal configurati → saturazione delle risorse
Kubernetes non è fault-tolerance. È fault-exposure.
Il nuovo blast radius
Prima:
- un failure era spesso confinato a una macchina
Dopo Kubernetes:
- retry aggressivi
- autoscaling
- service mesh
- load balancing dinamico
possono trasformare un piccolo errore in un problema globale.
Esempi tipici:
- retry storm
- thundering herd
- saturazione di servizi downstream
Il blast radius non è più fisico.
È logico e distribuito.
Osservabilità: da optional a requisito di sopravvivenza
In un sistema Kubernetes:
- i log non bastano
- le metriche isolate non bastano
- serve correlazione
Diventa fondamentale:
- distributed tracing
- correlazione tra eventi
- visibilità end-to-end
Se non riesci a osservare il sistema, non lo stai realmente gestendo.
In Kubernetes, if you can’t observe it, you don’t own it.
Cambia il tipo di competenze richieste
Kubernetes non è solo un cambiamento tecnologico.
È un cambiamento culturale.
Gli sviluppatori devono capire:
- retry
- timeout
- circuit breaker
- idempotenza
Gli Ops devono capire:
- comportamento applicativo
- pattern di comunicazione tra servizi
Nasce un vero mindset di Platform Engineering.
Non esiste più:
“non è un problema mio”
Il sistema è una responsabilità condivisa.
Il testing non è più sufficiente
I test tradizionali non bastano più.
Serve introdurre:
- failure injection
- chaos engineering
- test in condizioni realistiche di rete e carico
Perché molti problemi emergono solo:
- sotto stress
- in condizioni distribuite
- nel tempo
La dimensione temporale del failure
Con Kubernetes, i problemi diventano:
- transienti
- intermittenti
- difficili da riprodurre
Un bug può:
- apparire per pochi secondi
- sparire dopo un restart
- non manifestarsi mai in ambiente locale
Il debugging cambia natura:
Non è più uno snapshot. È una timeline.
Il costo cognitivo
Kubernetes introduce un livello significativo di complessità:
- più layer (container, pod, node, cluster)
- più astrazioni
- più punti di failure
La root cause analysis diventa più difficile.
Kubernetes è un moltiplicatore di complessità, non solo di scalabilità.
E questa complessità ha un costo:
- onboarding più lento
- debugging più difficile
- maggiore dipendenza da tool di osservabilità
Quando NON usare Kubernetes
Kubernetes non è sempre la scelta giusta.
Potrebbe non esserlo se:
- il team è piccolo o inesperto
- il sistema è semplice e monolitico
- non hai reali esigenze di scalabilità distribuita
- non hai maturità su osservabilità e resilienza
Se non hai già problemi distribuiti, Kubernetes potrebbe introdurli.
Conclusione
Kubernetes non rende il tuo sistema affidabile.
Rende il tuo sistema onestamente inaffidabile.
Ti costringe a:
- affrontare il failure come parte del design
- migliorare le tue pratiche ingegneristiche
- crescere come organizzazione tecnica
Ed è proprio questo il suo valore.
Kubernetes non risolve i problemi.
Ti obbliga a vederli davvero.
Valerio's Cave