Kubernetes per PMI: quando ha senso e come iniziare senza bruciare il budget

Kubernetes per PMI: quando ha senso e come iniziare senza bruciare il budget

Kubernetes è la tecnologia che più spesso vedo adottata per le ragioni sbagliate. "Lo usano tutti", "è lo standard", "ci serve per scalare": sono le tre frasi che precedono quasi sempre un progetto di containerizzazione che brucia mesi di budget e finisce con un cluster che nessuno in azienda sa più amministrare. Kubernetes è uno strumento straordinario, l'orchestratore di container che fa girare l'infrastruttura di mezza Internet, ma è anche uno strumento pensato per problemi che la maggior parte delle PMI non ha. Adottarlo quando quei problemi non ci sono non è lungimiranza, è over-engineering, e si paga in complessità operativa, costi e tempo sottratto a ciò che davvero serve all'azienda. In un progetto di migrazione infrastrutturale per una PMI, la domanda che pongo prima di parlare di Kubernetes non è "come lo implementiamo", è "ne hai davvero bisogno", e nella maggior parte dei casi la risposta onesta è "non ancora". In questo articolo spiego quando ha senso adottarlo, quando è uno spreco, e se la decisione è sì, come iniziare in modo graduale senza far esplodere i costi.

Kubernetes serve davvero alla tua PMI?

Quasi certamente non ancora, e dirlo non è essere antiquati, è essere onesti su cosa Kubernetes risolve e cosa no. Kubernetes esiste per orchestrare container su scala, attraverso molti nodi, con scaling automatico, self-healing, rolling deployment e gestione dichiarativa di sistemi complessi composti da molti servizi. Sono problemi reali e seri, ma sono i problemi di un'organizzazione che ha già un'applicazione distribuita su decine di servizi, più team che rilasciano in parallelo, e un carico che varia in modo imprevedibile. Una PMI con un'applicazione monolitica o composta da pochi servizi, un piccolo team, e un carico prevedibile, non ha nessuno di questi problemi, e quindi non ha bisogno della soluzione.

Il punto che sfugge è che Kubernetes non rende la tua applicazione migliore, più veloce o più sicura di per sé: aggiunge un livello di orchestrazione che ha senso solo se la complessità che gestisce supera la complessità che introduce. Per un'applicazione che gira benissimo su una singola VPS con Docker Compose, Kubernetes aggiunge solo complessità, senza risolvere alcun problema esistente. È come comprare un camion con rimorchio per fare la spesa: tecnicamente trasporta di più, ma il costo, lo spazio e la difficoltà di guida non sono giustificati dal bisogno.

Kubernetes risolve i problemi della scala. Se non hai quei problemi, ti regala la loro complessità senza i loro benefici. La domanda giusta non è "Kubernetes è potente?", a cui la risposta è ovviamente sì, ma "i problemi che Kubernetes risolve sono i miei?".

C'è anche un costo nascosto nel decidere troppo presto: il tempo e l'attenzione che il team spende a imparare e gestire Kubernetes è tempo che non spende a migliorare il prodotto. Per una PMI, dove le risorse tecniche sono poche e preziose, spostarle dalla creazione di valore alla gestione di un orchestratore sovradimensionato è una scelta che si paga due volte, in costo diretto e in costo opportunità.

Quali sono i segnali che giustificano Kubernetes?

I segnali sono specifici, e quando ci sono Kubernetes smette di essere over-engineering e diventa la scelta giusta. Il primo è la presenza di più team che rilasciano in modo indipendente: quando hai diversi gruppi che lavorano su servizi diversi e hanno bisogno di distribuire senza pestarsi i piedi, l'isolamento e la gestione dichiarativa di Kubernetes diventano un vantaggio reale. Il secondo è uno scaling imprevedibile: quando il carico varia in modo ampio e non programmabile, e hai bisogno che l'infrastruttura aggiunga e tolga capacità automaticamente, lo scaling automatico di Kubernetes risolve un problema che a mano sarebbe ingestibile.

Il terzo segnale sono i deploy frequenti, multipli al giorno: quando rilasci continuamente e hai bisogno di rolling update, rollback istantanei e zero downtime come routine, non come eccezione, l'automazione di Kubernetes ripaga la sua complessità. Il quarto è un'architettura a microservizi reale: non un monolite spezzato male in qualche container, ma un sistema genuinamente composto da molti servizi indipendenti che devono comunicare, scoprirsi e fallire in modo isolato. Se hai uno o più di questi segnali, Kubernetes inizia ad avere senso. Se non ne hai nessuno, non ce l'ha, per quanto la moda spinga nella direzione opposta.

La cosa importante è valutare questi segnali onestamente, sul proprio stato reale e non su quello previsto "tra due anni quando saremo grandi". Costruire per una scala che non si ha ancora, e forse non si avrà mai, è la trappola classica: si paga oggi una complessità per un beneficio futuro e ipotetico, mentre il bisogno reale di oggi è gestibile con molto meno. Quando i segnali arriveranno davvero, si adotterà Kubernetes allora, con la pressione di un bisogno reale che guida le scelte invece di una previsione astratta.

Quando Kubernetes è puro over-engineering?

Quando l'applicazione e il team sono abbastanza piccoli da essere gestiti con strumenti più semplici, cioè nella maggior parte delle PMI. Se hai un'applicazione, anche importante, servita da una singola VPS o da un piccolo gruppo di container, un team che si conosce e coordina senza bisogno di isolamento formale, e un carico che cresce in modo prevedibile, Kubernetes è la risposta a una domanda che non ti sei posto. Per questi casi, Docker Compose su una singola macchina ben dimensionata copre la stragrande maggioranza delle esigenze, e quando serve un minimo di ridondanza, Docker Swarm aggiunge l'orchestrazione su pochi nodi con una frazione della complessità.

Il segnale che sei in territorio di over-engineering è quando ti ritrovi a gestire la complessità di Kubernetes, il networking, lo storage persistente, gli ingress, i certificati, gli aggiornamenti del cluster, senza che nessuno di questi grattacapi corrisponda a un problema di business che avevi. Stai spendendo energia a domare uno strumento invece che a servire i clienti. Ho descritto l'alternativa pragmatica, la singola VPS con Docker, nella guida all'architettura Docker in produzione su Hetzner, e il percorso graduale parte sempre da lì, non dal cluster. Se vuoi una valutazione onesta di dove sei e di cosa ti serve davvero, nel mio profilo professionale trovi l'esperienza concreta su infrastrutture e DevOps per le PMI, dove la prima domanda è sempre se la complessità che stai per aggiungere è giustificata.

Managed o self-hosted, se la decisione è sì?

Se Kubernetes serve davvero, per una PMI la risposta quasi sempre giusta è managed, perché gestire il control plane da soli è un lavoro a tempo pieno che pochi possono permettersi. Un cluster Kubernetes ha due parti: il control plane, il cervello che orchestra tutto, e i worker node, dove girano le applicazioni. Gestire il control plane in autonomia, garantirne l'alta disponibilità, aggiornarlo senza rompere nulla, metterlo in sicurezza, è competenza specialistica e continuativa. Un Kubernetes gestito da un provider cloud toglie questo peso: il provider amministra il control plane, e tu ti occupi solo dei tuoi carichi. Costa di più del puro ferro, ma molto meno di un sistemista Kubernetes a tempo pieno.

L'alternativa self-hosted ha senso in casi precisi: requisiti di sovranità che impongono il pieno controllo, o budget di ferro così stretti da non poter pagare il premio del managed, a patto di avere la competenza in casa. Per il self-hosted leggero esistono distribuzioni come k3s, un Kubernetes conforme ma alleggerito, pensato proprio per ridurre la complessità e l'impronta del cluster su poche macchine: è il modo più sensato per avere Kubernetes self-hosted senza il peso completo di una distribuzione enterprise, e la sua documentazione ufficiale è il punto di partenza. Ma la regola resta: se non hai una buona ragione per gestire il control plane da solo, non gestirlo. Il managed è quasi sempre la scelta economicamente e operativamente più sana per una PMI.

Come si inizia in modo graduale?

Si sale una scala, un gradino alla volta, e non si salta direttamente dall'ultimo. L'errore tipico è passare da "abbiamo un'applicazione su un server" a "implementiamo Kubernetes" in un solo balzo, saltando tutti i passaggi intermedi che avrebbero insegnato al team a gestire container in produzione con rischio crescente e gestibile. Il percorso sano è progressivo. Si parte da Docker Compose su una singola VPS, dove si impara a containerizzare l'applicazione, gestire i segreti, mettere un reverse proxy, fare deploy ripetibili. Quando serve la prima ridondanza, si passa a Docker Swarm su pochi nodi, che introduce l'orchestrazione multi-nodo con una curva di apprendimento dolce.

Solo quando i segnali reali di Kubernetes si manifestano, e il team ha già maturato esperienza di container in produzione, si fa il passo verso un Kubernetes gestito, partendo piccolo: pochi nodi, i carichi non critici per primi, e una crescita guidata dall'esperienza accumulata. Questo approccio graduale ha un vantaggio enorme rispetto al salto diretto: a ogni gradino il team impara, e quando arriva a Kubernetes lo affronta con le competenze costruite, non da zero sotto la pressione di un sistema in produzione che non capisce. Saltare i gradini significa imparare tutto in una volta nel momento peggiore, quando il cluster è già critico per il business.

Quali sono i costi nascosti da mettere in conto?

I costi nascosti sono operativi e umani, e superano quasi sempre il costo dell'infrastruttura che si legge sul listino. Il primo e più grande è la competenza: Kubernetes richiede qualcuno che lo sappia gestire, e quella persona costa, internamente come stipendio o esternamente come consulenza. Senza quella competenza, il cluster diventa un sistema fragile che funziona finché non si rompe, e quando si rompe nessuno sa perché. Il secondo è l'onere continuativo: il cluster va aggiornato, monitorato, messo in sicurezza, e i suoi componenti, il networking con la sua CNI, lo storage persistente con la sua CSI, l'osservabilità, sono ognuno un sottosistema da capire e mantenere.

Il terzo costo nascosto è la sicurezza, che in Kubernetes è un dominio a sé: i permessi RBAC, le network policy, la sicurezza dei container, i segreti, sono livelli che vanno configurati bene, perché un Kubernetes mal configurato è una superficie d'attacco ampia e complessa. Un cluster lasciato con le impostazioni di default, con permessi troppo larghi e senza policy di rete, è una delle infrastrutture più pericolose che si possano esporre, proprio perché la sua potenza si rivolta contro chi non la governa. Il quarto è il costo della distrazione: ogni ora spesa a domare il cluster è un'ora non spesa sul prodotto. Per una PMI, questo è il costo più subdolo, perché non compare in nessuna fattura ma erode la capacità di competere.

C'è poi un quinto costo, quello dell'osservabilità, che quasi tutti scoprono troppo tardi. Un'applicazione su una singola macchina la si controlla guardando i log e un paio di metriche. Un cluster con molti container effimeri, che nascono e muoiono di continuo su nodi diversi, è opaco senza un sistema di raccolta centralizzata dei log, di metriche e di tracciamento: senza quegli strumenti, quando qualcosa va storto non sai nemmeno dove guardare. Costruire e mantenere quell'osservabilità è un progetto a sé, con i suoi costi di infrastruttura e di gestione, ed è parte integrante del conto di Kubernetes, non un optional da aggiungere dopo. Chi calcola il costo del cluster guardando solo i nodi sta sottostimando di molto la spesa reale, perché l'orchestratore senza l'osservabilità che lo rende governabile è solo metà del sistema.

Il filo che lega tutto è che Kubernetes è una decisione che si prende sui propri problemi reali, non sulla moda né su una scala futura immaginata. Se hai i segnali, più team, scaling imprevedibile, deploy continui, microservizi veri, allora Kubernetes risolve problemi che hai davvero, e si adotta in modo graduale, preferibilmente gestito, partendo piccolo. Se non hai quei segnali, Kubernetes ti regala la sua complessità senza i suoi benefici, e la scelta saggia è restare sugli strumenti proporzionati al tuo bisogno, Docker Compose o Swarm, che reggono molto più carico di quanto si creda. La maturità tecnica non è adottare lo strumento più potente, è scegliere quello giusto per il problema che hai. È una forma di disciplina che va controcorrente rispetto alla pressione del settore, dove sembra che non usare Kubernetes sia un segno di arretratezza, mentre spesso è esattamente l'opposto: è il segno di chi ha capito cosa serve davvero alla propria azienda e si rifiuta di pagare una complessità che non porta valore. La scelta più intelligente, per la maggior parte delle PMI, è quella che nessuno racconta nelle conferenze: restare semplici finché la semplicità regge, e fare il salto solo quando il bisogno è reale e misurabile. Se vuoi capire onestamente in quale dei due scenari si trova la tua azienda, ed evitare sia il ritardo sia l'over-engineering, contattami per una consulenza diretta: partiamo dai tuoi problemi reali, non dall'ultima parola d'ordine del settore, e dimensioniamo l'infrastruttura su quelli.

Ultima modifica: