Spremljanje virov gruče Kubernetes

Spremljanje virov gruče Kubernetes

Ustvaril sem Kube Eagle - izvoznika Prometheus. Izkazalo se je kot kul stvar, ki pomaga bolje razumeti vire majhnih in srednje velikih grozdov. Na koncu sem prihranil na stotine dolarjev, ker sem izbral prave vrste strojev in konfiguriral omejitve virov aplikacije za delovne obremenitve.

Povedal vam bom o prednostih Kube Eagle, a najprej bom razložil, kaj je povzročilo hrup in zakaj je bil potreben visokokakovosten nadzor.

Upravljal sem več grozdov s 4–50 vozlišči. Vsaka gruča vsebuje do 200 mikrostoritev in aplikacij. Da bi bolje izkoristili obstoječo strojno opremo, je bila večina uvedb konfigurirana z razpočnimi viri RAM in CPE. Tako lahko pods po potrebi vzamejo razpoložljiva sredstva in hkrati ne motijo ​​drugih aplikacij na tem vozlišču. No, ali ni super?

In čeprav je gruča porabila razmeroma malo procesorja (8 %) in RAM-a (40 %), smo imeli nenehno težave s preprečevanjem podov, ko so poskušali dodeliti več pomnilnika, kot je bilo na voljo v vozlišču. Takrat smo imeli samo eno nadzorno ploščo za spremljanje virov Kubernetes. Všečkaj to:

Spremljanje virov gruče Kubernetes
Nadzorna plošča Grafana samo z meritvami cAdvisor

S takšno ploščo ni problem videti vozlišč, ki jedo veliko pomnilnika in procesorja. Težava je ugotoviti, kaj je razlog. Da bi pode obdržali na mestu, bi lahko seveda nastavili zajamčene vire na vseh podih (zahtevani viri enaki omejitvi). Vendar to ni najbolj pametna uporaba strojne opreme. Grozd je imel nekaj sto gigabajtov pomnilnika, medtem ko so nekatera vozlišča izginila, druga pa so imela 4–10 GB rezerve.

Izkazalo se je, da razporejevalnik Kubernetes neenakomerno porazdeli delovne obremenitve med razpoložljivimi viri. Razporejevalnik Kubernetes upošteva različne konfiguracije: pravila afinitete, madežev in toleranc, izbirnike vozlišč, ki lahko omejijo razpoložljiva vozlišča. Toda v mojem primeru ni bilo nič takega in sklopi so bili načrtovani glede na zahtevana sredstva na vsakem vozlišču.

Za pod je bilo izbrano vozlišče, ki ima največ prostih virov in izpolnjuje pogoje zahteve. Ugotovili smo, da se zahtevani viri na vozliščih ne ujemajo z dejansko uporabo, in tu so na pomoč priskočili Kube Eagle in njegove zmogljivosti za spremljanje virov.

Skoraj vse gruče Kubernetes spremljam samo z Izvoznik vozlišča и Državna metrika Kube. Node Exporter zagotavlja statistične podatke o V/I in uporabi diska, CPE-ja in RAM-a, medtem ko Kube State Metrics prikazuje metrike objekta Kubernetes, kot so zahteve ter omejitve virov CPU in pomnilnika.

Združiti moramo meritve uporabe z meritvami zahtev in omejitev v Grafani, nato pa bomo dobili vse informacije o težavi. To se sliši preprosto, vendar obe orodji dejansko poimenujeta oznake različno in nekatere metrike sploh nimajo oznak metapodatkov. Kube Eagle naredi vse sam in plošča izgleda takole:

Spremljanje virov gruče Kubernetes

Spremljanje virov gruče Kubernetes
Nadzorna plošča Kube Eagle

Uspelo nam je rešiti veliko težav z viri in prihraniti opremo:

  1. Nekateri razvijalci niso vedeli, koliko virov potrebujejo mikrostoritve (ali pa se preprosto niso trudili). Ni bilo možnosti, da bi našli napačne zahteve za vire - za to moramo poznati porabo ter zahteve in omejitve. Zdaj vidijo meritve Prometheus, spremljajo dejansko uporabo ter prilagajajo zahteve in omejitve.
  2. Aplikacije JVM zavzamejo toliko RAM-a, kot ga zmorejo. Zbiralnik smeti sprosti pomnilnik samo, ko je porabljenega več kot 75 %. In ker ima večina storitev razpočni pomnilnik, ga je vedno zasedal JVM. Zato so vse te storitve Java porabile veliko več RAM-a, kot je bilo pričakovano.
  3. Nekatere aplikacije so zahtevale preveč pomnilnika in razporejevalnik Kubernetes teh vozlišč ni dal drugim aplikacijam, čeprav so bile v resnici prostejša od drugih vozlišč. En razvijalec je v zahtevo pomotoma dodal dodatno številko in zgrabil velik kos RAM-a: 20 GB namesto 2. Nihče tega ni opazil. Aplikacija je imela 3 replike, tako da so bila prizadeta kar 3 vozlišča.
  4. Uvedli smo omejitve virov, prerazporedili sklope s pravilnimi zahtevami in dosegli idealno ravnovesje uporabe strojne opreme v vseh vozliščih. Nekaj ​​vozlišč bi lahko bilo popolnoma zaprtih. In potem smo videli, da imamo napačne stroje (orientirane na CPE, ne na pomnilnik). Spremenili smo vrsto in izbrisali več vozlišč.

Rezultati

Z razpočnimi viri v gruči učinkoviteje uporabljate razpoložljivo strojno opremo, vendar razporejevalnik Kubernetes razporeja pode na podlagi zahtev za vire, kar je obremenjeno. Če želite ubiti dve muhi na en mah: da se izognete težavam in da v največji možni meri uporabite vire, potrebujete dobro spremljanje. Zato bo koristno Kube Eagle (Prometheus exporter in Grafana dashboard).

Vir: www.habr.com

Dodaj komentar