
Attualmente sempre più aziende migrano la loro infrastruttura da server fisici e virtuali propri al cloud. Questa soluzione è facilmente comprensibile: non c'è bisogno di preoccuparsi dell'hardware, il cluster può essere configurato in molti modi diversi… e la cosa più importante è che le tecnologie esistenti (come Kubernetes) consentono di scalare facilmente la potenza di calcolo in base al carico.
Anche l'aspetto finanziario è sempre importante. Lo strumento di cui parleremo in questo articolo è progettato per aiutare a ridurre i budget quando si utilizza l'infrastruttura cloud con Kubernetes.
Introduzione
è una startup californiana fondata da ex dipendenti di Google, che crea una soluzione per il calcolo dei costi dell'infrastruttura nei servizi cloud (all'interno del cluster Kubernetes + risorse condivise), per individuare colli di bottiglia nelle configurazioni del cluster e inviare notifiche pertinenti su Slack.
Abbiamo clienti che utilizzano Kubernetes sia su piattaforme cloud familiari come AWS e GCP, sia su Azure, meno comune per la comunità Linux. In genere, supportiamo tutte le piattaforme compatibili con Kubecost. Per alcuni di essi, calcoliamo autonomamente i costi per i servizi intra-cluster (utilizzando una metodologia simile a quella di Kubecost) e monitoriamo le spese per l'infrastruttura, cercando di ottimizzarle. È quindi naturale che ci abbia interessato l'opportunità di automatizzare tali compiti.
Il codice sorgente del modulo principale di Kubecost è aperto e distribuito sotto licenza Open Source (Apache License 2.0). Può essere utilizzato liberamente e le funzioni disponibili dovrebbero essere sufficienti per progetti di piccole dimensioni. Tuttavia, business is business: il resto del prodotto è a pagamento e può essere utilizzato tramite , che prevedono anche supporto commerciale. Inoltre, gli autori offrono una licenza gratuita per piccoli cluster (1 cluster con 10 nodi — mentre scriviamo, questo limite è stato ampliato a 20 nodi) o un periodo di prova con tutte le funzionalità per 1 mese.
Come funziona tutto
Quindi, la parte principale di Kubecost è un'applicazione , scritto in Go. Il chart Helm che descrive l'intero sistema è chiamato ed è fondamentalmente un'implementazione del cost-model con Prometheus, Grafana e diversi dashboard.
In generale, il cost-model ha una propria interfaccia web che mostra grafici e statistiche dettagliate sulle spese in formato tabellare, oltre a consigli per ottimizzare i costi. I dashboard presentati in Grafana rappresentano una fase precedente dello sviluppo di Kubecost e contengono in gran parte gli stessi dati del cost-model, integrandoli con statistiche familiari sull'uso della CPU/memoria/rete/spazio su disco nel cluster e nelle sue componenti.
Come funziona Kubecost?
- Il cost-model riceve i prezzi di servizio tramite l'API dei fornitori cloud.
- Successivamente, in base al tipo di hardware del nodo e alla regione, viene calcolato il costo per nodo.
- Sulla base dei costi di funzionamento dei nodi, ogni pod finale riceve il costo per ora di utilizzo della CPU, il costo per gigabyte di memoria e il costo per ora di archiviazione di un gigabyte di dati, a seconda del nodo su cui è stato eseguito o del tipo di storage.
- Sulla base del costo del lavoro dei singoli pod, si considerano pagamenti per nomi di spazio, servizi, Deployment e StatefulSet.
- Per il conteggio delle statistiche si utilizzano metriche fornite da kube-state-metrics e node-exporter.
È importante notare che Kubecost di default considera solo le risorse disponibili in Kubernetes. Database esterni, server GitLab, archivi S3 e altri servizi non presenti nel cluster (anche se nello stesso cloud) non sono visibili per lui. Tuttavia, per GCP e AWS è possibile aggiungere le chiavi dei propri service account e calcolare tutto insieme.
Installazione
Per il funzionamento di Kubecost sono richiesti:
- Kubernetes versione 1.8 e superiore;
- kube-state-metrics;
- Prometheus;
- node-exporter.
È successo che in i nostri cluster tutte queste condizioni fossero state soddisfatte in anticipo, quindi è stato sufficiente specificare il corretto endpoint per accedere a Prometheus. Tuttavia, il chart Helm ufficiale di kubecost contiene tutto il necessario per funzionare anche su un cluster 'pulito'.
È possibile installare Kubecost in diversi modi:
- Il metodo standard di installazione, descritto nella sul sito dello sviluppatore. È necessario aggiungere il repository cost-analyzer a Helm, dopodiché installare il chart.. Resta solo da inoltrare il port e finalizzare le impostazioni manualmente (tramite kubectl) e/o attraverso l'interfaccia web di cost-model.
Questo metodo non l'abbiamo nemmeno provato, poiché non utilizziamo configurazioni pronte di terze parti; tuttavia, sembra un buon modo per "semplicemente provare per se stessi". Se hai già installato alcuni componenti del sistema o desideri una configurazione più dettagliata, è meglio considerare il secondo modo.
- Usare sostanzialmente , ma configurarlo e installarlo autonomamente in qualsiasi modo conveniente.
Come già accennato, oltre a kubecost stesso, questo chart include i chart di Grafana e Prometheus, che possono anch'essi essere configurati secondo le proprie esigenze.
Il file
values.yamlper cost-analyzer consente di configurare:- l'elenco dei componenti di cost-analyzer da distribuire;
- il proprio endpoint per Prometheus (se già ne possiedi uno);
- domini e altre impostazioni per ingress di cost-model e Grafana;
- annotazioni per i pod;
- necessità di utilizzare storage persistenti e la loro dimensione.
Un elenco completo delle opzioni di configurazione disponibili con descrizione è presente nella .
Dato che kubecost nella versione base non gestisce l'accesso, sarà necessario configurare subito l'autenticazione di base per il pannello web.
- Installa solo il nucleo del sistema — cost-model. Per questo è necessario avere Prometheus installato nel cluster e specificare il suo indirizzo nella variabile
prometheusEndpointper Helm. Dopo di che, applica nel cluster.Ancora una volta, sarà necessario aggiungere manualmente Ingress con autenticazione di base. Infine, sarà necessario aggiungere una sezione per la raccolta delle 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, avremo a disposizione il pannello web di kubecost e Grafana con un set di dashboard.
Costo totale, visualizzato nella schermata principale, mostra effettivamente il costo stimato delle risorse per mese. Questo è il costo previsto che rappresenta il costo di utilizzo del cluster (mensile) al livello attuale di consumo delle risorse.
Questa metrica è più utile per analizzare e ottimizzare i costi. I costi totali per un ipotetico luglio in kubecost non sono molto facili da visualizzare: per questo bisognerà accedere alla fatturazione. Tuttavia, è possibile visualizzare i costi suddivisi per namespace, etichette e pod negli intervalli di 1/2/7/30/90 giorni, cosa che la fatturazione non mostrerà mai.

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

Puoi applicare qualunque etichetta — conveniente se hai già un tuo sistema di etichettatura.
Inoltre, in quelle impostazioni è possibile cambiare l'indirizzo dell'endpoint API a cui si connette il modello di costo, configurare l'ammontare dello sconto in GCP e impostare i propri prezzi per le risorse e la valuta per la loro misurazione (questa funzione, per qualche motivo, non influisce sul costo totale).
Kubecost è in grado di mostrare vari problemi nel cluster (e persino inviare alert in caso di pericolo). Sfortunatamente, l'opzione non è configurabile, quindi — se hai ambienti per sviluppatori e vengono utilizzati, potrai osservare costantemente qualcosa di simile:

Uno strumento importante — Risparmi del Cluster. Misura l'attività dei pod (consumo delle risorse, incluso quello di rete) e calcola quanto denaro si può risparmiare e su cosa.
Potrebbe sembrare che i consigli per l'ottimizzazione siano piuttosto ovvi, tuttavia l'esperienza indica che ci sono sempre aspetti da considerare. In particolare, viene monitorata l'attività di rete dei pod (Kubecost suggerisce di prestare attenzione a quelli inattivi), vengono confrontati il consumo di memoria richiesto e quello reale, così come la CPU utilizzata dai nodi del cluster (suggerendo di unire più nodi in uno), il carico sui dischi e altri parametri.
Come in qualsiasi questione relativa all'ottimizzazione, è necessario approcciarsi con cautela. Ad esempio, Cluster Savings suggerisce di rimuovere i nodi, affermando che è sicuro, ma non tiene conto della presenza di node-selector e taint nei pod distribuiti su di essi, assenti sugli altri nodi. E in generale, anche gli autori del prodotto nella loro (tra l'altro, potrebbe rivelarsi molto utile per chi è interessato al tema del progetto) si consiglia di non tuffarsi a capofitto nell'ottimizzazione dei costi, ma di affrontare la questione in modo ponderato.
Risultati
Dopo aver utilizzato kubecost per un mese su un paio di progetti, possiamo concludere che si tratta di uno strumento interessante (e anche facile da imparare e installare) per analizzare e ottimizzare i costi dei servizi dei provider cloud utilizzati per i cluster Kubernetes. I calcoli sono piuttosto accurati: nelle nostre prove, corrispondevano esattamente a quanto richiedevano i provider nella realtà.
Non sono mancati anche dei contro: ci sono bug non critici, le funzionalità a volte non coprono esigenze specifiche di alcuni progetti. Tuttavia, se è necessario capire rapidamente dove vanno a finire i soldi e cosa si può "tagliare" per ridurre stabilmente la bolletta dei servizi cloud del 5-30% (ed è stato esattamente così nel nostro caso), questo è un'ottima soluzione.
P.S.
Leggete anche nel nostro blog:
- «»;
- «»;
- «».
Fonte: habr.com
