Scopra GKE cost allocation e come sfruttarne i dati con le funzionalità di allocazione costi di DoiT Cloud Intelligence™ per una visione granulare della Sua spesa GKE.

Ottenere una visibilità adeguata sulla spesa Kubernetes è una sfida vecchia quanto Kubernetes stesso.
L'allocazione dinamica delle risorse e la natura effimera dei container rendono difficile attribuire i costi a singole applicazioni o servizi. A questo si aggiunge la condivisione delle risorse tra componenti diversi.
Eppure, avere visibilità sui costi in Kubernetes è fondamentale per gestire risorse e spesa in modo efficace.
Per rispondere a queste esigenze, lo scorso anno Google Cloud ha rilasciato GKE cost allocation, che permette di visualizzare un'analisi dettagliata dei costi dei cluster.
In questo articolo vedremo cos'è GKE cost allocation e come integrarne i dati con le funzionalità di allocazione costi di DoiT Cloud Intelligence per ottenere una visione granulare della spesa GKE.
Nello specifico, illustreremo come un'ipotetica azienda di gaming potrebbe organizzare i propri costi GKE per mapparli sui singoli giochi, ripartire i costi condivisi tra di essi e infine analizzare la suddivisione dei costi di ciascun gioco per ambiente.
Cos'è GKE cost allocation
GKE cost allocation è il metodo consigliato da Google Cloud per ottenere informazioni di fatturazione sui cluster. Rispetto al suo predecessore, GKE usage metering, con GKE Cost Allocation è molto più semplice allocare i costi del cluster agli utenti e diventa possibile visualizzare i costi di cluster e namespace insieme a quelli degli altri servizi Google Cloud — cosa non fattibile con usage metering. Google Cloud ne prevede inoltre la sostituzione di GKE Usage Metering in futuro.
Anche attivare GKE cost allocation è molto più semplice rispetto a GKE usage metering: bastano un comando gcloud o una casella da spuntare nella Google Cloud Console per ciascun cluster. Una volta attivato, viene creato un dataset BQ con metriche su CPU, consumo di memoria e dischi dei workloads in esecuzione nei cluster.
Questo permette di visualizzare facilmente i costi di cluster e namespace, oltre alle informazioni sulle risorse a cui sono associate GKE Labels.



Con GKE cost allocation attivo sui Suoi cluster, potrà rispondere a domande come:
- Quale tenant è all'origine di quale parte dei costi del cluster?
- Che relazione c'è tra i miei costi out-of-cluster (CloudSQL, GCS, ecc.) e quelli in-cluster?
- Quanto costa la mia applicazione di backend?
Infine, una volta attivata la funzionalità, le informazioni granulari di fatturazione su cluster e namespace confluiranno anche in DoiT Cloud Intelligence, rendendo possibili allocazioni dei costi più sofisticate. Vediamo uno scenario di esempio nella prossima sezione.
Mappare i costi GKE sui Suoi raggruppamenti aziendali
Il primo passo per allocare i costi è definire i raggruppamenti aziendali a cui assegnarli. In DoiT Cloud Intelligence questo si fa tramite le Attributions, che permettono di raggruppare le risorse cloud e organizzare i costi secondo la logica di allocazione desiderata.
Immaginiamo di essere un'ipotetica azienda di gaming che offre più giochi ai propri utenti.
Potremmo voler allocare le risorse ai vari giochi e ai diversi ambienti su cui girano.
Qui sotto abbiamo definito i costi GKE relativi a uno dei nostri giochi — un action game — come qualsiasi namespace contenente la parola "action". Ricorrere a una regex ci permette di intercettare i costi di tutti i nuovi namespace legati all'action game che verranno creati in futuro, senza dover aggiornare manualmente l'Attribution.

Abbiamo poi definito i cluster degli ambienti di produzione, oltre a quelli di dev, staging e beta. Ecco un esempio di come definire i cluster di produzione, usando una regex per intercettare tutti i cluster che contengono la parola "prod" nel nome.

Organizzare i raggruppamenti aziendali
A questo punto conviene organizzare le Attributions correlate in Attribution Groups. Questi gruppi permettono di ripartire i costi condivisi tra un insieme di Attributions, ma anche di scomporre un insieme di Attributions tramite un altro. Faremo entrambe le cose nella prossima sezione.
Qui sotto abbiamo creato un Attribution group "Games" con Attributions che rappresentano:
- I quattro giochi gestiti dalla nostra ipotetica azienda
- Costi condivisi in-cluster e non attribuiti, tra cui:
- kube:system e kube:system-overhead: componenti/namespace di sistema K8s. (kube-system è il namespace, mentre Google produce questa metrica aggiuntiva per esprimere l'overhead)
- kube:unallocated: risorse non richieste né dai workloads né per l'overhead di sistema.
- goog-k8s-unknown: di fatto un errore della cost allocation che si verifica all'avvio di una nuova VM Compute o quando il cluster scala (impossibile elaborare lo SKU)
- goog-k8s-unsupported-sku - SKU esistenti ma non supportati (es. istanze E2)

- Costi condivisi out-of-cluster: costi di risorse non Kubernetes, in esecuzione su Google Cloud al di fuori di Kubernetes, utilizzate dalle app deployate sul cluster
- database come Cloud SQL o BigQuery
- object storage come Google Cloud Storage
- code di messaggi come Pub/sub, Kafka, ecc.

- Tutto ciò che non rientra nelle Attributions sopra

Includiamo le Attributions non legate ai giochi perché rappresentano costi condivisi che vorremo ripartire tra i giochi stessi nella prossima sezione.
Allo stesso modo abbiamo creato un Attribution Group per tutti i nostri ambienti.
Lo facciamo perché, una volta ripartiti i costi condivisi tra i giochi, vorremo sapere quanto stiamo spendendo per ciascun ambiente di ciascun gioco.

Ripartire i costi condivisi in-cluster e out-of-cluster
Per prima cosa eseguiamo un report per analizzare l'Attribution Group che contiene i costi dei giochi e quelli condivisi.

Per farlo seguiamo i passaggi qui sotto:

Poi ripartiamo i due tipi di costi condivisi — costi condivisi in-cluster e non attribuiti e costi condivisi out-of-cluster — tra i giochi.

Possiamo scegliere di ripartirli in parti uguali, in proporzione alla spesa relativa di ciascun gioco rispetto al totale, oppure secondo un importo personalizzato.

Una volta fatto, per ciascun gioco vediamo:
- Il costo di gestione del gioco
- La sua quota di costi condivisi in-cluster / non attribuiti
- La sua quota di costi condivisi out-of-cluster

Per semplificare, aggreghiamo le tre voci sotto il costo di ciascun gioco.

Scomporre i costi dei giochi per ambiente
Ora siamo pronti a capire come si distribuiscono i costi totali di ciascun gioco tra i vari ambienti, aggiungendo l'Attribution Group "GKE Environments" alla scomposizione.

Qui sotto vediamo come i costi di ciascun gioco si suddividono in base alle attribution di ambiente create in precedenza, oltre agli eventuali costi non allocati. Questi ultimi corrispondono a risorse non incluse in nessuna delle Attributions degli Attribution Groups in uso.

Possiamo approfondire i costi non allocati per capirne le cause e, da lì, eventualmente modificare le Attributions esistenti per includere quelle risorse.
Filtriamo qui sotto solo i costi non allocati nell'Attribution Group "GKE Environments" e aggiungiamo "Service" alla scomposizione.

In questo modo è possibile individuare risorse prive di label che appartengono a servizi le cui risorse possono essere etichettate, oppure progetti non inclusi in alcuna Attribution ma che dovrebbero esserlo.
Qui sotto vediamo che alcuni costi GCE, GCS e Cloud SQL non rientrano nei nostri Attribution Groups.

Approfondendo le risorse non allocate di Compute Engine, possiamo identificare con esattezza quali sono escluse. Con queste informazioni possiamo rivedere le Attribution per includerle.

Ecco come ridurre i costi non allocati e aumentare la visibilità sulla Sua spesa GKE.
Conclusione
Di norma, per capire l'impatto dei Suoi workloads Kubernetes sulla bolletta cloud complessiva, occorre ricorrere a strumenti come Cast AI o Kubecost.
Pur essendo prodotti più completi rispetto a GKE cost allocation, Google Cloud è l'unico tra gli hyperscaler a offrire gran parte delle funzionalità di visibilità sui costi già integrate e facili da attivare sui cluster.
Può quindi utilizzare i dati forniti da GKE cost allocation, come abbiamo mostrato sopra, per ottenere maggiore trasparenza sulla scomposizione dei costi e rispondere a domande più specifiche sulla Sua bolletta cloud.
Se è già cliente DoiT con GKE cost allocation attivo, inizi oggi a esplorare i Suoi dati in DoiT Cloud Intelligence. Se non è ancora cliente ma desidera saperne di più sui nostri prodotti e servizi di consulenza su K8s e oltre, ci contatti.
