Revizuirea Kubecost pentru economisirea banilor pe Kubernetes în nori

Revizuirea Kubecost pentru economisirea banilor pe Kubernetes în nori

În prezent, tot mai multe companii își transferă infrastructura de la serverele hardware și propriile lor mașini virtuale în cloud. Această soluție este ușor de explicat: nu este nevoie să vă faceți griji cu privire la hardware, clusterul este ușor de configurat în multe moduri diferite... și, cel mai important, tehnologiile existente (cum ar fi Kubernetes) fac posibilă pur și simplu scalarea puterii de calcul în funcție de sarcină. .

Aspectul financiar este întotdeauna important. Instrumentul discutat în acest articol este conceput pentru a ajuta la reducerea bugetelor atunci când utilizați infrastructura cloud cu Kubernetes.

Introducere

Kubecost este un startup californian de la Google, creând o soluție pentru calcularea costurilor de infrastructură în serviciile cloud (în cadrul unui cluster Kubernetes + resurse partajate), căutarea blocajelor în setările clusterului și trimiterea notificărilor corespunzătoare către Slack.

Avem clienți cu Kubernetes atât în ​​norii familiari AWS și GCP, cât și, mai rar pentru comunitatea Linux, Azure - în general, pe toate platformele suportate de Kubecost. Pentru unele dintre ele, noi înșine calculăm costurile serviciilor intra-cluster (folosind o metodă similară cu cea folosită de Kubecost), și monitorizăm costurile de infrastructură și încercăm să le optimizăm. Prin urmare, este logic că ne-a interesat posibilitatea automatizării unor astfel de sarcini.

Codul sursă al modulului principal Kubecost este deschis în condițiile licenței Open Source (Apache License 2.0). Poate fi folosit în mod liber, iar caracteristicile disponibile ar trebui să fie suficiente pentru proiecte mici. Cu toate acestea, afacerile sunt afaceri: restul produsului este închis, poate fi folosit de abonamente plătite, care implică și sprijin comercial. În plus, autorii oferă o licență gratuită pentru clustere mici (1 cluster cu 10 noduri - în timpul scrierii acestui articol, această limită s-a extins la 20 de noduri) sau o perioadă de probă cu capabilități complete timp de 1 lună.

Cum funcționează totul

Deci, partea principală a Kubecost este aplicația model-cost, scris în Go. Este numită o diagramă Helm care descrie întregul sistem analizor de costuri iar la baza sa este un ansamblu dintr-un model de cost cu Prometheus, Grafana și mai multe tablouri de bord.

În general, cost-model are propria sa interfață web, care prezintă grafice și statistici detaliate despre costuri sub formă de tabel, precum și, desigur, sfaturi pentru optimizarea costurilor. Tablourile de bord prezentate în Grafana reprezintă o etapă anterioară în dezvoltarea Kubecost și conțin aproape aceleași date ca și modelul de cost, completându-le cu statisticile obișnuite privind consumul de CPU/memorie/rețea/spațiu pe disc în cluster și componentele acestuia. .

Cum funcționează Kubecost?

  • Cost-model primește prețuri pentru servicii prin API-ul furnizorilor de cloud.
  • În plus, în funcție de tipul de fier al nodului și de regiune, se calculează costul per nod.
  • Pe baza costului de rulare a nodurilor, fiecare pod de frunze primește un cost pe oră de utilizare a procesorului, pe gigaoctet de memorie consumat și pe oră pe gigaoctet de date stocate - în funcție de nodul pe care rula sau de clasa de stocare.
  • Pe baza costului de operare a podurilor individuale, plata este calculată pentru spații de nume, servicii, implementări, statefulSets.
  • Statisticile sunt calculate folosind valorile furnizate de kube-state-metrics și node-exporter.

Este important să luăm în considerare faptul că Kubecost în mod implicit contează doar resursele disponibile în Kubernetes. Bazele de date externe, serverele GitLab, stocările S3 și alte servicii care nu se află în cluster (chiar dacă sunt situate în același cloud) nu sunt vizibile pentru acesta. Deși pentru GCP și AWS puteți adăuga cheile conturilor de serviciu și puteți calcula totul împreună.

Instalare

Kubecost necesită:

  • Kubernetes versiunea 1.8 și superioară;
  • metrica-state-kube;
  • Prometeu;
  • nod-exportator.

S-a întâmplat că în clusterele noastre toate aceste condiții au fost îndeplinite în prealabil, așa că s-a dovedit că a fost suficient să specificați punctul final corect pentru accesul la Prometheus. Cu toate acestea, diagrama oficială Kubecost Helm conține tot ce aveți nevoie pentru a rula pe un cluster gol.

Există mai multe moduri de a instala Kubecost:

  1. Metoda standard de instalare descrisă în instrucțiuni pe site-ul web al dezvoltatorului. Obligatoriu adăugați depozitul analizorului de costuri la Helm și apoi instalați diagrama. Tot ce rămâne este să vă redirecționați portul și să ajustați setările la starea dorită manual (prin kubectl) și/sau folosind interfața web model cost.

    Nici măcar nu am încercat această metodă, deoarece nu folosim configurații gata făcute de la terți, dar pare o opțiune bună „încercați-o singur”. Dacă aveți deja instalate unele dintre componentele sistemului sau doriți o reglare mai fină, este mai bine să luați în considerare a doua cale.

  2. Utilizați în esență aceeași diagramă, dar configurați-l și instalați-l singur în orice mod convenabil.

    După cum am menționat deja, pe lângă kubecost în sine, această diagramă conține grafice Grafana și Prometheus, care pot fi, de asemenea, personalizate după cum doriți.

    Disponibil pe diagramă values.yaml pentru analizatorul de costuri vă permite să configurați:

    • o listă de componente ale analizorului de costuri care trebuie implementate;
    • punctul final pentru Prometheus (dacă aveți deja unul);
    • domenii și alte setări de intrare pentru modelul de cost și Grafana;
    • adnotări pentru păstăi;
    • necesitatea folosirii depozitării permanente și dimensiunea acesteia.

    O listă completă a opțiunilor de configurare disponibile cu descrieri este disponibilă în documentație.

    Deoarece kubecost în versiunea sa de bază nu poate restricționa accesul, va trebui să configurați imediat autentificarea de bază pentru panoul web.

  3. Instalare doar nucleul sistemului - model cost. Pentru a face acest lucru, trebuie să aveți Prometheus instalat în cluster și să specificați valoarea corespunzătoare a adresei sale în variabilă prometheusEndpoint pentru Helm. După aceea - aplicați set de configurații YAML în cluster.

    Din nou, va trebui să adăugați manual Ingress cu basic-auth. În cele din urmă, va trebui să adăugați o secțiune pentru colectarea valorilor modelului de cost extraScrapeConfigs în configurația Prometheus:

    - 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

Ce primim?

Cu o instalare completă, avem la dispoziție panoul web kubecost și Grafana cu un set de tablouri de bord.

Cost total, afișat pe ecranul principal, arată efectiv costul estimat al resurselor pentru luna. Acest previzibil prețul care reflectă costul utilizării clusterului (pe lună) la nivelul actual al consumului de resurse.

Această măsurătoare este mai mult pentru analizarea cheltuielilor și optimizarea acestora. Nu este foarte convenabil să te uiți la costurile totale pentru luna iulie abstract în kubecost: va trebui să faci asta mergi la facturare. Dar puteți vedea costurile defalcate pe spații de nume, etichete, poduri pentru 1/2/7/30/90 de zile, pe care facturarea nu vi le va afișa niciodată.

Revizuirea Kubecost pentru economisirea banilor pe Kubernetes în nori

Vorbind despre etichete. Ar trebui să mergeți imediat la setări și să setați numele etichetelor care vor fi folosite ca categorii suplimentare pentru gruparea costurilor:

Revizuirea Kubecost pentru economisirea banilor pe Kubernetes în nori

Puteți agăța orice etichetă pe ele - convenabil dacă aveți deja propriul sistem de etichetare.

De asemenea, acolo puteți modifica adresa punctului final API la care se conectează modelul de cost, puteți ajusta dimensiunea reducerii în GCP și puteți stabili propriile prețuri pentru resurse și monedă pentru măsurarea acestora (din anumite motive, caracteristica nu afectează costul total).

Kubecost poate afișa diverse probleme în cluster (și chiar alertă în caz de pericol). Din păcate, opțiunea nu este configurabilă și, prin urmare, dacă aveți medii pentru dezvoltatori și le utilizați, veți vedea în mod constant ceva de genul:

Revizuirea Kubecost pentru economisirea banilor pe Kubernetes în nori

Un instrument important - Economii de grup. Măsoară activitatea pod-urilor (consumul de resurse, inclusiv cele de rețea) și, de asemenea, calculează câți bani și pe ce puteți economisi.

Poate părea că sfaturile de optimizare sunt destul de evidente, dar experiența sugerează că mai este ceva de urmărit. În special, activitatea de rețea a pod-urilor este monitorizată (Kubecost sugerează să se acorde atenție celor inactive), se compară memoria solicitată și reală și consumul CPU, precum și CPU-ul utilizat de nodurile cluster (sugerează colapsul mai multor noduri într-unul singur), disc. încărcătură și încă câteva zeci de parametri.

Ca și în cazul oricărei probleme de optimizare, optimizarea resurselor pe baza datelor Kubecost necesită: tratați cu precauție. De exemplu, Cluster Savings sugerează ștergerea nodurilor, susținând că este sigură, dar nu ia în considerare prezența selectoarelor de noduri și a impurităților în podurile desfășurate pe acestea, care nu sunt disponibile pe alte noduri. Și, în general, chiar și autorii produsului în lor articol recent (apropo, poate fi foarte util pentru cei care sunt interesați de tema proiectului) se recomandă să nu vă grăbiți în optimizarea costurilor, ci să abordați problema cu atenție.

Rezultatele

După ce am folosit kubecost timp de o lună pe câteva proiecte, putem concluziona că este un instrument interesant (și, de asemenea, ușor de învățat și instalat) pentru analiza și optimizarea costurilor pentru serviciile furnizorilor de cloud folosiți pentru clusterele Kubernetes. Calculele se dovedesc a fi foarte precise: în experimentele noastre au coincis cu ceea ce au cerut de fapt furnizorii.

Există și câteva minusuri: există bug-uri necritice, iar pe alocuri funcționalitatea nu acoperă nevoile specifice unor proiecte. Cu toate acestea, dacă trebuie să înțelegeți rapid unde se duc banii și ce poate fi „tăiat” pentru a reduce constant factura pentru serviciile cloud cu 5-30% (așa s-a întâmplat în cazul nostru), aceasta este o opțiune excelentă. .

PS

Citește și pe blogul nostru:

Sursa: www.habr.com

Adauga un comentariu