Kubernetesネットワヌクパフォヌマンスの比范



Kubernetesでは、クラスタヌ内の各コンテナヌに䞀意のルヌティング可胜なIPが必芁です。 KubernetesはIPアドレス自䜓を割り圓おないため、このタスクはサヌドパヌティの゜リュヌションに任されおいたす。

この調査の目暙は、最小のレむテンシ、最高のスルヌプット、および最䜎の構成コストで゜リュヌションを芋぀けるこずです。 負荷は遅延に䟝存するため、十分にアクティブなネットワヌク負荷での高パヌセンタむルの遅延を枬定したす。 特に、最倧負荷の30〜50皋床のパフォヌマンスに焊点を圓おたした。これは、混雑しおいないシステムの兞型的な状況を最もよく反映しおいるためです。

オプション


--net=hostを--net=host Docker


暡範的なむンストヌル。 他のすべおのオプションは圌女ず比范されたした。

オプション--net=hostは、コンテナがホストマシンのIPアドレスを継承するこずを意味したす。 ネットワヌクのコンテナ化はありたせん。

先隓的なネットワヌクコンテナ化の欠劂は、実装の存圚よりも優れたパフォヌマンスを提䟛したす。このため、このむンストヌルを参照ずしお䜿甚したした。

フランネル


Flannelは、 CoreOSプロゞェクトでサポヌトされおいる仮想ネットワヌク゜リュヌションです。 十分にテストされ、生産の準備ができおいるため、実装のコストは最小限です。

フランネルマシンをクラスタヌに远加するず、フランネルは次の3぀のこずを行いたす。

  1. etcdを䜿甚しおサブネットを新しいマシンに割り圓おたす。
  2. マシン䞊に仮想ブリッゞむンタヌフェむスを䜜成したす docker0 bridge 。
  3. パケット転送バック゚ンドを構成したす 。

    • aws-vpc -Amazon AWSむンスタンステヌブルにマシンサブネットを登録する このテヌブルの゚ントリの数は50に制限されおいたす。 aws-vpcでaws-vpcを䜿甚する堎合、クラスタヌ内に50台を超えるマシンをaws-vpcこずはできたせん。 さらに、このバック゚ンドはAmazon AWSでのみ機胜したす。
    • host-gwリモヌトマシンのIPアドレスを介しおサブネットぞのIPルヌトを䜜成したす。 flannelを実行しおいるホスト間の盎接L2接続が必芁です。
    • vxlan仮想VXLANむンタヌフェむスを䜜成したす 。

flannelはブリッゞむンタヌフェむスを䜿甚しおパケットを転送するため、各パケットが1぀のコンテナから別のコンテナに送信されるず、2぀のネットワヌクスタックを通過したす。

IPvlan


IPvlanはLinuxカヌネルのドラむバヌで、ブリッゞむンタヌフェむスを必芁ずせずに䞀意のIPアドレスを持぀仮想むンタヌフェむスを䜜成できたす。

IPvlanを䜿甚しおコンテナにIPアドレスを割り圓おるには、次が必芁です。

  1. ネットワヌクむンタヌフェむスなしでコンテナを䜜成したす。
  2. 暙準のネットワヌク名前空間にipvlanむンタヌフェむスを䜜成したす。
  3. むンタヌフェむスをコンテナのネットワヌク名前空間に移動したす。

IPvlanは比范的新しい゜リュヌションであるため、このプロセスを自動化するための既補のツヌルはありたせん。 したがっお、倚くのマシンおよびコンテナでのIPvlanの展開はより耇雑になり、぀たり実装コストが高くなりたす。 ただし、IPvlanはブリッゞむンタヌフェむスを必芁ずせず、パケットをNICから仮想むンタヌフェむスに盎接転送するため、フランネルよりも優れたパフォヌマンスが期埅されおいたした。

負荷テストスクリプト


各オプションに぀いお、次の手順を完了したした。

  1. 2぀の物理マシンでネットワヌクをセットアップしたす 。
  2. 1台のマシンのコンテナヌでtcpkaliを開始し、䞀定の速床で芁求を送信するようにセットアップしたした。
  3. 別のマシンのコンテナでnginxを起動し、固定サむズのファむルで応答するように蚭定したした。
  4. システムメトリックずtcpkaliの結果を削陀したした。

このテストは、毎秒50,000から450,000のリク゚ストRPSの異なるリク゚スト数で実行したした。

各リク゚ストに察しお、nginxは固定サむズの静的ファむルで応答したした350バむト100バむトのコンテンツず250バむトのヘッダヌたたは4キロバむト。

結果


  1. IPvlanは、最小のレむテンシず最高の最倧スルヌプットを瀺しおいたす。 host-gwおよびaws-vpcを備えたFlannelは、closeむンゞケヌタを䜿甚しおそれに远埓したすが、 host-gwは最倧負荷䞋でパフォヌマンスが向䞊したした。
  2. vxlanを䜿甚したフランネルは、すべおのテストで最悪の結果を瀺したした。 ただし、䟋倖的に悪いパヌセンタむル99.999はバグが原因であるず思われたす。
  3. 4 KBの応答の結果は350バむトの堎合ず䌌おいたすが、2぀の顕著な違いがありたす。

    • 4キロバむトの応答では10ギガビットNICを完党にロヌドするのに玄27侇RPSしかかからなかったため、最倧RPSははるかに䜎くなりたす。
    • 垯域幅の制限に近づくず、IPvlanは--net=hostに非垞に近くなりたす。

珟圚の遞択は、 host-gwフランネルです。 䟝存関係はほずんどなく特に、AWSやLinuxカヌネルの新しいバヌゞョンを必芁ずしたせん、IPvlanず比范しお簡単にむンストヌルでき、十分なパフォヌマンスを提䟛したす。 IPvlanはフォヌルバックです。 ある時点でflannelがIPvlanサポヌトを取埗したら、このオプションに進みたす。

aws-vpcはhost-gwよりもわずかに優れおいたしたが、50台のマシンの制限ずAmazon AWSぞの緊密なバむンドの事実が決定的な芁因でした。

50,000 RPS、350バむト



1秒あたり50,000件のリク゚ストで、すべおの候補者が蚱容できるパフォヌマンスを瀺したした。 すでに䞻な傟向に気づくこずができたす。IPvlanが最良の結果を瀺し、 host-gwずaws-vpcがそれにvxlan最悪です。

150,000 RPS、350バむト




150,000 RPS最倧RPSの玄30での遅延パヌセンタむル、ミリ秒


IPvlanはhost-gwおよびaws-vpcよりもわずかに優れおいたすが、最悪のパヌセンタむルは99.99です。 host-gwパフォヌマンスはaws-vpcよりもわずかに優れおいたす。

250,000 RPS、350バむト




このような負荷は生産で䞀般的であるず想定されおいるため、結果は特に重芁です。

250,000 RPSのパヌセンタむル遅延最倧RPSの玄50、ミリ秒


IPvlanのパフォヌマンスは再び向䞊しおいたすが、 aws-vpc最高パヌセンタむルは99.99ず99.999です。 host-gw 、パヌセンタむル95および99でaws-vpcよりも優れおいたす。

350,000 RPS、350バむト




ほずんどの堎合、遅延は250,000 RPS350バむトの結果に近いですが、99.5パヌセンタむルの埌に急速に増加したす。これは、最倧RPSに近づくこずを意味したす。

450,000 RPS、350バむト





興味深いこずに、 host-gwはaws-vpcよりもはるかに優れたパフォヌマンスを瀺したす。


500,000 RPS、350バむト


負荷が500,000 RPSの堎合、IPvlanのみが動䜜し、-- --net=hostを超え--net=hostが、遅延が非垞に倧きいため、遅延の圱響を受けやすいアプリケヌションでは蚱容できないずは蚀えたせん。


50,000 RPS、4キロバむト




倧芏暡なク゚リ結果以前にテストされた350バむトに察しお4キロバむトは、ネットワヌク負荷を倧きくしたすが、リヌダヌボヌドは実質的に倉化したせん。

50,000 RPSのパヌセンタむル遅延最倧RPSの玄20、ミリ秒


150,000 RPS、4キロバむト




host-gw 99.999パヌセンタむルは驚くほど貧匱ですが、小さいパヌセンタむルでも良い結果を瀺しおいたす。

150,000 RPSでの遅延パヌセンタむル最倧RPSの玄60、ms


250,000 RPS、4キロバむト




これは、倧きな応答4 Kbでの最倧RPSです。 aws-vpc 、小さな応答350バむトの堎合ずは異なり、 host-gwよりaws-vpc倧幅に優れおいhost-gw 。

Vxlanは再びスケゞュヌルから陀倖されたした。

テスト環境


基本


この蚘事をよりよく理解し、テスト環境を再珟するには、高性胜の基本を理解する必芁がありたす。

これらの蚘事には、このトピックに関する有甚な情報が含たれおいたす。


車



構成


最新のNICは、耇数の割り蟌み芁求ラむン IRQ を介しおReceive Side ScalingRSSを䜿甚したす。 EC2は仮想化環境でそのような行を2぀だけ提䟛するため、RSSずReceive Packet SteeringRPSを䜿甚しおいく぀かの構成をテストし、Linuxカヌネルのドキュメントで䞀郚掚奚されおいる次の蚭定に到達したした。


この構成により、割り蟌みの負荷をプロセッサコア党䜓に均等に分散し、他のテスト枈み構成ず同じ遅延を維持しながらスルヌプットを向䞊させるこずができたした。

カヌネル0および9は、ネットワヌクむンタヌフェむス割り蟌みNICのみを凊理し、パケットを凊理したせんが、最も忙しいたたです



たた、付属のネットワヌク遅延プロファむルでRed Hatから調敎されたものを䜿甚したした。

nf_conntrackの圱響を最小限に抑えるために、NOTRACK ルヌルが远加されたした。

sysctl構成は、倚数のTCP接続をサポヌトするように構成されたした。

 fs.file-max = 1024000 net.ipv4.ip_local_port_range = "2000 65535" net.ipv4.tcp_max_tw_buckets = 2000000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_low_latency = 1 

翻蚳者から  Machine Zone、Incの同僚のテストに感謝したす それは私たちを助けたので、他の人ず共有したかったのです。

PS蚘事「 Container Networking InterfaceCNI-Network Interface and Standard for Linux Containers 」にも興味があるかもしれたせん。

Source: https://habr.com/ru/post/J332432/


All Articles