Přehled Kubecost pro úsporu nákladů na Kubernetes v cloudech

Přehled Kubecost pro úsporu nákladů na Kubernetes v cloudech

V současné době stále více společností převádí svou infrastrukturu z fyzických serverů a vlastních virtuálních strojů do cloudů. Toto řešení je snadné vysvětlit: není třeba se starat o hardware, cluster je snadno konfigurovatelný mnoha různými způsoby... a co je nejdůležitější — dostupné technologie (jako Kubernetes) umožňují snadno škálovat výpočetní výkon podle zatížení.

Ale vždy je důležitý také finanční aspekt. Nástroj, o kterém bude tato zpráva, má za cíl pomoci snížit rozpočty při používání cloudové infrastruktury s Kubernetes.

Úvod

Kubecost — kalifornský startup od bývalých zaměstnanců Google, který vyvíjí řešení pro sledování nákladů na infrastrukturu v cloudových službách (uvnitř clusteru Kubernetes + sdílené zdroje), hledání úzkých míst v nastavení clusteru a zasílání příslušných oznámení na Slack.

Máme klienty s Kubernetes jak v běžných cloudech AWS a GCP, tak i v méně běžném prostředí pro komunitu Linux, Azure — zkrátka na všech platformách podporovaných Kubecost. Pro některé z nich sledujeme náklady na vnitroclustrové služby samostatně (podle metodiky podobné té, kterou používá Kubecost) a také monitorujeme náklady na infrastrukturu a snažíme se je optimalizovat. Je tedy logické, že nás zaujala možnost automatizovat tyto úkoly.

Zdrojový kód základního modulu Kubecost je otevřený podle podmínek Open Source licence (Apache License 2.0). Může být používán volně a dostupné funkce by měly být dostatečné pro malé projekty. Nicméně biznis je biznis: zbytek produktu je uzavřený, k němuž je možné přistupovat prostřednictvím placených předplatných, které také zahrnují komerční podporu. Kromě toho autoři nabízejí bezplatnou licenci pro malé clustery (1 cluster s 10 uzly — v době psaní článku se tento limit zvýšil na 20 uzlů) nebo zkušební období s plnými funkcemi na 1 měsíc.

Jak to všechno funguje

Takže hlavní část Kubecost je aplikace cost-model, napsaná v Go. Helm chart, který popisuje celý systém, se nazývá cost-analyzer a v podstatě představuje sestavu z cost-model s Prometheus, Grafana a několika dashboardy.

Obecně má cost-model svůj webový rozhraní, které zobrazuje grafy a podrobné statistiky o nákladech v tabulkové podobě, stejně jako samozřejmě rady pro optimalizaci výdajů. Pomocí Grafana dashboardů jsou prezentovány dřívější fáze vývoje Kubecost a obsahují do značné míry ta samá data, co cost-model, doplněná o obvyklou statistiku spotřeby CPU/paměti/sítě/diskového prostoru v klastru a jeho komponentách.

Jak funguje Kubecost?

  • Cost-model získává ceny za služby prostřednictvím API cloudových poskytovatelů.
  • Dále, v závislosti na typu hardwaru uzlu a regionu, se počítá cena za uzly.
  • Na základě nákladů na práci uzlů každý jednotlivý pod dostane cenu za hodinu využití procesoru, spotřebu gigabajtu paměti a cenu hodiny za ukládání gigabajtu dat — v závislosti na uzlu, na kterém běžel, nebo typu úložiště.
  • Na základě nákladů na práci jednotlivých podů se počítá platba za namespace, služby, nasazení, StatefulSety.
  • Pro výpočet statistik se používají metriky poskytované kube-state-metrics a node-exporter.

Je důležité mít na paměti, že Kubecost ve výchozím nastavení sleduje pouze prostředky dostupné v Kubernetes. Externí databáze, servery GitLab, úložiště S3 a další služby, které nejsou v klastru (i když se nacházejí ve stejné cloudu), nejsou pro něj viditelné. Ačkoli pro GCP a AWS lze přidat klíče svých servisních účtů a spočítat vše dohromady.

Instalace

Pro správnou funkci Kubecost jsou potřebné:

  • Kubernetes verze 1.8 a vyšší;
  • kube-state-metrics;
  • Prometheus;
  • node-exporter.

Tak se stalo, že v našich klastra byla všechna tato podmínky splněna předem, takže stačilo pouze uvést správný endpoint pro přístup k Prometheus. Nicméně oficiální Helm chart kubecost obsahuje vše potřebné pro spuštění i na "holém" klastru.

Kubecost lze nainstalovat několika způsoby:

  1. Standardní metoda instalace, popsaná v instrukci na stránkách vývojáře. Je třeba přidat do Helm repozitáře cost-analyzer, po čemž nainstalovat chart. Zůstane jen přesměrovat si port a doladit nastavení do požadovaného stavu ručně (přes kubectl) a/nebo pomocí webového rozhraní cost-model.

    Tento způsob jsme ani nezkoušeli, protože nepoužíváme žádné hotové konfigurace, ale vypadá to jako dobrá možnost „jen to zkusit pro sebe“. Pokud už máte část komponentů systému nainstalovanou nebo chcete jemnější nastavení, je lepší zvážit druhou cestu.

  2. Používat vlastně stejný chart, ale konfigurovat a nainstalovat jej sami jakýmkoli pohodlným způsobem.

    Jak už bylo zmíněno, kromě samotného kubecostu obsahuje tento chart i chart Grafana a Prometheus, které lze také nastavit podle svých přání.

    Existující v chartu values.yaml pro cost-analyzer umožňuje nastavovat:

    • seznam komponentů cost-analyzer, které je třeba nasadit;
    • svůj endpoint pro Prometheus (pokud už ho máte);
    • domény a další nastavení ingressů pro cost-model a Grafana;
    • annotations pro podů;
    • nutnost používat trvalá úložiště a jejich velikost.

    Úplný seznam dostupných konfiguračních možností s popisem je k nalezení v dokumentaci.

    Jelikož kubecost v základní verzi neumí omezit přístup, bude nutné ihned nastavit basic-auth pro webové rozhraní.

  3. Nainstalovat pouze jádro systému — cost-model. K tomu je třeba mít v clusteru nainstalovaný Prometheus a uvést odpovídající hodnotu jeho adresy ve变量 prometheusEndpoint pro Helm. Po tom je třeba aplikovat sadu YAML konfigurací v clusteru.

    Opět bude nutné ručně přidat Ingress s basic-auth. A konečně bude potřeba přidat sekci pro sběr metrik cost-model do extraScrapeConfigs v konfigu 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

Co získáme?

Při plnohodnotné instalaci máme k dispozici webové rozhraní kubecost a Grafana s sadou dashboardů.

Celkové náklady, zobrazené na hlavní obrazovce, vlastně ukazuje odhadovanou cenu zdrojů za měsíc. Toto je předpovědní cena, která zobrazuje náklady na používání clusteru (za měsíc) při aktuální úrovni spotřeby zdrojů.

Tato metrika je více pro analýzu výdajů a jejich optimalizaci. Celkové náklady za abstraktní červenec je v kubecostu sledovat nepohodlné: na to budete muset jít do billing. Zato můžete sledovat výdaje s rozdělením podle prostorů názvů, štítků, podů za 1/2/7/30/90 dní, což vám billing nikdy neukáže.

Přehled Kubecost pro úsporu nákladů na Kubernetes v cloudech

Když už jsme u štítků. Je dobré okamžitě přejít do nastavení a nastavit názvy štítků, které budou použity jako další kategorie pro seskupení nákladů:

Přehled Kubecost pro úsporu nákladů na Kubernetes v cloudech

Na ně lze připevnit jakékoli štítky — je to pohodlné, pokud již máte vlastní systém označování.

Také lze změnit adresu API endpointu, ke kterému se připojuje cost-model, nastavit velikost slevy v GCP a uvést vlastní ceny za zdroje a měnu pro jejich měření (tato funkce z nějakého důvodu neovlivňuje celkové náklady).

Kubecost umí ukázat různé problémy v klastru (a dokonce upozornit v případě nebezpečí). Bohužel, možnost není konfigurovatelná, a proto — pokud máte prostředí pro vývojáře a jsou používána, můžete neustále sledovat něco podobného:

Přehled Kubecost pro úsporu nákladů na Kubernetes v cloudech

Důležitý nástroj — Cluster Savings. Měří aktivitu podů (spotřebu zdrojů, včetně síťových), a také počítá, kolik peněz a na čem lze ušetřit.

Může se zdát, že rady pro optimalizaci jsou docela zřejmé, avšak zkušenost naznačuje, že i tak je na co se zaměřit. Konkrétně se sleduje síťová aktivita podů (Kubecost doporučuje zaměřit pozornost na neaktivní), porovnává se požadovaná a skutečná spotřeba paměti a CPU, stejně jako CPU používané uzly klastru (navrhuje sloučit několik uzlů do jednoho), zátěž na disky a ještě několik desítek parametrů.

Stejně jako u jakéhokoli tématu týkajícího se optimalizace, k optimalizaci zdrojů na základě dat z Kubecost je třeba přistupovat opatrně. Například Cluster Savings navrhuje odstranit uzly, tvrdí, že je to bezpečné, avšak nezohledňuje existenci node-selectorů a taintů, které mají nasazené pody na těchto uzlech a které nejsou na ostatních uzlech. A vůbec, i autoři produktu ve svém nedávném článku (mimochodem, může se ukázat jako velmi užitečný pro ty, kteří se zajímají o téma projektu) doporučují neskákat po hlavě do optimalizace nákladů, ale přistupovat k této otázce promyšleně.

Závěry

Po měsíci používání kubecost na několika projektech můžeme říci, že je to zajímavý (a také snadno ovladatelný a instalovatelný) nástroj pro analýzu a optimalizaci nákladů na služby cloudových providerů používané pro Kubernetes klastry. Výpočty jsou velmi přesné: v našich experimentech se shodovaly s tím, co skutečně požadovali poskytovatelé.

Neobešlo se to však bez nedostatků: existují drobné chyby, funkční možnosti občas nepokrývají specifické potřeby některých projektů. Pokud ale potřebujete rychle pochopit, kam peníze směřují a co lze "ušetřit", abyste stabilně snížili účet za cloudové služby o 5-30 % (což se v našem případě podařilo), je to skvělá volba.

P.S.

Přečtěte si také náš blog:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster