
Sve više kompanija preseljava svoju infrastrukturu s fizičkih servera i vlastitih virtualnih mašina u oblake. Ova odluka je lako objašnjiva: nema potrebe brinuti o hardveru, klaster se lako konfigurira na mnogo različitih načina... a što je najvažnije - postojeće tehnologije (poput Kubernetes-a) omogućuju jednostavno skaliranje računalnih resursa ovisno o opterećenju.
Financijski aspekt također je uvijek važan. Alat o kojem će se govoriti u ovom članku ima za cilj smanjenje budžeta prilikom korištenja oblaka s Kubernetes-om.
Uvod
— kalifornijski start-up osnovan od strane bivših zaposlenika Google-a, koji stvara rješenje za praćenje troškova infrastrukture u oblačnim servisima (unutar Kubernetes klastera + zajednički resursi), pronalaženje uskih grla u postavkama klastera i slanje odgovarajućih obavijesti u Slack.
Imamo klijente s Kubernetes-om kako u poznatim oblacima kao što su AWS i GCP, tako i rjeđe u Linux zajednici Azure — u suštini na svim platformama koje podržava Kubecost. Za neke od njih troškove unutar klaster servisâ smatramo sami (po metodologiji sličnoj onoj koju koristi Kubecost), kao i pratimo troškove infrastrukture i pokušavamo ih optimizirati. Stoga je logično da nas je zanimala mogućnost automatizacije takvih zadataka.
Izvorni kod glavnog modula Kubecost otvoren je pod uvjetima Open Source licence (Apache License 2.0). Može se slobodno koristiti, a dostupne funkcije trebale bi biti dovoljne za manje projekte. Međutim, biznis je biznis: ostatak proizvoda je zatvoren i može se iskoristiti uz , koje također podrazumijevaju komercijalnu podršku. Osim toga, autori nude besplatnu licencu za male klastere (1 klaster s 10 čvorova — dok je ovaj članak napisan, taj limit se proširio na 20 čvorova) ili probni period s punim mogućnostima na 1 mjesec.
Kako je sve organizirano
Dakle, osnovni dio Kubecost-a je aplikacija , napisana u Go-u. Helm chart koji opisuje cijeli sustav zove se i u suštini predstavlja sastav cost-model-a s Prometheus-om, Grafana-om i nekoliko dashboard-a.
Općenito, cost-model ima svoj web sučelje koje prikazuje grafove i detaljnu statistiku troškova u tabličnom obliku, kao i, naravno, savjete za optimizaciju troškova. Prikazane Grafana nadzorne ploče predstavljaju raniju fazu razvoja Kubecost i uvelike sadrže iste podatke kao i cost-model, nadopunjujući ih uobičajenom statistikama o potrošnji CPU-a/ memorije/ mreže/ diskovnog prostora u klasteru i njegovim komponentama.
Kako funkcionira Kubecost?
- Cost-model putem API-ja cloud providera dobiva cijene za uslugu.
- Nakon toga, ovisno o vrsti hardvera node-a i regiji, izračunava se cijena po node-ima.
- Na temelju troškova rada node-ova svaki završni pod dobiva trošak po satu korištenja procesora, potrošnje gigabajta memorije i trošak po satu skladištenja gigabajta podataka – ovisno o node-u na kojem je radio ili klasi spremišta.
- Oslanjajući se na troškove rada pojedinačnih pod-ova, izračunava se plaćanje po prostorima imena, servisima, Deployment-ima i StatefulSet-ima.
- Za proračun statistike koriste se metrike koje pružaju kube-state-metrics i node-exporter.
Važno je uzeti u obzir da Kubecost po zadanim postavkama računa samo resurse dostupne u Kubernetesu. Vanjske baze podataka, GitLab serveri, S3 spremišta i druge usluge koje nisu prisutne u klasteru (čak i ako su u istoj oblačnoj usluzi) nisu mu vidljive. Ipak, za GCP i AWS moguće je dodati ključeve svojih servisnih računa i izračunati sve zajedno.
Instalacija
Za funkcioniranje Kubecost-a potrebni su:
- Kubernetes verzije 1.8 i novije;
- kube-state-metrics;
- Prometheus;
- node-exporter.
Postavilo se tako da su u našim klasterima svi ovi uvjeti unaprijed ispunjeni, pa je bilo dovoljno samo navesti pravi endpoint za pristup Prometheusu. Ipak, službeni Helm chart kubecost sadrži sve potrebno za pokretanje i na 'golem' klasteru.
Kubecost se može instalirati na nekoliko načina:
- Standardni način instalacije, opisan u na web stranici programera. Potrebno je dodati u Helm repozitorij cost-analyzer, nakon čega se instalira chart. Ostaje samo proslijediti port i dovršiti postavke do željenog stanja ručno (putem kubectl) i/ili pomoću web sučelja cost-model.
Ovu metodu nismo čak ni testirali jer ne koristimo gotove konfiguracije trećih strana, ali izgleda kao dobra opcija za „samo probati za sebe“. Ako već imate instalirane neke komponente sistema ili želite finiju konfiguraciju, bolje je razmotriti drugu opciju.
- Koristiti u suštini , ali ga konfigurirati i instalirati sami na bilo koji prikladan način.
Kao što je već spomenuto, pored samog kubecost-a, ovaj chart sadrži chartove Grafana i Prometheus, koje također možete prilagoditi po svojoj želji.
Dostupno u chartu
values.yamlza cost-analyzer omogućava konfiguraciju:- popis komponenti cost-analyzer koje treba implementirati;
- vaš endpoint za Prometheus (ako već imate jedan);
- domene i druge postavke ingress-a za cost-model i Grafana;
- annotations za pod-ove;
- potrebu za korištenjem trajnih skladišta i njihovu veličinu.
Potpun popis dostupnih opcija konfiguracije s opisom nalazi se u .
Budući da kubecost u osnovnoj verziji ne može ograničiti pristup, potrebno je odmah podesiti basic-auth za web panel.
- Instalirati samo jezgro sistema — cost-model. Za to je potrebno imati instaliran Prometheus u klasteru i navesti odgovarajuću adresu u varijabli
prometheusEndpointza Helm. Nakon toga, primijeniti u klasteru.Ponovno, potrebno je ručno dodati Ingress s basic-auth. I na kraju, potrebno je dodati odjeljak za prikupljanje metrika cost-modela u
extraScrapeConfigsu Prometheus konfiguraciji:- 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
Što dobijamo?
Pri punoj instalaciji, na raspolaganju imamo web panel kubecost i Grafana s nizom dashboard-a.
Ukupni trošak, prikazan na glavnoj ekranu, zapravo pokazuje obračunatu cijenu resursa za mjesec. To je predviđena cijena koja prikazuje troškove korištenja klastera (mjesečno) pri trenutnoj razini potrošnje resursa.
Ova metrike je više za analizu troškova i njihovu optimizaciju. Ukupni troškovi za apstraktni srpanj u kubecostu nisu baš laki za gledati: za to ćete morati ići u billing. No, možete vidjeti troškove razvrstane po prostorima imena, oznakama, podovima za 1/2/7/30/90 dana, nešto što vam billing nikada neće pokazati.

Što se tiče oznaka. Odmah trebate ući u postavke i postaviti nazive oznaka koje će se koristiti kao dodatne kategorije za grupiranje troškova:

Na njih možete dodati bilo kakve oznake — praktično je ako već imate svoj sustav označavanja.
Tamo možete promijeniti i adresu API endpointa na koju se povezujete s cost-modelom, postaviti veličinu popusta u GCP i odrediti vlastite cijene resursa i valute za mjerenje (ova opcija očito ne utječe na ukupne troškove).
Kubecost može prikazivati različite probleme u klasteru (i čak upozoravati u slučaju opasnosti). Nažalost, opcija nije podesiva, pa ako imate okruženja za developere i ona se koriste, možete kontinuirano promatrati nešto slično:

Važan alat — Cluster Savings. Mjeri aktivnost podova (potrošnja resursa, uključujući i mrežne), kao i izračunava koliko novca i na čemu se može uštedjeti.
Može se činiti da su savjeti za optimizaciju prilično očiti, međutim iskustvo pokazuje da se uvijek ima čemu posvetiti pažnju. Konkretno, prati se mrežna aktivnost podova (Kubecost predlaže da obratite pažnju na neaktivne), uspoređuje se zatražena i stvarna potrošnja memorije i CPU-a, kao i CPU koji koriste čvorovi klastera (predlaže spajanje nekoliko čvorova u jedan), opterećenje na diskovima i još nekoliko desetaka parametara.
Kao i u bilo kojem pitanju vezanom uz optimizaciju, optimizacija resursa na temelju podataka Kubecost treba pristupati s oprezom. Na primjer, Cluster Savings predlaže brisanje čvorova, tvrdeći da je to sigurno, no ne uzima u obzir prisutnost node-selector-a i taint-ova na raspoređenim podovima koji nisu prisutni na drugim čvorovima. Uostalom, čak i autori proizvoda u svom (usput, može se pokazati vrlo korisnim onima koji se zanimaju za temu projekta) preporučuju da ne skačete s glavom u optimizaciju troškova, već da se pitanju pristupi promišljeno.
Zaključci
Nakon korištenja kubecost-a tijekom mjesec dana na nekoliko projekata, možemo zaključiti da je to zanimljiv (a također i lako savladiv i instalabilan) alat za analizu i optimizaciju troškova usluga pružatelja oblaka koji se koriste za Kubernetes klastere. Izračuni su prilično točni: u našim eksperimentima, podudarao su se s onim što su pružatelji stvarno zahtijevali.
Nisu nedostajale ni mane: postoje neki manji bugovi, a funkcionalnosti ponekad ne pokrivaju specifične potrebe određenih projekata. Ipak, ako trebate brzo razumjeti kamo novac odlazi i što se može "rezati" kako biste stabilno smanjili račun za oblačne usluge za 5-30% (kako je to bilo u našem slučaju), ovo je odlična opcija.
P.S.
Pročitajte i na našem blogu:
- «»;
- «»;
- «».
Izvor: habr.com
