Wéi Pod Prioritéiten a Kubernetes d'Downtime bei Grafana Labs verursaacht hunn

Note. iwwersat.: Mir presentéieren Iech technesch Detailer iwwer d'Grënn fir déi rezent Ënnerbriechung am Cloud Service, deen vun den Creatoren vu Grafana erhale gëtt. Dëst ass e klassescht Beispill vu wéi eng nei a scheinbar extrem nëtzlech Feature entwéckelt fir d'Qualitéit vun der Infrastruktur ze verbesseren ... kann Schued verursaachen wann Dir net déi vill Nuancen vu senger Uwendung an de Realitéite vun der Produktioun virgesinn. Et ass super wann Material wéi dëst erschéngt, déi Iech erlaben net nëmmen aus Äre Feeler ze léieren. Detailer sinn an der Iwwersetzung vun dësem Text vum Vizepresident vum Produkt vu Grafana Labs.

Wéi Pod Prioritéiten a Kubernetes d'Downtime bei Grafana Labs verursaacht hunn

E Freideg, den 19. Juli huet den Hosted Prometheus Service an der Grafana Cloud gestoppt fir ongeféier 30 Minutten ze funktionéieren. Ech entschëllege mech un all Clienten, déi vum Ausfall betraff sinn. Eis Aarbecht ass d'Iwwerwaachungsinstrumenter ze bidden déi Dir braucht, a mir verstinn datt se net verfügbar hunn Äert Liewen méi schwéier maachen. Mir huelen dësen Tëschefall extrem eescht. Dës Notiz erkläert wat geschitt ass, wéi mir reagéiert hunn a wat mir maache fir sécherzestellen datt et net erëm geschitt.

Virgeschicht

Grafana Cloud Hosted Prometheus Service baséiert op Cortex - CNCF Projet fir en horizontal skalierbaren, héich verfügbaren, Multi-Tenant Prometheus Service ze kreéieren. D'Cortex Architektur besteet aus enger Rei vun eenzelne Mikroservicer, déi jidderee seng eege Funktioun ausféiert: Replikatioun, Späicheren, Ufroen, asw. Cortex ass ënner aktiver Entwécklung a setzt stänneg nei Features a verbessert d'Performance. Mir setzen reegelméisseg nei Cortex Verëffentlechungen op Cluster aus, fir datt d'Cliente vun dëse Funktiounen profitéiere kënnen - glécklecherweis kann Cortex ouni Ënnerbriechung aktualiséiert ginn.

Fir nahtlos Updates erfuerdert den Ingester Cortex Service eng zousätzlech Ingester Replika während dem Updateprozess. (Note. iwwersat.: Ingester - d'Basiskomponent vum Cortex. Seng Aarbecht ass e konstante Stroum vu Proben ze sammelen, se a Prometheus Stécker ze gruppéieren an se an enger Datebank wéi DynamoDB, BigTable oder Cassandra ze späicheren.) Dëst erlaabt al Ingesters déi aktuell Donnéeën un nei Ingesters weiderzebréngen. Et ass derwäert ze bemierken datt Ingesters Ressource-exigent sinn. Fir datt se funktionnéieren, musst Dir 4 Kären a 15 GB Erënnerung pro Pod hunn, d.h. 25% vun der Veraarbechtungskraaft an Erënnerung vun der Basismaschinn am Fall vun eise Kubernetes Cluster. Am Allgemengen hu mir normalerweis vill méi onbenotzt Ressourcen am Stärekoup wéi 4 Kären an 15 GB Erënnerung, sou datt mir dës zousätzlech Inselen während Upgrades einfach kënnen spinnen.

Allerdéngs geschitt et dacks datt während normaler Operatioun keng vun de Maschinnen dës 25% vun onbenotzten Ressourcen hunn. Jo, mir streiden net emol: CPU an Erënnerung wäerten ëmmer nëtzlech sinn fir aner Prozesser. Fir dëse Problem ze léisen, hu mir beschloss ze benotzen Kubernetes Pod Prioritéite. D'Iddi ass Ingesters eng méi héich Prioritéit ze ginn wéi aner (statlos) Mikroservicer. Wa mir en zousätzlechen (N+1) Ingester musse lafen, verdränge mir temporär aner, méi kleng Pods. Dës Pods ginn op gratis Ressourcen op anere Maschinnen transferéiert, a léisst e grousst genuch "Lach" fir eng zousätzlech Ingester ze lafen.

En Donneschdeg, 18. Juli hu mir véier nei Prioritéitsniveauen an eise Cluster ausgerullt: kritesch, grouss ass, mëttlerer и geréng ass. Si goufen op engem internen Cluster getest ouni Clientsverkéier fir ongeféier eng Woch. Par défaut, Pods ouni eng spezifizéiert Prioritéit kritt mëttlerer Prioritéit, Klass war gesat fir Ingesters mat héich Prioritéit. Kritesch war reservéiert fir Iwwerwaachung (Prometheus, Alertmanager, Node-Exporter, Kube-Staat-Metriken, etc.). Eis Configuratioun ass op, an Dir kënnt de PR kucken hei.

Accident

E Freideg, Juli 19, huet ee vun den Ingenieuren en neien dedizéierten Cortex Cluster fir e grousse Client gestart. D'Konfiguratioun fir dëse Stärekoup huet keng nei Pod Prioritéite enthalen, sou datt all nei Pods eng Standard Prioritéit zougewisen hunn - mëttlerer.

De Kubernetes Cluster huet net genuch Ressourcen fir den neie Cortex Cluster, an den existente Produktiouns Cortex Cluster gouf net aktualiséiert (Ingesters goufen ouni héich Prioritéit). Zanter der Ingesters vum neie Stärekoup Par défaut haten mëttlerer Prioritéit, an déi existent Pods an der Produktioun hunn iwwerhaapt ouni Prioritéit geschafft, d'Ingesters vum neie Cluster ersat d'Ingesters aus dem existente Cortex Produktiounscluster.

ReplicaSet fir den evicted Ingester am Produktiounscluster huet den evicted Pod entdeckt an en neien erstallt fir déi spezifizéiert Unzuel u Kopien z'erhalen. Den neie Pod gouf als Standard zougewisen mëttlerer Prioritéit, an aner "al" Ingester an Produktioun verluer seng Ressourcen. D'Resultat war Lawine Prozess, wat zu der Verréckelung vun all Pods aus Ingester fir Cortex Produktiounscluster gefouert huet.

Ingesters sinn statesch a späicheren Donnéeën fir déi lescht 12 Stonnen. Dëst erlaabt eis se méi effizient ze kompriméieren ier se se op laangfristeg Lagerung schreiwen. Fir dëst z'erreechen, zerstéiert Cortex Daten iwwer Serie mat engem Distributed Hash Table (DHT) a replizéiert all Serie iwwer dräi Ingesters mat Dynamo-Stil Quorum Konsistenz. Cortex schreift keng Daten un Ingesters déi behënnert sinn. Also, wann eng grouss Zuel vun Ingesters den DHT verloossen, kann Cortex net genuch Replikatioun vun den Entréen ubidden, a si crashen.

Detektioun a Sanéierung

Nei Prometheus Notifikatiounen baséiert op "Feeler Budget" (Feeler-Budget-baséiert - Detailer erschéngen an engem zukünftegen Artikel) huet den Alarm 4 Minutte nom Start vum Shutdown ugefaang. Iwwer déi nächst fënnef Minutten oder esou hu mir e puer Diagnostik gemaach an den ënnerierdesche Kubernetes Cluster opskaléiert fir souwuel déi nei wéi och existent Produktiounscluster ze hosten.

No weidere fënnef Minutten hunn déi al Ingesters hir Donnéeën erfollegräich geschriwwen, déi nei ugefaang, an d'Cortex Cluster sinn erëm verfügbar.

Eng aner 10 Minutte goufe verbruecht fir d'Diagnostik an d'Korrigéiere vun Out-of-Memory (OOM) Feeler aus Authentifikatioun ëmgedréint Proxyen virun Cortex. OOM Feeler goufen duerch eng zéngfach Erhéijung vun QPS verursaacht (mir gleewen un iwwerdriwwen aggressiv Ufroe vun de Prometheus Serveren vum Client).

Folgen

D'total Ausdauer war 26 Minutten. Keng Daten goufen verluer. Ingesters hunn all In-Memory Daten erfollegräich a laangfristeg Späichere gelueden. Wärend dem Shutdown, Client Prometheus Server gebuffert geläscht (Fern) Opzeechnunge benotzt nei API Remote_write baséiert op WAL (geschriwwen vum Callum Styan vu Grafana Labs) a widderholl déi gescheitert Schreiwen nom Crash.

Wéi Pod Prioritéiten a Kubernetes d'Downtime bei Grafana Labs verursaacht hunn
Produktioun Stärekoup Schreiwen Operatiounen

Conclusiounen

Et ass wichteg aus dësem Zwëschefall ze léieren an déi néideg Schrëtt ze huelen fir säi Widderhuelung ze vermeiden.

A Réckbléck sollte mir net de Standard setzen mëttlerer Prioritéit bis all Ingesters an der Produktioun kritt hunn grouss ass eng Prioritéit. Ausserdeem war et néideg fir se am Viraus ze këmmeren héich Prioritéit. Alles ass elo fixéiert. Mir hoffen, datt eis Erfarung aner Organisatiounen hëllefe wäert, wann Dir Pod Prioritéiten an Kubernetes benotzt.

Mir wäerten en zousätzleche Niveau vun der Kontroll iwwer d'Deployment vun all zousätzlech Objete bäidroen, deenen hir Konfiguratioune global zum Cluster sinn. Vun elo un ginn esou Ännerungen bewäert bоméi Leit. Zousätzlech gouf d'Ännerung, déi den Crash verursaacht huet, als ze kleng ugesinn fir e separat Projetsdokument - et gouf nëmmen an engem GitHub Thema diskutéiert. Vun elo un ginn all esou Ännerunge fir Konfiguratioune mat passenden Projektdokumentatioun begleet.

Schlussendlech wäerte mir d'Gréisst vun der Authentifikatioun ëmgedréint Proxy automatiséieren fir d'Iwwerlaaschtung OOM ze vermeiden, déi mir gesinn hunn, a wäerte Prometheus Standardastellungen am Zesummenhang mat Fallback a Skaléieren iwwerpréiwen fir ähnlech Themen an Zukunft ze vermeiden.

Den Echec hat och e puer positiv Konsequenzen: Nodeem déi néideg Ressourcen kritt hunn, huet Cortex sech automatesch ouni zousätzlech Interventioun erholl. Mir kruten och wäertvoll Erfahrung mat ze schaffen Grafana Loki - eisen neie Log-Aggregatiounssystem - deen gehollef huet datt all Ingesters sech während an nom Ausfall richteg behuelen.

PS vum Iwwersetzer

Liest och op eisem Blog:

Source: will.com

Setzt e Commentaire