Översikt av Kubecost för att spara pengar pĂ„ Kubernetes i moln

Översikt av Kubecost för att spara pengar pĂ„ Kubernetes i moln

Fler och fler företag flyttar för nĂ€rvarande sin infrastruktur frĂ„n fysiska servrar och egna virtuella maskiner till molnet. Det Ă€r lĂ€tt att förklara detta beslut: det finns inget behov av att ta hand om hĂ„rdvaran, klustret kan enkelt konfigureras pĂ„ mĂ„nga olika sĂ€tt... och viktigast av allt — de befintliga teknologierna (som Kubernetes) gör det möjligt att enkelt skala berĂ€kningskapaciteten efter belastningen.

Den ekonomiska aspekten Àr alltid viktig. Verktyget som kommer att diskuteras i denna artikel syftar till att bidra till budgetbesparingar vid anvÀndning av molninfrastruktur med Kubernetes.

Introduktion

Kubecost — en kalifornisk startup frĂ„n tidigare Google-anstĂ€llda som skapar en lösning för kostnadsberĂ€kning av infrastruktur i molntjĂ€nster (inom Kubernetes-klustret + gemensamma resurser), identifiering av flaskhalsar i klusterinstĂ€llningar och sĂ€ndning av relevanta meddelanden till Slack.

Vi har kunder med Kubernetes bĂ„de i vanliga moln som AWS och GCP, samt i det mer sĂ€llsynta för Linux-gemenskapen Azure — pĂ„ alla plattformar som stöds av Kubecost. För vissa av dem berĂ€knar vi kostnader för interna klustertjĂ€nster pĂ„ egen hand (med en metodik liknande den som Kubecost anvĂ€nder), samt övervakar infrastrukturen och försöker optimera kostnaderna. DĂ€rför Ă€r det logiskt att vi blev intresserade av möjligheten att automatisera sĂ„dana uppgifter.

KĂ€llkoden för huvudmodulen av Kubecost Ă€r öppen under en Open Source-licens (Apache License 2.0). Den kan anvĂ€ndas fritt, och de tillgĂ€ngliga funktionerna bör rĂ€cka för smĂ„ projekt. Men affĂ€rer Ă€r affĂ€rer: resten av produkten Ă€r stĂ€ngd och kan anvĂ€ndas genom betalda prenumerationer, som ocksĂ„ innebĂ€r kommersiellt stöd. Dessutom erbjuder författarna en gratis licens för smĂ„ kluster (1 kluster med 10 noder — vid tidpunkten för artikelskrivningen hade denna grĂ€ns utvidgats till 20 noder) eller en provperiod med fulla funktioner under 1 mĂ„nad.

SÄ hÀr Àr det uppbyggt

SÄ, den huvudsakliga delen av Kubecost Àr en applikation cost-model, skriven i Go. Helm-diagrammet som beskriver hela systemet kallas cost-analyzer och Àr i huvudsak en sammansÀttning av cost-model med Prometheus, Grafana och flera instrumentpaneler.

Rent generellt har kostnadsmodellen sitt eget webbgrÀnssnitt som visar diagram och detaljerad statistik över kostnader i tabellformat, samt sjÀlvklart rÄd för att optimera utgifter. De dashboards som presenteras i Grafana Àr en tidigare utvecklingsfas av Kubecost och innehÄller till stor del samma data som kostnadsmodellen, kompletterat med den vanliga statistiken för anvÀndning av CPU/minne/nÀtverks- och lagringsutrymme i klustret och dess komponenter.

Hur fungerar Kubecost?

  • Kostnadsmodellen fĂ„r priser för drift via API:er frĂ„n molnleverantörer.
  • DĂ€refter berĂ€knas kostnaden per nod beroende pĂ„ hĂ„rdvarutyp och region.
  • Baserat pĂ„ kostnaden för nodernas arbete fĂ„r varje slutgiltig pod en kostnad per timme för anvĂ€ndning av processorn, minnesanvĂ€ndning per gigabyte och kostnad per timme för lagring av en gigabyte data — beroende pĂ„ noden som den körs pĂ„, eller lagringstyp.
  • Baserat pĂ„ kostnaden för individuella poddar berĂ€knas avgiften per namnrymd, tjĂ€nster, distributioner och StatefulSets.
  • För att berĂ€kna statistiken anvĂ€nds metrik som tillhandahĂ„lls av kube-state-metrics och node-exporter.

Det Àr viktigt att notera att Kubecost som standard bara rÀknar resurser som Àr tillgÀngliga i Kubernetes. Externa databaser, GitLab-servrar, S3-lagring och andra tjÀnster som inte finns i klustret (Àven om de finns i samma moln) Àr osynliga för det. Men för GCP och AWS kan man lÀgga till nycklar till sina tjÀnstekonton och rÀkna allt tillsammans.

Installation

För att Kubecost ska fungera krÀvs:

  • Kubernetes version 1.8 eller högre;
  • kube-state-metrics;
  • Prometheus;
  • node-exporter.

Det visade sig att alla dessa villkor redan var uppfyllda i vĂ„ra kluster, sĂ„ det var bara nödvĂ€ndigt att ange rĂ€tt slutpunkt för att fĂ„ tillgĂ„ng till Prometheus. ÄndĂ„ innehĂ„ller den officiella Helm-diagrammet för kubecost allt som behövs för att starta Ă€ven pĂ„ en 'ren' kluster.

Kubecost kan installeras pÄ flera sÀtt:

  1. Den standardmetod för installation som beskrivs i instruktionerna pÄ utvecklarens webbplats. Man mÄste lÀgga till Helm-repot för kostnadsanalys, och dÀrefter installera diagrammet. Det ÄterstÄr bara att mappa en port och justera instÀllningarna manuellt (via kubectl) och/eller med hjÀlp av webbgrÀnssnittet för kostnadsmodellen.

    Denna metod har vi inte ens prövat, eftersom vi inte anvÀnder nÄgra externa fÀrdiga konfigurationer, men den verkar vara ett bra alternativ för "att bara testa sjÀlv". Om du redan har installerat delar av systemkomponenterna eller om du vill ha en mer detaljerad konfiguration, Àr det bÀttre att övervÀga det andra alternativet.

  2. AnvÀnda i huvudsak samma chart, men konfigurera och installera det sjÀlva pÄ vilket sÀtt som helst.

    Som redan nÀmnts innehÄller detta chart förutom kubecost Àven charts för Grafana och Prometheus, vilka ocksÄ kan anpassas efter behov.

    Det som ingÄr i chartet values.yaml för cost-analyzer tillÄter att konfigurera:

    • listan över komponenterna i cost-analyzer som behöver deployas;
    • din egen endpoint för Prometheus (om du redan har en);
    • domĂ€ner och andra ingĂ„ngsinstĂ€llningar för cost-model och Grafana;
    • annoteringar för poddar;
    • behovet av att anvĂ€nda permanenta lagringsenheter och deras storlek.

    En fullstÀndig lista över tillgÀngliga konfigurationsalternativ med beskrivning finns i dokumentationen.

    Eftersom kubecost i sin grundversion inte kan begrÀnsa Ätkomst, mÄste basic-auth för webbpanelen konfigureras direkt.

  3. Installera bara kĂ€rnan i systemet — cost-model. För detta krĂ€vs att Prometheus Ă€r installerad i klustret och att motsvarande vĂ€rde för dess adress anges i variabeln prometheusEndpoint för Helm. Efter det — tillĂ€mpa uppsĂ€ttningen av YAML-konfigurationer i klustret.

    Återigen mĂ„ste Ingress med basic-auth lĂ€ggas till manuellt. Slutligen mĂ„ste en sektion för insamling av metrik för cost-model lĂ€ggas till i extraScrapeConfigs i Prometheus-konfigurationen:

    - 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

Vad fÄr vi?

Vid en fullstÀndig installation fÄr vi tillgÄng till webbpanelen kubecost och Grafana med en uppsÀttning dashboards.

Total kostnad, som visas pÄ huvudskÀrmen, visar faktiskt den berÀknade kostnaden för resurser under en mÄnad. Detta Àr den prognostiserade prisen, som visar kostnaden för att anvÀnda klustret (per mÄnad) vid nuvarande resursanvÀndningsnivÄ.

Denna metrik Àr frÀmst för att analysera utgifter och deras optimering. Att se de totala kostnaderna för en abstrakt juli i kubecost Àr inte sÀrskilt bekvÀmt: för det tvingas du gÄ till faktureringen. Men du kan se utgifterna uppdelat efter namnrymder, etiketter och poddar över 1/2/7/30/90 dagar, vilket faktureringen aldrig kommer att visa.

Översikt av Kubecost för att spara pengar pĂ„ Kubernetes i moln

För att inte tala om etiketter. Gör en direkt ingÄng i instÀllningarna och stÀll in namnen pÄ etiketter som kommer att anvÀndas som ytterligare kategorier för gruppering av kostnader:

Översikt av Kubecost för att spara pengar pĂ„ Kubernetes i moln

PÄ dem kan du hÀnga vilka etiketter som helst - praktiskt om du redan har ditt eget mÀrkningssystem.

DÀr kan du ocksÄ Àndra adressen till API-endpointen som cost-model ansluter till, stÀlla in storleken pÄ rabatten i GCP och ange egna priser pÄ resurser och valuta för deras mÀtning (funktionen pÄverkar av nÄgon anledning inte den totala kostnaden).

Kubecost kan visa olika problem i klustret (och till och med larma vid fara). TyvÀrr kan alternativet inte stÀllas in, sÄ om du har miljöer för utvecklare och de anvÀnds, kan du kontinuerligt bevaka nÄgot liknande:

Översikt av Kubecost för att spara pengar pĂ„ Kubernetes i moln

Ett viktigt verktyg Àr Cluster Savings. Det mÀter aktiviteten hos poddar (resursförbrukning, inklusive nÀtverksanvÀndning), samt berÀknar hur mycket pengar och pÄ vad som kan sparas.

Det kan verka som att optimeringsrÄden Àr ganska uppenbara, men erfarenhet visar att det fortfarande finns mycket att titta pÄ. I synnerhet spÄras nÀtverksaktiviteten hos poddar (Kubecost föreslÄr att du uppmÀrksammar inaktiva), jÀmförs begÀrd och verklig förbrukning av minne och CPU, samt CPU som anvÀnds av klustrets noder (föreslÄr att flera noder kan slÄs ihop till en), belastningen pÄ diskarna och ett par dussin andra parametrar.

Som med alla frÄgor som rör optimering, bör optimering av resurser baserad pÄ data frÄn Kubecost behandlas med försiktighet. Till exempel föreslÄr Cluster Savings att ta bort noder och hÀvdar att detta Àr sÀkert, men tar inte hÀnsyn till att de distribuerade poddarna har node-selectors och taints som saknas pÄ de andra noderna. Dessutom rekommenderar Àven produktens skapare i sin en nyligen publicerad artikel (för övrigt kan den vara ganska anvÀndbar för dem som Àr intresserade av projektets Àmne) att man inte ska ge sig hÀn Ät kostnadsoptimering utan att tÀnka efter.

Sammanfattning

Efter att ha anvÀnt kubecost under en mÄnad pÄ nÄgra projekt kan vi konstatera att det Àr ett intressant (och lÀtt att lÀra sig och installera) verktyg för analys och optimering av kostnader för tjÀnster frÄn molnleverantörer som anvÀnds för Kubernetes-kluster. BerÀkningarna visar sig vara ganska exakta: i vÄra experiment matchade de vad leverantörerna faktiskt krÀvde.

Det finns ocksÄ nackdelar: det finns vissa mindre kritiska buggar och funktionerna tÀcker ibland inte de specifika behoven för vissa projekt. Men om du snabbt behöver förstÄ vart pengarna gÄr och vad som kan "skÀras ner" för att stabilt sÀnka kostnaden för molntjÀnster med 5-30 % (vilket hÀnde i vÄrt fall), sÄ Àr detta ett utmÀrkt alternativ.

P.S.

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster