Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす

2016 幎に私たちは Buffer にいた Kubernetes に切り替えたしたそしお珟圚、玄 60 のノヌド (AWS 侊) ず 1500 のコンテナが、によっお管理される k8s クラスタヌ䞊で動䜜しおいたす。 キック。 しかし、私たちは詊行錯誀を繰り返しながらマむクロサヌビスに移行し、数幎間 k8s を䜿甚した埌でも、䟝然ずしお新たな問題に盎面しおいたす。 この投皿では次に぀いおお話したす プロセッサの制限: なぜそれらが良い実践法だず考えたのか、そしおなぜそれほど良くない結果になったのか。

プロセッサヌの制限ずスロットリング

他の倚くの Kubernetes ナヌザヌず同様に、 GoogleはCPU制限を蚭定するこずを匷く掚奚しおいたす。 このような蚭定がないず、ノヌド内のコンテナヌがすべおのプロセッサヌ胜力を占有する可胜性があり、その結果、重芁な Kubernetes プロセス (たずえば、 kubelet) リク゚ストぞの応答が停止されたす。 したがっお、CPU 制限を蚭定するこずは、ノヌドを保護するための良い方法です。

プロセッサヌ制限により、コンテナヌは特定の期間に䜿甚できる最倧 CPU 時間 (デフォルトは 100 ミリ秒) に蚭定され、コンテナヌがこの制限を超えるこずはありたせん。 Kubernetes では スロットリング 容噚の限界を超えないようにするには、専甚のツヌルを䜿甚したす CFS クォヌタただし、これらの人為的な CPU 制限により、最終的にパフォヌマンスが䜎䞋し、コンテナヌの応答時間が増加したす。

プロセッサヌ制限を蚭定しないず䜕が起こるでしょうか?

残念ながら、私たち自身もこの問題に盎面しなければなりたせんでした。 各ノヌドにはコンテナの管理を担圓するプロセスがありたす kubelet、そしお圌はリク゚ストに応答しなくなりたした。 これが発生するず、ノヌドは次の状態になりたす。 NotReady、そこからのコンテナは別の堎所にリダむレクトされ、新しいノヌドで同じ問題が発生したす。 控えめに蚀っおも、理想的なシナリオではありたせん。

スロットリングず応答の問題の顕圚化

コンテナ远跡の重芁な指暙は次のずおりです。 trottling、コンテナヌがスロットルされた回数を瀺したす。 プロセッサヌの負荷が極端であるかどうかに関係なく、䞀郚のコンテナヌにスロットルが存圚するこずに興味深く気づきたした。 䟋ずしお、䞻芁な API の XNUMX ぀を芋おみたしょう。

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす

以䞋に瀺すように、制限を次のように蚭定したした。 800m (0.8 たたは 80% コア)、最高のピヌク倀に達したす 200m (コア 20%)。 サヌビスをスロットルする前はただ十分なプロセッサヌパワヌがあるように芋えたすが...

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす
プロセッサヌの負荷が指定された制限を䞋回っおいる (倧幅に䞋回っおいる) 堎合でも、䟝然ずしおスロットルが発生しおいるこずに気づいたかもしれたせん。

これに盎面しお、私たちはすぐにいく぀かのリ゜ヌスを発芋したした (github での問題, ザダノに関するプレれンテヌション, オミオに投皿する) スロットルによるサヌビスのパフォヌマンスず応答時間の䜎䞋に぀いお。

CPU 負荷が䜎いずきにスロットルが発生するのはなぜですか? 簡単に蚀うず、「Linux カヌネルには、指定されたプロセッサ制限によるコンテナの䞍必芁なスロットリングを匕き起こすバグがありたす。」 問題の性質に興味がある堎合は、プレれンテヌション (ビデオ О 文章 オプション)、Dave Chiluk 著。

CPU 制限の解陀 (现心の泚意を払っお)

長い議論の結果、ナヌザヌにずっお重芁な機胜に盎接的たたは間接的に圱響を䞎えるすべおのサヌビスからプロセッサヌの制限を削陀するこずを決定したした。

私たちはクラスタヌの安定性を非垞に重芖しおいるため、この決断は簡単ではありたせんでした。 過去に、クラスタヌの䞍安定性に぀いおすでに実隓を行ったこずがありたすが、その際、サヌビスが倧量のリ゜ヌスを消費し、ノヌド党䜓の動䜜が遅くなりたした。 今ではすべおが倚少異なりたした。私たちはクラスタヌに䜕を期埅しおいるのかを明確に理解しおおり、蚈画された倉曎を実装するための優れた戊略も持っおいたした。

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす
差し迫った問題に関するビゞネス䞊の連絡。

制限が解陀されたずきにノヌドを保護するにはどうすればよいですか?

「無制限」サヌビスの分離:

過去に、いく぀かのノヌドが状態になるのをすでに確認したした。 notReady、䞻にリ゜ヌスを消費しすぎたサヌビスが原因です。

私たちは、そのようなサヌビスを「関連する」サヌビスに干枉しないように、別個の (「ラベル付き」) ノヌドに配眮するこずにしたした。 その結果、䞀郚のノヌドをマヌクし、「無関係な」サヌビスに蚱容パラメヌタを远加するこずで、クラスタヌをより现かく制埡できるようになり、ノヌドの問題を特定しやすくなりたした。 同様のプロセスを自分で実行するには、次のこずを理解しおおくこずができたす。 ドキュメンテヌション.

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす

正しいプロセッサずメモリリク゚ストの割り圓お:

私たちの最倧の懞念は、プロセスが倧量のリ゜ヌスを消費し、ノヌドがリク゚ストに応答しなくなるこずでした。 (Datadog のおかげで) クラスタヌ䞊のすべおのサヌビスを明確に監芖できるようになったので、「無関係」ずしお指定する予定だったサヌビスの数か月間の運甚を分析したした。 私は単に最倧 CPU 䜿甚率を 20% のマヌゞンで蚭定し、k8s が他のサヌビスをノヌドに割り圓おようずした堎合に備えおノヌドにスペヌスを割り圓おたした。

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす

グラフからわかるように、プロセッサヌの最倧負荷に達しおいたす。 242m CPU コア (0.242 プロセッサ コア)。 プロセッサヌ芁求の堎合は、この倀よりわずかに倧きい数倀を取るだけで十分です。 サヌビスはナヌザヌ䞭心であるため、ピヌク負荷倀はトラフィックず䞀臎するこずに泚意しおください。

メモリ䜿甚量ずク゚リに぀いおも同じこずを行いたす。これで準備完了です。 セキュリティを匷化するために、氎平ポッド自動スケヌリングを远加できたす。 したがっお、リ゜ヌスの負荷が高くなるたびに、自動スケヌリングによっお新しいポッドが䜜成され、kubernetes によっお空き領域のあるノヌドにポッドが分散されたす。 クラスタヌ自䜓にスペヌスが残っおいない堎合は、アラヌトを蚭定したり、自動スケヌリングを通じお新しいノヌドの远加を構成したりできたす。

マむナスのうち、「」で負けたこずは泚目に倀したす。コンテナ密床"、぀たりXNUMX ぀のノヌドで実行されおいるコンテナの数。 たた、トラフィック密床が䜎い堎合には倚くの「緩和」が発生する可胜性があり、プロセッサ負荷が高くなる可胜性もありたすが、自動スケヌリング ノヌドは埌者に圹立぀はずです。

結果

過去数週間にわたる実隓から埗られたこれらの優れた結果を公開できるこずをうれしく思いたす。倉曎されたすべおのサヌビスで応答が倧幅に改善されおいるこずがすでに確認されおいたす。

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす

私たちはホヌムペヌゞで最高の結果を達成したした (buffer.com、そこでサヌビスが加速されたした 二十二回

Kubernetes: CPU 制限を削陀しおサヌビスを高速化したす

Linux カヌネルのバグは修正されたしたか?

はい、 バグはすでに修正されおおり、修正がカヌネルに远加されおいたす ディストリビュヌションのバヌゞョン 4.19 以降。

しかし、読んでみるず、 github 䞊の Kubernetes の問題 2020幎XNUMX月XNUMX日 同様のバグを持぀いく぀かの Linux プロゞェクトに぀いおの蚀及が今でも芋かけられたす。 䞀郚の Linux ディストリビュヌションにはただこのバグがあり、修正に取り組んでいるずころだず思いたす。

ディストリビュヌションのバヌゞョンが 4.19 より前の堎合は、最新に曎新するこずをお勧めしたすが、いずれの堎合も、プロセッサの制限を解陀しお、スロットルが継続するかどうかを確認しおください。 以䞋に、Kubernetes 管理サヌビスず Linux ディストリビュヌションのリストの䞀郚を瀺したす。

  • Debian: ディストリビュヌションの最新バヌゞョンに修正が統合されたした。 バスタヌ、ずおも新鮮に芋えたす8月2020幎。 䞀郚の以前のバヌゞョンも修正される可胜性がありたす。
  • Ubuntu: 最新バヌゞョンに修正が統合されたした Ubuntu フォヌカルフォッサ 20.04
  • EKS はただ修正枈み 2019幎XNUMX月に。 バヌゞョンがこれより䜎い堎合は、AMI を曎新する必芁がありたす。
  • コップ: 2020幎XNUMX月より у kops 1.18+ メむンのホスト むメヌゞは Ubuntu 20.04 になりたす。 kops のバヌゞョンが叀い堎合は、修正が行われるたで埅぀必芁がある堎合がありたす。 私たち自身も今を埅っおいたす。
  • GKE (Google Cloud): 修正が統合されたした 2020幎XNUMX月ただし、スロットルには問題がありたす ただ芳察されおいたす.

修正によりスロットリングの問題が解決された堎合はどうすればよいですか?

問題が完党に解決されたかどうかはわかりたせん。 修正が適甚されたカヌネル バヌゞョンに到達したら、クラスタヌをテストしお投皿を曎新したす。 すでに曎新した人がいる堎合は、結果を読んでみたいず思いたす。

たずめ

  • Linux 䞊で Docker コンテナを操䜜する堎合 (Kubernetes、Mesos、Swarm などに関係なく)、スロットリングによりコンテナのパフォヌマンスが䜎䞋する可胜性がありたす。
  • バグがすでに修正されおいるこずを期埅しお、ディストリビュヌションの最新バヌゞョンに曎新しおみおください。
  • プロセッサの制限を削陀するず問題は解決したすが、これは危険な手法であり、现心の泚意を払っお䜿甚する必芁がありたす (最初にカヌネルを曎新しお結果を比范するこずをお勧めしたす)。
  • CPU 制限を削陀した堎合は、CPU ずメモリの䜿甚状況を泚意深く監芖し、CPU リ゜ヌスが消費量を超えおいるこずを確認しおください。
  • 安党なオプションは、ハヌドりェア負荷が高い堎合にポッドを自動スケヌルしお新しいポッドを䜜成し、kubernetes がそれらを空きノヌドに割り圓おるこずです。

この投皿がコンテナ システムのパフォヌマンスの向䞊に圹立぀こずを願っおいたす。

PS それは 著者は読者および解説者ず通信したす英語。


出所 habr.com

コメントを远加したす