Kuidas Kubernetes'e pod'ide prioriteedid pÔhjustasid Grafana Labs'is seiskumise

MĂ€rkus tĂ”lke kohta.: Tutvustame teie tĂ€helepanu tehnilisi ĂŒksikasju hiljutise katke otsimine pilveteenuse töös, mida haldavad Grafana loojad. See on klassikaline nĂ€ide sellest, kuidas uus ja nĂ€iliselt erakordselt kasulik funktsioon, mis on mĂ”eldud infrastruktuuri kvaliteedi parandamiseks
 vĂ”ib kahjustada, kui ei arvestata paljude nĂŒanssidega selle kasutamisel tootmisreĆŸiimis. SuurepĂ€rane, kui sellised materjalid ilmuvad, vĂ”imaldades Ă”ppida mitte ainult enda vigadest. Üksikasjad – selle teksti tĂ”lkes Grafana Labs toote asepresidendi poolt.

Kuidas pod'ide prioriteedid Kuberneteses pÔhjustasid seisakut Grafana Labsis

Reedel, 19. juulil, lĂ”petas Hosted Prometheus teenus Grafana Cloudis töötamise umbes 30 minutiks. Vabandan kĂ”igi klientide ees, kes said hĂ€ire tĂ”ttu kannatada. Meie ĂŒlesanne on pakkuda vajalikke tööriistu seireks ja me mĂ”istame, et nende puudumine raskendab teie elu. Me vĂ”tame seda intsidenti ÀÀrmiselt tĂ”siselt. Selles mĂ€rkmes selgitatakse, mis juhtus, kuidas me reageerisime ja mida teeme, et sarnased olukorrad ei korduks.

Eellugu

Grafana Cloud Hosted Prometheuse teenus pĂ”hineb Cortex – CNCF projekt, mille eesmĂ€rk on luua horisontaalselt skaleeritav, suure kĂ€ttesaadavuse ja mitmeĂŒĂŒrilise (multi-tenant) Prometheuse teenus. Cortexi arhitektuur koosneb rĂŒhmast eraldi mikroteenustest, millest igaĂŒhel on oma funktsioon: replikatsioon, salvestamine, pĂ€ringud jne. Cortexi arendamine on aktiivne, sellele lisatakse pidevalt uusi vĂ”imalusi ja selle jĂ”udlus suureneb. Me jagame regulaarselt uusi Cortexi versioone klastritesse, et kliendid saaksid nendest vĂ”imalustest kasu – Ă”nneks oskab Cortex uuendada ilma katkestusteta.

Katkestusteta uuenduste jaoks nĂ”uab Cortex Ingester teenus uuendusprotsessi ajal tĂ€iendavat Ingesterit. (MĂ€rkus tĂ”lke kohta.: AndmevastuvĂ”tja – Cortexi pĂ”hi komponent. Selle ĂŒlesanne on koguda pidevat voogu proove, grupeerida need Prometheuse chunk'idesse ja salvestada andmebaasidesse nagu DynamoDB, BigTable vĂ”i Cassandra. See on vĂ”imaldanud vanadel Ingesteritel edastada praeguseid andmeid uutega Ingesteritele. Oluline on mĂ€rkida, et Ingesterid on ressursinĂ”udlikud. Nende tööks on vajalik 4 sĂŒdamikku ja 15 GB mĂ€lu iga podi kohta, st 25% protsessorivĂ”imsusest ja mĂ€lust meie Kubernetes klastrites. Üldiselt on meil tavaliselt palju rohkem kasutamata ressursse klastris kui 4 sĂŒdamikku ja 15 GB mĂ€lu, seega saame neid tĂ€iendavaid Ingestereid hĂ”lpsasti ajakohastamise ajal kĂ€ivitada.

Kuid sageli on nii, et normaalsete tööde kĂ€igus ei ole ĂŒhelgi masinal neid 25% kasutamata ressursse. Jah, me ei pĂŒĂŒdle selle poole: CPU ja mĂ€lu on alati kasulikud teiste protsesside jaoks. Selle probleemi lahendamiseks otsustasime kasutada Kubernetes Pod Priorities. Idee seisneb selles, et anda Ingesteritele kĂ”rgem prioriteet kui muudele (stateless) mikrosĂŒsteemidele. Kui meil on vaja kĂ€ivitada tĂ€iendav (N+1) Ingester, siis surume ajutiselt tagasi teised, madalama prioriteediga podid. Need podid kolitakse teistesse masinatesse vabadessse ressurssidesse, jĂ€ttes piisavalt suured "auku" tĂ€iendava Ingesteri kĂ€ivitamiseks.

KÀesoleval neljapÀeval, 18. juulil, kÀivitasime oma klastrites neli uut prioriteetide taset: kriitiline, kÔrge, keskmine ja madal. Need testiti sisemises klastris ilma kliendiliikluse umbes nÀdal. Vaikimisi said prioriteedita podid keskmine prioriteedi, Ingesteritele anti klass kÔrge prioriteedi jÀrjekorda. Kriitiline oli reserveeritud jÀlgimiseks (Prometheus, Alertmanager, node-exporter, kube-state-metrics jne). Meie konfiguratsioon on avatud ja PR-i saab vaadata siin.

HĂ€daolukord

Reedel, 19. juulil, kĂ€ivitas ĂŒks insener uue eraldatud Cortex klastrite suure kliendi jaoks. Selle klastrite konfiguratsioon ei sisaldanud uusi podide prioriteete, seega anti kĂ”igile uutele podidele vaikimisi prioriteet — keskmine.

Kubernetes klastris ei jĂ€tkunud ressursse uue Cortex klastrite jaoks, ning olemasolevat tootmisĂŒhtset Cortex klastrit ei uuendatud (Ingesterid jĂ€id kĂ”rge prioriteedita). Kuna uue klastrite Ingesterid omasid vaikimisi keskmine prioriteedi, samas kui tootmisĂŒhtsetes podides ei olnud ĂŒldse prioriteeti, surusid uue klastrite Ingesterid alla tootmisĂŒhtses Cortex klastris asuvate Ingesterid.

ReplicaSet-i vĂ€ljatĂ”rjutud Ingester'ile tootmisklassis avastas vĂ€lja tĂ”rjutud pod'i ja lĂ”i uue, et sĂ€ilitada mÀÀratud koopiate arv. Uuele pod'ile anti vaikimisi keskmine prioriteet, ja jĂ€rgmine "vana" Ingester tootmises jĂ€i ilma ressurssidest. Tulemuseks oli lumepalliprotsess, mis viis kĂ”igi pod'ide vĂ€lja tĂ”rjumiseni Ingester'iga tootmisklasside Cortex’is.

Ingester'id on olekuga (stateful) ja hoiavad andmeid viimase 12 tunni jooksul. See vĂ”imaldab meil neid tĂ”husamalt tihendada enne, kui need salvestatakse pikaajalisse laostamisse. Cortex teostab andmete jagamist seeriate vahel, kasutades jaotatud rĂ€sitamistabelit (Distributed Hash Table, DHT), ja repliiseerib iga seeria kolmele Ingester'ile lĂ€bi kvoraumide kokkuleppe stiilis Dynamo. Cortex ei kirjuta andmeid Ingester'itesse, mis on vĂ€lja lĂŒlitatud. Seega, kui suur hulk Ingester'eid lahkub DHT-st, ei suuda Cortex tagada piisavat replikatsiooni kirjetest ning need "langevad".

Avastamine ja kÔrvaldamine

Uued Prometheuse teavitused, mis pĂ”hinevad "veabudĆŸetil" (error-budget-based — ĂŒksikasjad ilmuvad tulevikus artiklis) hakkasid alarmi lööma 4 minuti möödudes katkestuse algusest. JĂ€rgneva viie minuti jooksul tegime diagnostikat ja suurendasime alapaneeli Kubernetes klassi nii uute kui ka olemasolevate tootmisklasside jaoks.

Viie minuti pÀrast Ônnestus vanadel Ingester'eil oma andmed salvestada ning uued kÀivitusid, ja Cortex'i klassid said taas kÀttesaadavaks.

Veel 10 minutit lĂ€ks diagnostiikaks ja out-of-memory (OOM) vigade parandamiseks, mis esinesid Cortex'i ees asuvate autentimisproksiserverite tĂ”ttu. OOM-vead olid pĂ”hjustatud kĂŒmnekordsest QPS kasvust (eeldame, et see tulenes liiga agressiivsetest pĂ€ringutest kliendi Prometheuse serveritest).

MÔjud

Kokku kestis seiskamine 26 minutit. Andmeid ei kaotatud. Ingester'id said edukalt lahti kÔik in-memory andmed pikaajalisse laostamisse. Katkestuse ajal salvestasid kliendi Prometheuse serverid eemaldatud (remote) kirjed uue API remote_write pÔhjal WAL (autor Callum Styan Grafana Labs'ist) ja kordasid ebaÔnnestunud kirjeid pÀrast riket. Tootmisklassi kirjutamisoperatsioonid

Kuidas pod'ide prioriteedid Kuberneteses pÔhjustasid seisakut Grafana Labsis
Oluline on Ôppida selle juhtumi Ôppustest ja vÔtta vajalikud meetmed, et vÀltida selle kordumist.

JĂ€reldused

On oluline Ôppida sellest juhtumist ja vÔtta vajalikud meetmed, et vÀltida selle kordumist.

Tagasis vaatamata tuleks tunnistada, et me ei pidanud vaikimisi seadma keskmine prioriteeti, kuni kĂ”ik Ingester’id tootmises on saanud kĂ”rge prioriteedi. Samuti oleks pidanud eelnevalt muretsema nende kĂ”rge prioriteedi. NĂŒĂŒd on kĂ”ik parandatud. Loodame, et meie kogemus aitab teisi organisatsioone, kes kaaluvad pod'ide prioriteetide kasutamist Kuberneteses.

Lisame tĂ€iendava kontrolli taseme igasuguste tĂ€iendavate objektide juurutamisel, mille seadistused on globaalsetele klastritele. Edaspidi hindame selliseid muudatusiilotkasuurema arvu inimeste poolt. Lisaks, muudatus, mis viis tĂ”rkeni, peeti liiga ebaoluliseks igaĂŒhe projektidokumendi jaoks — sellest arutleti ainult GitHubi probleemis. Edaspidi saadavad kĂ”ik sellised konfiguratsioonimuudatused vastava projektidokumendiga.

LĂ”puks automatiseerime autentimisproksi tagasivahetuse suuruse muutmise, et vĂ€ltida OOM-i ĂŒlevoolu, mida olime tunnistajaks, ja analĂŒĂŒsime mÔÔdiku vaikeseadeid, mis on seotud tagasivĂ”tmise ja skaleerimisega, et tulevikus sarnaseid probleeme ennetada.

Kogenud tĂ”rkel oli ka mĂ”ned positiivsed tagajĂ€rjed: saadud vajalike ressursside abil taastus Cortex automaatselt ilma tĂ€iendava sekkumiseta. Saime ka vÀÀrtuslikku kogemust töötades Grafana Loki — meie uue logide kogumise sĂŒsteemiga, — mis aitas veenduda, et kĂ”ik Ingester’id kĂ€itusid Ă”igesti tĂ”rke ajal ja pĂ€rast seda.

P.S. tÔlkijalt

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster