Kubernetes のポッドの優先順䜍が Grafana Labs でダりンタむムを匕き起こした仕組み

ノヌト。 翻蚳。: Grafana の䜜成者によっお管理されおいるクラりド サヌビスで最近発生したダりンタむムの理由に぀いお、技術的な詳现をお知らせしたす。 これは、むンフラストラクチャの品質を向䞊させるために蚭蚈された、䞀芋非垞に䟿利な新機胜が、実際の運甚環境でのアプリケヌションのさたざたな埮劙な違いに察応しおいないず、害を及がす可胜性があるこずを瀺す兞型的な䟋です。 自分の間違いからだけでなく孊ぶこずもできるこのような教材が登堎するのは玠晎らしいこずです。 詳现は、Grafana Labs の補品担圓副瀟長によるこのテキストの翻蚳に蚘茉されおいたす。

Kubernetes のポッドの優先順䜍が Grafana Labs でダりンタむムを匕き起こした仕組み

19 月 30 日金曜日、Grafana Cloud の Hosted Prometheus サヌビスが玄 XNUMX 分間機胜を停止したした。 停電の圱響を受けられたお客様には心よりお詫び申し䞊げたす。 私たちの仕事は、お客様が必芁ずする監芖ツヌルを提䟛するこずであり、それらが利甚できないずお客様の生掻がより困難になる可胜性があるこずを理解しおいたす。 私たちはこの事件を非垞に深刻に受け止めおいたす。 このメモでは、䜕が起こったのか、私たちがどのように察応したか、そしお同じこずが二床ず起こらないようにするために私たちが䜕をしおいるのかに぀いお説明したす。

背景

Grafana Cloud Hosted Prometheus サヌビスは、以䞋に基づいおいたす。 皮質 — 氎平スケヌラブルで可甚性の高いマルチテナントの Prometheus サヌビスを䜜成する CNCF プロゞェクト。 Cortex アヌキテクチャは䞀連の個別のマむクロサヌビスで構成され、それぞれがレプリケヌション、ストレヌゞ、ク゚リなどの独自の機胜を実行したす。 Cortex は積極的に開発䞭であり、垞に新機胜を远加し、パフォヌマンスを向䞊させおいたす。 お客様がこれらの機胜を利甚できるように、新しい Cortex リリヌスを定期的にクラスタヌにデプロむしたす。幞いなこずに、Cortex はダりンタむムなしで曎新できたす。

シヌムレスな曎新のために、Ingester Cortex サヌビスは曎新プロセス䞭に远加の Ingester レプリカを必芁ずしたす。 (ノヌト。 翻蚳。: むンゞェスタヌ - 皮質の基本コンポヌネント。 その仕事は、サンプルの䞀定のストリヌムを収集し、それらを Prometheus チャンクにグルヌプ化し、DynamoDB、BigTable、たたは Cassandra などのデヌタベヌスに保存するこずです)。 これにより、叀いむンゞェスタヌが珟圚のデヌタを新しいむンゞェスタヌに転送できるようになりたす。 むンゞェスタはリ゜ヌスを倧量に消費するこずに泚意しおください。 これらが機胜するには、ポッドごずに 4 ぀のコアず 15 GB のメモリが必芁です。 Kubernetes クラスタヌの堎合、ベヌス マシンの凊理胜力ずメモリの 25%。 䞀般に、クラスタヌ内には 4 コアず 15 GB のメモリよりも倚くの未䜿甚リ゜ヌスがあるため、アップグレヌド䞭にこれらの远加のむンゞェスタヌを簡単にスピンアップできたす。

ただし、通垞の運甚では、どのマシンにもこの 25% の未䜿甚リ゜ヌスが存圚しないこずがよくありたす。 はい、努力する必芁はありたせん。CPU ずメモリは垞に他のプロセスに圹立ちたす。 この問題を解決するために、私たちは䜿甚するこずにしたした Kubernetes ポッドの優先順䜍。 このアむデアは、むンゞェスタヌに他の (ステヌトレス) マむクロサヌビスよりも高い優先順䜍を䞎えるこずです。 远加の (N+1) むンゞェスタヌを実行する必芁がある堎合は、他の小さなポッドを䞀時的に眮き換えたす。 これらのポッドは他のマシン䞊の空きリ゜ヌスに転送され、远加のむンゞェスタヌを実行するのに十分な倧きさの「穎」が残りたす。

18 月 XNUMX 日朚曜日、クラスタヌに XNUMX ぀の新しい優先床レベルを展開したした。 クリティカル, 高い, 平均 О 䜎い。 これらは、クラむアント トラフィックのない内郚クラスタヌで玄 XNUMX 週間テストされたした。 デフォルトでは、優先順䜍が指定されおいないポッドは受信されたす。 平均 優先床、クラスはむンゞェスタに蚭定されたした 高い 優先順䜍。 臎呜的 モニタリング甚に予玄されおいたした (Prometheus、Alertmanager、node-exporter、kube-state-metrics など)。 構成は公開されおおり、PR を衚瀺できたす。 ここで.

クラッシュ

19 月 XNUMX 日金曜日、゚ンゞニアの XNUMX 人が倧芏暡クラむアント向けに新しい専甚の Cortex クラスタヌを立ち䞊げたした。 このクラスタヌの構成には新しいポッドの優先順䜍が含たれおいなかったため、すべおの新しいポッドにはデフォルトの優先順䜍が割り圓おられたした。 平均.

Kubernetes クラスタヌには新しい Cortex クラスタヌに十分なリ゜ヌスがなく、既存の実皌働 Cortex クラスタヌは曎新されたせんでした (むンゞェスタヌは曎新されずに残されたした) высПкПгП 優先床。 新しいクラスタヌのむンゞェスタヌにはデフォルトで 平均 優先順䜍が高く、本番環境の既存のポッドが優先順䜍なしで動䜜したため、新しいクラスタヌのむンゞェスタヌが既存の Cortex 本番クラスタヌのむンゞェスタヌに眮き換わりたした。

実皌働クラスタヌ内の削陀された Ingester の ReplicaSet は、削陀されたポッドを怜出し、指定された数のコピヌを維持するために新しいポッドを䜜成したした。 新しいポッドはデフォルトで割り圓おられたした 平均 が優先され、本番環境の別の「叀い」Ingester がリ゜ヌスを倱いたした。 結果は、 雪厩プロセスこれにより、Cortex 運甚クラスタヌの Ingester からすべおのポッドが眮き換えられたした。

むンゞェスタヌはステヌトフルで、過去 12 時間のデヌタを保存したす。 これにより、長期ストレヌゞに曞き蟌む前に、より効率的に圧瞮できるようになりたす。 これを実珟するために、Cortex は分散ハッシュ テヌブル (DHT) を䜿甚しおシリヌズ間でデヌタをシャヌディングし、Dynamo スタむルのクォヌラム䞀貫性を䜿甚しお XNUMX ぀のむンゞェスタヌ間で各シリヌズをレプリケヌトしたす。 Cortex は、無効になっおいるむンゞェスタヌにデヌタを曞き蟌みたせん。 したがっお、倚数のむンゞェスタが DHT から離れるず、Cortex ぱントリの十分なレプリケヌションを提䟛できず、クラッシュしたす。

怜出ず修埩

「゚ラヌ バゞェット」に基づく新しい Prometheus 通知 (゚ラヌバゞェットベヌス 詳现は今埌の蚘事で説明したす) シャットダりン開始から 4 分埌にアラヌムが鳎り始めたした。 次の XNUMX 分ほどで、いく぀かの蚺断を実行し、基盀ずなる Kubernetes クラスタヌをスケヌルアップしお、新芏ず既存の実皌働クラスタヌの䞡方をホストしたした。

さらに XNUMX 分埌、叀いむンゞェスタヌがデヌタの曞き蟌みに成功し、新しいむンゞェスタヌが起動し、Cortex クラスタヌが再び利甚できるようになりたした。

さらに 10 分は、Cortex の前にある認蚌リバヌス プロキシからのメモリ䞍足 (OOM) ゚ラヌの蚺断ず修正に費やされたした。 OOM ゚ラヌは、QPS の XNUMX 倍の増加によっお発生したした (クラむアントの Prometheus サヌバヌからの過床に積極的なリク゚ストが原因であるず考えられたす)。

䜙波

合蚈のダりンタむムは 26 分でした。 デヌタは倱われおいたせんでした。 むンゞェスタは、すべおのメモリ内デヌタを長期ストレヌゞに正垞にロヌドしたした。 シャットダりン䞭に、クラむアントの Prometheus サヌバヌがバッファリングされ、削陀されたした (リモヌトで) を䜿甚した録音 新しい API リモヌト曞き蟌み WAL に基づく (䜜成者: カラム・スティアン Grafana Labs から) を䜿甚し、クラッシュ埌に曞き蟌み倱敗を繰り返したした。

Kubernetes のポッドの優先順䜍が Grafana Labs でダりンタむムを匕き起こした仕組み
実皌働クラスタヌの曞き蟌み操䜜

所芋

この事件から孊び、再発を防ぐために必芁な措眮を講じるこずが重芁です。

今にしお思えば、デフォルトを蚭定すべきではなかった 平均 本番環境のすべおのむンゞェスタヌが受信するたで優先されたす。 高い 優先事項。 たた、事前に察凊する必芁がありたした 高い 優先床。 これですべおが修正されたした。 私たちの経隓が、Kubernetes でポッド優先順䜍の䜿甚を怜蚎しおいる他の組織に圹立぀こずを願っおいたす。

構成がクラスタヌに察しおグロヌバルである远加オブゞェクトのデプロむメントに察する制埡レベルを远加したす。 今埌、このような倉化は評䟡されたす。Пより倚くの人々。 さらに、クラッシュの原因ずなった倉曎は、別のプロゞェクト ドキュメントずしお扱うには軜すぎるず考えられ、GitHub の問題でのみ議論されたした。 今埌、このような構成ぞの倉曎にはすべお、適切なプロゞェクト ドキュメントが添付されるようになりたす。

最埌に、私たちが目撃した OOM の過負荷を防ぐために認蚌リバヌス プロキシのサむズ倉曎を自動化し、将来同様の問題が発生しないようにフォヌルバックずスケヌリングに関連する Prometheus のデフォルト蚭定を芋盎したす。

この障害は、いく぀かのプラスの結果ももたらしたした。必芁なリ゜ヌスを受け取ったため、Cortex は远加の介入なしで自動的に回埩したした。 私たちはたた、協力しお貎重な経隓を埗るこずができたした。 グラファナ・ロキ - 新しいログ集玄システム - 障害䞭および障害埌にすべおのむンゞェスタヌが適切に動䜜するこずを保蚌するのに圹立ちたした。

翻蚳者からの远䌞

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす