
Attualmente, sempre più aziende stanno migrando la propria infrastruttura da server fisici e macchine virtuali proprie verso il cloud. Questa scelta è facilmente comprensibile: non c'è bisogno di preoccuparsi dell'hardware, il cluster può essere configurato in moltissimi modi diversi... e soprattutto, le tecnologie disponibili (come Kubernetes) consentono di scalare facilmente le capacità di calcolo in base al carico.
È sempre importante anche l'aspetto finanziario. Lo strumento di cui parleremo in questo articolo mira a facilitare la riduzione dei costi nell'uso dell'infrastruttura cloud con Kubernetes.
Introduzione
— una startup californiana fondata da ex Google, che crea soluzioni per il calcolo dei costi dell'infrastruttura nei servizi cloud (all'interno del cluster Kubernetes + risorse condivise), per la ricerca dei colli di bottiglia nelle configurazioni del cluster e per inviare le relative notifiche su Slack.
Abbiamo clienti con Kubernetes sia nei noti cloud AWS e GCP, sia in Azure, meno comune per la comunità Linux — in generale, su tutte le piattaforme supportate da Kubecost. Per alcuni di loro calcoliamo autonomamente i costi dei servizi intra-cluster (con un metodo simile a quello usato da Kubecost), monitoriamo le spese per l'infrastruttura e cerchiamo di ottimizzarle. Pertanto, è logico che siamo interessati alla possibilità di automatizzare tali compiti.
Il codice sorgente del modulo principale di Kubecost è aperto con licenza Open Source (Apache License 2.0). Può essere utilizzato liberamente e le funzionalità disponibili dovrebbero essere sufficienti per piccoli progetti. Tuttavia, il business è business: la restante parte del prodotto è chiusa e può essere utilizzata tramite , che implicano anche supporto commerciale. Inoltre, gli autori offrono una licenza gratuita per piccoli cluster (1 cluster con 10 nodi — al momento della scrittura di questo articolo, questo limite è stato ampliato a 20 nodi) oppure un periodo di prova con tutte le funzionalità per 1 mese.
Come è tutto strutturato
Quindi, la parte principale di Kubecost è un'applicazione , scritta in Go. Il chart Helm che descrive l'intero sistema è chiamato ed è sostanzialmente una raccolta di cost-model con Prometheus, Grafana e diversi dashboard.
In generale, cost-model ha una propria interfaccia web che mostra grafici e statistiche dettagliate sui costi in formato tabellare, oltre, naturalmente, a consigli per l'ottimizzazione delle spese. I dashboard presentati in Grafana sono una fase più precoce nello sviluppo di Kubecost e contengono in gran parte gli stessi dati del cost-model, integrandoli con le statistiche abituali riguardanti l'uso di CPU/ memoria/rete/spazio su disco nel cluster e nelle sue componenti.
Come funziona Kubecost?
- Il cost-model ottiene i prezzi di gestione tramite l'API dei fornitori cloud.
- Successivamente, a seconda del tipo di hardware del nodo e della regione, viene calcolato il costo per nodo.
- Sulla base del costo di funzionamento dei nodi, ogni pod finale riceve un costo orario per l'uso della CPU, il consumo di un gigabyte di memoria e il costo per un'ora di archiviazione di un gigabyte di dati, a seconda del nodo su cui è stato eseguito o della classe di archiviazione.
- In base al costo di funzionamento dei singoli pod, si calcola il pagamento per namespace, servizi, Deployment e StatefulSet.
- Per il calcolo delle statistiche vengono utilizzate metriche fornite da kube-state-metrics e node-exporter.
È importante considerare che Kubecost per impostazione predefinita tiene conto solo delle risorse disponibili in Kubernetes. Database esterni, server GitLab, archiviazioni S3 e altri servizi non presenti nel cluster (anche se si trovano nella stessa cloud) non sono visibili per lui. Tuttavia, per GCP e AWS è possibile aggiungere le chiavi dei propri account di servizio e calcolare tutto insieme.
Installazione
Per il funzionamento di Kubecost sono necessari:
- Kubernetes versione 1.8 o superiore;
- kube-state-metrics;
- Prometheus;
- node-exporter.
È andata così che nei nostri cluster tutte queste condizioni erano state soddisfatte in precedenza, quindi è stato sufficiente specificare il corretto endpoint per accedere a Prometheus. Tuttavia, il chart Helm ufficiale di kubecost include tutto il necessario per avviarsi anche su un cluster "nudo".
È possibile installare Kubecost in diversi modi:
- Il metodo standard di installazione, descritto in sul sito dello sviluppatore. È necessario aggiungere al repository Helm cost-analyzer, dopodiché installare il chart. Non resta che reindirizzare una porta e perfezionare le impostazioni manualmente (tramite kubectl) e/o con l'interfaccia web del cost-model.
Questo metodo non l'abbiamo nemmeno provato, poiché non utilizziamo configurazioni pronte di terze parti, tuttavia sembra essere una buona opzione per «provare per se stessi». Se hai già installato parte dei componenti del sistema o desideri una configurazione più dettagliata, è meglio considerare la seconda opzione.
- Utilizzare sostanzialmente , ma configurarlo e installarlo autonomamente in qualsiasi modo conveniente.
Come già menzionato, oltre a kubecost, questo chart contiene anche i chart di Grafana e Prometheus, che possono essere configurati secondo le proprie esigenze.
Il chart disponibile
values.yamlper cost-analyzer consente di configurare:- l'elenco dei componenti cost-analyzer da distribuire;
- il proprio endpoint per Prometheus (se già ne possiedi uno);
- domini e altre impostazioni degli ingress per cost-model e Grafana;
- annotazioni per i pod;
- la necessità di utilizzare storage persistenti e le loro dimensioni.
L'elenco completo delle opzioni di configurazione disponibili con descrizioni si trovano in .
Poiché kubecost nella sua versione base non riesce a limitare l'accesso, è necessario configurare immediatamente l'autenticazione di base per il pannello web.
- Installare solo il core del sistema — cost-model. Per questo è necessario avere Prometheus installato nel cluster e indicare il valore corrispondente del suo indirizzo nella variabile
prometheusEndpointper Helm. Dopo di che è necessario applicare nel cluster.Ancora una volta, sarà necessario aggiungere manualmente l'Ingress con autenticazione di base. Infine, sarà necessario aggiungere una sezione per la raccolta di metriche del cost-model in
extraScrapeConfigsnel file di configurazione di Prometheus:- job_name: kubecost honor_labels: true scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: http dns_sd_configs: - names: - type: 'A' port: 9003
Cosa otteniamo?
Con un'installazione completa, abbiamo a disposizione il pannello web di kubecost e Grafana con un set di dashboard.
Total cost, visualizzato nella schermata principale, mostra in realtà il costo stimato delle risorse per mese. Questo è un prezzo previsto che riflette il costo dell'utilizzo del cluster (mensile) al livello attuale di consumo delle risorse.
Questa metrica è più per l'analisi della spesa e la sua ottimizzazione. È poco conveniente guardare le spese totali per un ipotetico luglio in kubecost: per questo dovrai andare alla fatturazione.. Tuttavia, puoi vedere le spese suddivise per namespace, etichette, pod per 1/2/7/30/90 giorni, cosa che la fatturazione non ti mostrerà mai.

A proposito di etichette. È consigliabile entrare subito nelle impostazioni e impostare i nomi delle etichette che verranno utilizzate come categorie aggiuntive per raggruppare le spese:

Si possono assegnare a queste etichette qualsiasi nome — comodo, se hai già il tuo sistema di etichettatura.
Inoltre, lì è possibile cambiare l'indirizzo dell'API endpoint a cui si collega il modello di costo, configurare la percentuale di sconto in GCP e impostare i propri prezzi per le risorse e la valuta per le loro misurazioni (funzionalità che, per qualche motivo, non influisce sul costo totale).
Kubecost è in grado di mostrare diversi problemi nel cluster (e persino di inviare avvisi in caso di pericolo). Purtroppo, l'opzione non è configurabile, quindi — se hai ambienti per sviluppatori in uso, potresti costantemente osservare qualcosa di simile:

Uno strumento importante è Cluster Savings. Misura l'attività dei pod (consumo di risorse, compreso il traffico di rete), e calcola quanto denaro e su cosa è possibile risparmiare.
Può sembrare che i consigli per l'ottimizzazione siano piuttosto ovvi, tuttavia l'esperienza indica che ci sono sempre aspetti da esaminare. In particolare, viene monitorata l'attività di rete dei pod (Kubecost suggerisce di prestare attenzione a quelli inattivi), viene confrontato il consumo di memoria e CPU richiesto con quello reale, nonché l'utilizzo della CPU da parte dei nodi del cluster (suggerisce di unire diversi nodi in uno), il carico sui dischi e altri paio di dozzine di parametri.
Come in qualsiasi questione riguardante l'ottimizzazione, è necessario approcciare con cautela. Ad esempio, Cluster Savings suggerisce di rimuovere nodi, affermando che sia sicuro, ma non considera la presenza di pod distribuiti su di essi con selettori di nodi e taint che non ci sono sugli altri nodi. E, in effetti, anche gli autori del prodotto nella loro (tra l'altro, può risultare molto utile per chi è interessato al progetto) consigliano di non tuffarsi subito nell'ottimizzazione dei costi, ma di affrontare la questione con consapevolezza.
Conclusioni
Dopo aver utilizzato kubecost per un mese su un paio di progetti, possiamo concludere che è uno strumento interessante (oltre a essere facile da imparare e installare) per analizzare e ottimizzare le spese per i servizi dei fornitori di cloud utilizzati per i cluster Kubernetes. I calcoli risultano piuttosto precisi: nei nostri esperimenti corrispondevano a ciò che i fornitori richiedevano effettivamente.
Non sono mancati nemmeno gli svantaggi: ci sono bug non critici e le funzionalità in alcuni casi non soddisfano le esigenze specifiche di alcuni progetti. Tuttavia, se hai bisogno di capire rapidamente dove vanno a finire i soldi e cosa si può "tagliare" per ridurre stabilmente la bolletta dei servizi cloud del 5-30% (è esattamente ciò che è successo nel nostro caso), questo è un'ottima opzione.
P.S.
Leggi anche nel nostro blog:
- «»;
- «»;
- «».
Fonte: habr.com
