Come Smettere di Pagare Troppo per il Cloud e Iniziare a Vivere con Kubernetes Autoscaler
Immagina questo: hai lanciato una campagna pubblicitaria, il traffico aumenta, e i tuoi pod in Kubernetes iniziano a "soffocare" sotto il carico. O il contrario: arriva la notte, gli utenti dormono, ma decine di istanze costose continuano a girare nel cloud, bruciando il budget della tua azienda. Ti suona familiare?
Di solito in momenti come questi, le persone si ricordano dell'autoscaling. Nell'ecosistema Kubernetes, questo viene gestito dal repository kubernetes/autoscaler. Non è un'unica utility, ma un'intera suite di strumenti che aiutano il cluster a "respirare" con il carico. Ho deciso di capire cosa c'è dentro e perché è indispensabile per qualsiasi ambiente di produzione.
Cosa c'è sotto il cofano
Il repository ospita tre componenti principali. Ognuno risolve il proprio compito specifico, e spesso vengono confusi tra loro.
Cluster Autoscaler: Quando non c'è abbastanza "ferro"
Questo è probabilmente lo strumento più popolare dell'insieme. Il suo compito è semplice: se nel cluster appaiono pod che non possono avviarsi per mancanza di risorse (stato Pending), Cluster Autoscaler va dal provider cloud e chiede di aggiungere un nuovo nodo.
Funziona anche al contrario. Se un nodo è rimasto mezza vuoto per molto tempo e i suoi pod possono essere spostati in sicurezza su altri nodi, l'autoscaler rimuoverà l'hardware extra. Questo significa risparmio diretto sui costi, specialmente se sei su AWS, GCP o Azure.
Vertical Pod Autoscaler (VPA): La magia dell'ottimizzazione delle risorse
Se Cluster Autoscaler cambia il numero di nodi, allora VPA cambia la "dimensione" dei pod stessi. Spesso gli sviluppatori impostano requests e limits a occhio. Il risultato è che l'applicazione va in crash con OutOfMemory, oppure riserviamo 2 GB di RAM dove ne servono solo 200 MB.
VPA monitora il consumo effettivo delle risorse e regola automaticamente i limiti. Il progetto è attualmente in stato beta, ma già fa qualcosa di davvero interessante — la modalità di raccomandazione. Puoi semplicemente osservare quali risorse consiglia di impostare, senza affidargli il riavvio automatico dei pod.
Addon Resizer: Micro-gestione per i servizi di sistema
Questa è una versione semplificata dell'autoscaler verticale. Serve per quei servizi il cui consumo di risorse scala linearmente con la dimensione del cluster. Ad esempio, il metrics server ha bisogno di più memoria se hai 100 nodi invece di 10. Addon Resizer monitora il numero di nodi e scala di conseguenza questi componenti ausiliari.
Come funziona nella pratica
Diciamo che stai usando Go. Per iniziare a lavorare con il codice del progetto in locale, devi seguire la struttura dei percorsi a cui Kubernetes è abituato. Il codice dovrebbe risiedere in k8s.io, non in github.com.
Punto interessante: Cluster Autoscaler supporta decine di provider. Non ci sono solo giganti come AWS, ma anche soluzioni specifiche per cluster bare-metal o locali. Se stai costruendo il tuo servizio cloud, dovrai implementare l'interfaccia CloudProvider, e il tuo cluster imparerà anche a scalare.
Perché è importante per gli sviluppatori
Molti pensano che l'autoscaling sia compito dell'ingegnere DevOps. In realtà, capire come funziona vertical-pod-autoscaler rende la vita molto più facile agli sviluppatori backend.
- Puoi dimenticarti dei tentativi quando configuri le risorse.
- Le applicazioni diventano più resilienti ai picchi di traffico improvvisi.
- Vedi il profilo reale di consumo di memoria e CPU del tuo codice.
A proposito, il repository contiene chart Helm ufficiali per un'installazione rapida. È molto più comodo che cercare di distribuire manualmente i manifest.
Vale la pena adottarlo subito?
Se stai lavorando nel cloud e le bollette della tua infrastruttura crescono, allora Cluster Autoscaler è la base. Ripaga il tempo di configurazione entro il primo mese di utilizzo.
La situazione con Vertical Pod Autoscaler è più complicata. Dal momento che riavvia i pod per cambiare le risorse (fino a quando K8s non avrà aggiornamenti delle risorse in-place), va usato con cautela. Ti consiglierei di iniziare con la modalità Recommender. Otterrai un elenco di suggerimenti per l'ottimizzazione delle risorse, ma VPA non toccherà nulla.
Il progetto è vivo e vegeto, supportato da una vasta comunità (quasi 9.000 stelle e migliaia di fork). Se hai domande, la gente è attiva nel canale Kubernetes Slack #sig-autoscaling.
Quindi se il tuo cluster è ancora statico — dai un'occhiata a questo repository. È ora di far lavorare il cloud per te, non contro di te.
Progetti correlati