Recensione Kubecost per risparmiare su Kubernetes nei cloud

Recensione Kubecost per risparmiare su Kubernetes nei cloud

Attualmente sempre più aziende trasferiscono la propria infrastruttura dai server hardware e dalle proprie macchine virtuali al cloud. Questa soluzione è facile da spiegare: non è necessario preoccuparsi dell'hardware, il cluster si configura facilmente in molti modi diversi... e, cosa più importante, le tecnologie esistenti (come Kubernetes) consentono semplicemente di scalare la potenza di calcolo a seconda del carico .

L’aspetto finanziario è sempre importante. Lo strumento discusso in questo articolo è progettato per aiutare a ridurre i budget quando si utilizza l'infrastruttura cloud con Kubernetes.

Introduzione

Kubecost è una startup californiana di Google, che crea una soluzione per calcolare i costi dell'infrastruttura nei servizi cloud (all'interno di un cluster Kubernetes + risorse condivise), ricercando colli di bottiglia nelle impostazioni del cluster e inviando notifiche appropriate a Slack.

Abbiamo clienti con Kubernetes sia nei familiari cloud AWS e GCP e, più raramente per la comunità Linux, Azure - in generale, su tutte le piattaforme supportate da Kubecost. Per alcuni di essi calcoliamo noi stessi i costi dei servizi intra-cluster (utilizzando un metodo simile a quello utilizzato da Kubecost), monitoriamo anche i costi delle infrastrutture e cerchiamo di ottimizzarli. Pertanto è logico che fossimo interessati alla possibilità di automatizzare tali compiti.

Il codice sorgente del modulo principale Kubecost è aperto secondo i termini della licenza Open Source (Apache License 2.0). Può essere utilizzato liberamente e le funzionalità disponibili dovrebbero essere sufficienti per piccoli progetti. Tuttavia, gli affari sono affari: il resto del prodotto è chiuso, può essere utilizzato abbonamenti a pagamento, che implicano anche un sostegno commerciale. Inoltre, gli autori offrono una licenza gratuita per piccoli cluster (1 cluster con 10 nodi - durante la stesura di questo articolo, questo limite è stato ampliato a 20 nodi) o un periodo di prova con funzionalità complete per 1 mese.

Come funziona tutto

Quindi, la parte principale di Kubecost è l'applicazione modello di costo, scritto in Go. Viene chiamato un grafico Helm che descrive l'intero sistema analizzatore dei costi e al centro c'è un assemblaggio da un modello di costo con Prometheus, Grafana e diversi dashboard.

In generale, il modello di costo ha una propria interfaccia web, che mostra grafici e statistiche dettagliate sui costi in forma tabellare, oltre, ovviamente, suggerimenti per ottimizzare i costi. I dashboard presentati in Grafana rappresentano una fase precedente nello sviluppo di Kubecost e contengono più o meno gli stessi dati del modello di costo, integrandoli con le consuete statistiche sul consumo di CPU/memoria/rete/spazio su disco nel cluster e nei suoi componenti .

Come funziona Kubecost?

  • Il modello di costo riceve i prezzi per i servizi tramite l'API dei fornitori di servizi cloud.
  • Inoltre, a seconda del tipo di ferro del nodo e della regione, viene calcolato il costo per nodo.
  • In base al costo di esecuzione dei nodi, ogni pod foglia ottiene un costo per ora di utilizzo della CPU, per gigabyte di memoria consumata e per ora per gigabyte di dati archiviati, a seconda del nodo su cui era in esecuzione o della classe di archiviazione.
  • In base al costo di gestione dei singoli pod, il pagamento viene calcolato per spazi dei nomi, servizi, distribuzioni e StatefulSet.
  • Le statistiche vengono calcolate utilizzando le metriche fornite da kube-state-metrics e node-exporter.

È importante considerare che Kubecost per impostazione predefinita conta solo le risorse disponibili in Kubernetes. I database esterni, i server GitLab, gli storage S3 e altri servizi che non si trovano nel cluster (anche se situati nello stesso cloud) non gli sono visibili. Sebbene per GCP e AWS puoi aggiungere le chiavi dei tuoi account di servizio e calcolare tutto insieme.

Installazione

Kubecost richiede:

  • Kubernetes versione 1.8 e successive;
  • metriche-kube-state;
  • Prometeo;
  • esportatore di nodi.

È successo che nei nostri cluster tutte queste condizioni fossero soddisfatte in anticipo, quindi si è scoperto che era sufficiente specificare semplicemente l'endpoint corretto per l'accesso a Prometheus. Tuttavia, il grafico Helm ufficiale di kubecost contiene tutto il necessario per l'esecuzione su un cluster semplice.

Esistono diversi modi per installare Kubecost:

  1. Metodo di installazione standard descritto in istruzione sul sito Web dello sviluppatore. Obbligatorio aggiungi il repository dell'analizzatore dei costi a Helm, quindi installa il grafico. Non resta che inoltrare la porta e regolare manualmente le impostazioni sullo stato desiderato (tramite kubectl) e/o utilizzando l'interfaccia web del modello di costo.

    Non abbiamo nemmeno provato questo metodo, poiché non utilizziamo configurazioni già pronte di terze parti, ma sembra una buona opzione "provalo tu stesso". Se hai già installato alcuni componenti del sistema o desideri una messa a punto maggiore, è meglio considerare la seconda strada.

  2. Utilizzare essenzialmente lo stesso grafico, ma configuralo e installalo tu stesso in qualsiasi modo conveniente.

    Come già accennato, oltre al kubecost stesso, questo grafico contiene i grafici Grafana e Prometheus, anch'essi personalizzabili a piacimento.

    Disponibile in carta values.yaml per l'analizzatore di costi consente di configurare:

    • un elenco dei componenti dell'analizzatore di costi che devono essere implementati;
    • il tuo endpoint per Prometheus (se ne hai già uno);
    • domini e altre impostazioni di ingresso per modello di costo e Grafana;
    • annotazioni per i pod;
    • la necessità di utilizzare l'archiviazione permanente e la sua dimensione.

    Un elenco completo delle opzioni di configurazione disponibili con le descrizioni è disponibile in documentazione.

    Poiché kubecost nella sua versione base non può limitare l'accesso, dovrai configurare immediatamente l'autenticazione di base per il pannello web.

  3. stabilire solo il nucleo del sistema - modello di costo. Per fare ciò è necessario che Prometheus sia installato nel cluster e specificare il valore corrispondente del suo indirizzo nella variabile prometheusEndpoint per Elmo. Dopodiché, fai domanda insieme di configurazioni YAML nel grappolo.

    Anche in questo caso, dovrai aggiungere manualmente Ingress con autenticazione di base. Infine, dovrai aggiungere una sezione per raccogliere le metriche del modello di costo extraScrapeConfigs nella configurazione di Prometeo:

    - job_name: kubecost
      honor_labels: true
      scrape_interval: 1m
      scrape_timeout: 10s
      metrics_path: /metrics
      scheme: http
      dns_sd_configs:
      - names:
        - <адрес вашего сервиса kubecost>
        type: 'A'
        port: 9003

Cosa otteniamo

Con un'installazione completa, abbiamo a nostra disposizione il pannello web kubecost e Grafana con una serie di dashboard.

Costo totale, visualizzato nella schermata principale, mostra effettivamente il costo stimato delle risorse per il mese. Questo prevedibile prezzo che riflette il costo di utilizzo del cluster (al mese) al livello attuale di consumo delle risorse.

Questa metrica è più utile per analizzare le spese e ottimizzarle. Non è molto conveniente guardare i costi totali per l'abstract di luglio in kubecost: dovrai farlo vai alla fatturazione. Ma puoi visualizzare i costi suddivisi per spazi dei nomi, etichette e pod per 1/2/7/30/90 giorni, che la fatturazione non ti mostrerà mai.

Recensione Kubecost per risparmiare su Kubernetes nei cloud

Parlando di etichette. Dovresti immediatamente andare alle impostazioni e impostare i nomi delle etichette che verranno utilizzate come categorie aggiuntive per raggruppare i costi:

Recensione Kubecost per risparmiare su Kubernetes nei cloud

Puoi appendere qualsiasi etichetta su di essi: è comodo se disponi già di un tuo sistema di etichettatura.

Inoltre, puoi modificare l'indirizzo dell'endpoint API a cui si connette il modello di costo, regolare l'entità dello sconto in GCP e impostare i tuoi prezzi per le risorse e la valuta per la loro misurazione (per qualche motivo la funzionalità non influisce sul costo totale).

Kubecost può mostrarne vari problemi nel cluster (e anche allertare in caso di pericolo). Sfortunatamente l'opzione non è configurabile e quindi, se disponi di ambienti per sviluppatori e li utilizzi, vedrai costantemente qualcosa di simile a questo:

Recensione Kubecost per risparmiare su Kubernetes nei cloud

Uno strumento importante - Risparmio di cluster. Misura l'attività dei pod (consumo di risorse, comprese quelle di rete) e calcola anche quanti soldi e su cosa puoi risparmiare.

Può sembrare che i suggerimenti per l’ottimizzazione siano abbastanza ovvi, ma l’esperienza suggerisce che c’è ancora qualcosa a cui prestare attenzione. 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 ed effettivo, nonché la CPU utilizzata dai nodi del cluster (suggerisce di comprimere più nodi in uno), disco load e un paio di dozzine di parametri in più.

Come per qualsiasi problema di ottimizzazione, l'ottimizzazione delle risorse basata sui dati Kubecost richiede: trattare con cautela. Ad esempio, Cluster Savings suggerisce di eliminare i nodi, sostenendo che è sicuro, ma non tiene conto della presenza di selettori di nodo e contaminazioni nei pod distribuiti su di essi che non sono disponibili su altri nodi. E in generale, anche gli autori del prodotto nei loro articolo recente (a proposito, può essere molto utile per chi è interessato all'argomento del progetto) si consiglia di non precipitarsi a capofitto nell'ottimizzazione dei costi, ma di affrontare la questione in modo ponderato.

Risultati di

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 apprendere e installare) per analizzare e ottimizzare i costi per i servizi dei cloud provider utilizzati per i cluster Kubernetes. I calcoli si sono rivelati molto accurati: nei nostri esperimenti coincidevano con quanto effettivamente richiesto dai fornitori.

Ci sono anche alcuni aspetti negativi: sono presenti bug non critici e in alcuni punti la funzionalità non copre le esigenze specifiche di alcuni progetti. Tuttavia, se hai bisogno di capire rapidamente dove vanno i soldi e cosa può essere "tagliato" per ridurre costantemente la bolletta dei servizi cloud del 5-30% (questo è quello che è successo nel nostro caso), questa è un'ottima opzione .

PS

Leggi anche sul nostro blog:

Fonte: habr.com

Aggiungi un commento