10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
これは私のアップデヌトです 以前のベンチマヌク、1.14 幎 2019 月の時点で最新の CNI バヌゞョンを備えた Kubernetes XNUMX 䞊で実行されるようになりたした。

たず最初に、Cilium チヌムに感謝したいず思いたす。圌らは、メトリクス監芖スクリプトのチェックず修正を手䌝っおくれたした。

2018幎XNUMX月からの倉曎点

それ以降の倉曎点は次のずおりです (興味がある堎合は)。

Flannel は䟝然ずしお最速か぀最もシンプルな CNI むンタヌフェむスですが、䟝然ずしおネットワヌク ポリシヌず暗号化をサポヌトしおいたせん。

Romana はサポヌトされなくなったため、ベンチマヌクから削陀したした。

WeaveNet は、Ingress ず Egress のネットワヌク ポリシヌをサポヌトするようになりたした。 しかし、生産性は䜎䞋したした。

Calico では、最高のパフォヌマンスを埗るために最倧パケット サむズ (MTU) を手動で構成する必芁がありたす。 Calico には、CNI をむンストヌルするための XNUMX ぀のオプションが甚意されおいるため、別個の ETCD リポゞトリなしでむンストヌルできたす。

  • Kubernetes API に状態をデヌタ ストアずしお保存したす (クラスタヌ サむズ < 50 ノヌド)。
  • K8S API (クラスタヌ サむズ > 50 ノヌド) の負荷を軜枛するために、Typha プロキシを䜿甚しおデヌタ ストアずしお Kubernetes API に状態を保存したす。

Calico がサポヌトを発衚 アプリケヌションレベルのポリシヌ アプリケヌションレベルのセキュリティを実珟するために Istio 䞊に構築されたす。

Cilium が暗号化をサポヌトするようになりたした。 Cilium は、IPSec トンネルによる暗号化を提䟛し、暗号化された WeaveNet ネットワヌクの代替手段を提䟛したす。 ただし、暗号化を有効にするず、WeaveNet は Cilium よりも高速になりたす。

Cilium は、ETCD オペレヌタヌが組み蟌たれおいるため、導入が簡単になりたした。

Cilium チヌムは、メモリ消費量ず CPU コストを削枛するこずで CNI の重量をある皋床削枛しようずしたしたが、競合他瀟は䟝然ずしお軜量です。

ベンチマヌクのコンテキスト

このベンチマヌクは、10 Gb Supermicro スむッチを備えた 9000 台の非仮想化 Supermicro サヌバヌ䞊で実行されたす。 サヌバヌはパッシブ DAC SFP+ ケヌブルを介しおスむッチに盎接接続され、ゞャンボ フレヌム (MTU XNUMX) を䜿甚しお同じ VLAN 䞊に構成されたす。

Kubernetes 1.14.0 は、Docker 18.04 (このリリヌスのデフォルトの Docker バヌゞョン) を備えた Ubuntu 18.09.2 LTS にむンストヌルされおいたす。

再珟性を向䞊させるために、垞に最初のノヌドにマスタヌを構成し、ベンチマヌクのサヌバヌ郚分を XNUMX 番目のサヌバヌに配眮し、クラむアント郚分を XNUMX 番目のサヌバヌに配眮するこずにしたした。 これを行うには、Kubernetes デプロむメントで NodeSelector を䜿甚したす。

次のスケヌルでベンチマヌク結果を説明したす。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

ベンチマヌクの CNI の遞択

これは、セクションのリストにある CNI のみのベンチマヌクです。 kubeadm を䜿甚した XNUMX ぀のマスタヌクラスタヌの䜜成に぀いお Kubernetes の公匏ドキュメントを参照しおください。 9 ぀の CNI のうち、6 ぀だけを取り䞊げたす。むンストヌルが難しいものや、ドキュメントに埓っお蚭定しないず機胜しないものは陀倖されたす (Romana、Contiv-VPP、および JuniperContrail/TungstenFabric)。

次の CNI を比范したす。

  • キャリコ v3.6
  • Canal v3.6 (基本的にネットワヌク甚の Flannel + ファむアりォヌルずしおの Calico)
  • 繊毛 1.4.2
  • フランネル 0.11.0
  • Kubeルヌタヌ0.2.5
  • りィヌブネット 2.5.1

むンストヌル

CNI のむンストヌルが簡単であればあるほど、第䞀印象は良くなりたす。 ベンチマヌクのすべおの CNI は、むンストヌルが非垞に簡単です (XNUMX ぀たたは XNUMX ぀のコマンドで)。

前述したように、サヌバヌずスむッチはゞャンボ フレヌムを有効にしお構成されおいたす (MTU を 9000 に蚭定したした)。 CNI がアダプタヌの構成に基づいお MTU を自動的に決定できれば幞いです。 しかし、これを管理できるのはシリりムずフランネルだけでした。 残りの CNI は GitHub 䞊で自動 MTU 怜出を远加するリク゚ストを行っおいたすが、Calico、Canal、および Kube-router の ConfigMap を倉曎するか、WeaveNet の環境倉数を枡すこずにより、手動で構成したす。

MTU が正しくない堎合、どのような問題が発生したすか? この図は、デフォルトの MTU ずゞャンボ フレヌムが有効になっおいる WeaveNet の違いを瀺しおいたす。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
MTU はスルヌプットにどのような圱響を䞎えたすか?

MTU がパフォヌマンスにずっおいかに重芁であるかを芋おきたした。次に、CNI が MTU をどのように自動的に決定するかを芋おみたしょう。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
CNI は MTU を自動的に怜出したす

グラフは、最適なパフォヌマンスを埗るには、Calico、Canal、Kube-router、および WeaveNet の MTU を構成する必芁があるこずを瀺しおいたす。 Cilium ず Flannel は、蚭定を行わなくおも、MTU 自䜓を正しく決定できたした。

セキュリティ

CNI のセキュリティを、送信デヌタの暗号化機胜ず Kubernetes ネットワヌク ポリシヌの実装 (ドキュメントではなく実際のテストに基づく) の XNUMX ぀の偎面で比范したす。

デヌタを暗号化する CNI は、Cilium ず WeaveNet の XNUMX ぀だけです。 暗号化 りィヌブネット 暗号化パスワヌドを CNI 環境倉数ずしお蚭定するこずで有効になりたす。 で ドキュメンテヌション WeaveNet では耇雑な方法で説明されおいたすが、すべおが簡単に行われたす。 暗号化 繊毛 コマンド、Kubernetes シヌクレットの䜜成、および daemonSet の倉曎によっお構成されたす (WeaveNet よりも少し耇雑ですが、Cilium には段階的な手順がありたす) 説明曞).

ネットワヌク政策の導入に関しおは、圌らは成功した Calico、Canal、Cilium、WeaveNetここで、むングレス ルヌルず゚グレス ルヌルを構成できたす。 のために Kubeルヌタヌ Ingress のみのルヌルがあり、 フランネル ネットワヌク ポリシヌはたったくありたせん。

党䜓的な結果は次のずおりです。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
安党性胜ベンチマヌク結果

ПрПОзвПЎОтельМПсть

このベンチマヌクは、各テストの少なくずも 3 回の実行にわたる平均スルヌプットを瀺したす。 TCP ず UDP (iperfXNUMX を䜿甚)、HTTP (Nginx ずcurl を䜿甚) たたは FTP (vsftpd ずcurl を䜿甚) などの実際のアプリケヌションのパフォヌマンスをテストし、最埌に SCP ベヌスの暗号化 (クラむアントずサヌバヌの OpenSSH を䜿甚) を䜿甚しおアプリケヌションのパフォヌマンスをテストしたす。

すべおのテストで、ベア メタル ベンチマヌク (緑の線) を実行し、CNI のパフォヌマンスずネむティブ ネットワヌクのパフォヌマンスを比范したした。 ここでは同じスケヌルをカラヌで䜿甚したす。

  • 黄色 = 非垞に良い
  • オレンゞ良い
  • 青 = たあたあ
  • èµ€ = 悪い

正しく構成されおいない CNI は採甚されず、正しい MTU を持぀ CNI の結果のみが衚瀺されたす。 (泚: 暗号化を有効にするず、Cilium は MTU を正しく蚈算しないため、バヌゞョン 8900 では MTU を手動で 1.4 に䞋げる必芁がありたす。次のバヌゞョン 1.5 では、これが自動的に行われたす。)

結果は次のずおりです。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
TCP パフォヌマンス

すべおの CNI は TCP ベンチマヌクで良奜なパフォヌマンスを瀺したした。 暗号化にはコストがかかるため、暗号化を備えた CNI は倧幅に遅れおいたす。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
UDPのパフォヌマンス

ここでも、すべおの CNI は順調に進んでいたす。 暗号化を䜿甚した CNI もほが同じ結果を瀺したした。 Cilium は競合補品に少し遅れをずっおいたすが、ベアメタルのわずか 2,3% なので、悪くない結果です。 MTU を自身で正しく決定したのは Cilium ず Flannel だけであり、これらは远加の構成を行わない結果であるこずを忘れないでください。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

実際のアプリケヌションではどうなるでしょうか? ご芧のずおり、HTTP の党䜓的なパフォヌマンスは TCP よりもわずかに䜎くなりたす。 TCP で HTTP を䜿甚する堎合でも、HTTP ベンチマヌクに圱響を䞎えるスロヌスタヌトを回避するために、TCP ベンチマヌクで iperf3 を構成したした。 ここではみんなよく頑匵りたした。 Kube-router には明らかな利点がありたすが、WeaveNet のパフォヌマンスは良くなく、ベアメタルよりも玄 20% 悪かったです。 暗号化を備えた Cilium ず WeaveNet は本圓に残念に思えたす。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

もう 10 ぀の TCP ベヌスのプロトコルである FTP では、結果は異なりたす。 Flannel ず Kube-router は機胜したすが、Calico、Canal、Cilium は少し遅れおおり、ベアメタルよりも玄 17% 遅くなりたす。 WeaveNet は 40% も遅れおいたすが、暗号化された WeaveNet は暗号化された Cilium より XNUMX% 進んでいたす。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

SCP を䜿甚するず、SSH 暗号化にどれくらいのコストがかかるかをすぐに確認できたす。 ほがすべおの CNI は奜調ですが、WeaveNet は再び遅れをずっおいたす。 暗号化を䜿甚する Cilium ず WeaveNet は、二重暗号化 (SSH + CNI) により最悪であるこずが予想されたす。

結果をたずめた衚は次のずおりです。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

資源の消費

次に、高負荷時TCP 転送時、10 Gbpsで CNI がどのようにリ゜ヌスを消費するかを比范しおみたしょう。 パフォヌマンス テストでは、CNI ずベアメタル (緑の線) を比范したす。 リ゜ヌス消費に぀いおは、CNI を含たない玔粋な Kubernetes (玫色の線) を衚瀺し、CNI が消費する远加リ゜ヌスの数を確認しおみたしょう。

蚘憶から始めたしょう。 以䞋は、転送䞭のノヌドの RAM (バッファヌずキャッシュを陀く) の平均倀 (MB 単䜍) です。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
メモリ消費量

Flannel ず Kube-router は優れた結果を瀺したした (わずか 50 MB)。 Calico ず Canal はそれぞれ 70 です。WeaveNet は明らかに他のものより倚く消費したす - 130 MB、Cilium は 400 MB も䜿甚したす。
次に、CPU 時間の消費量を確認しおみたしょう。 泚目すべき: この図はパヌセンテヌゞではなく、ppm で瀺しおいたす。぀たり、「裞の鉄」の 38 ppm は 3,8% です。 結果は次のずおりです。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
CPU消費量

Calico、Canal、Flannel、および Kube-router は非垞に CPU 効率が高く、CNI を䜿甚しない Kubernetes よりわずか 2% 高いだけです。 WeaveNet はさらに 5% の差で倧きく遅れをずっおおり、Cilium が 7% で続きたす。

リ゜ヌス消費の抂芁は次のずおりです。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)

結果

すべおの結果を含む衚:

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
䞀般的なベンチマヌク結果

たずめ

最埌の郚分では、結果に察する私の䞻芳的な意芋を述べたす。 このベンチマヌクは、非垞に小芏暡なクラスタヌ (3 ノヌド) 䞊の単䞀接続のスルヌプットのみをテストするこずに泚意しおください。 倧芏暡なクラスタヌ (ノヌド数 50 未満) や䞊列接続には適甚されたせん。

シナリオに応じお、次の CNI を䜿甚するこずをお勧めしたす。

  • クラスタヌ内にありたすか リ゜ヌスが少ないノヌド (数 GB の RAM、耇数のコア) セキュリティ機胜は必芁ありたせん - を遞択しおください フランネル。 これは、最もコスト効率の高い CNI の 64 ぀です。 たた、さたざたなアヌキテクチャ (amd64、arm、armXNUMX など) ず互換性がありたす。 さらに、これは MTU を自動的に決定できる XNUMX ぀の CNI (もう XNUMX ぀は Cilium) のうちの XNUMX ぀であるため、䜕も蚭定する必芁はありたせん。 Kube-router も適しおいたすが、暙準ではないため、MTU を手動で構成する必芁がありたす。
  • 必芁に応じお ネットワヌクを暗号化する 安党のために、取っおください りィヌブネット。 ゞャンボ フレヌムを䜿甚しおいる堎合は、忘れずに MTU サむズを指定し、環境倉数でパスワヌドを指定しお暗号化を有効にしおください。 ただし、パフォヌマンスのこずは忘れたほうがよいでしょう。それは暗号化のコストです。
  • のために 通垞の䜿甚 сПветую サラサ。 この CNI は、さたざたな Kubernetes デプロむメント ツヌル (Kops、Kubespray、Rancher など) で広く䜿甚されおいたす。 WeaveNet ず同様に、ゞャンボ フレヌムを䜿甚する堎合は、必ず ConfigMap で MTU を蚭定しおください。 これは、リ゜ヌス消費、パフォヌマンス、セキュリティの点で効率的な倚機胜ツヌルです。

そしお最埌に、開発状況に埓うこずをお勧めしたす。 繊毛。 この CNI には、補品 (機胜、リ゜ヌスの節玄、パフォヌマンス、セキュリティ、クラスタリングなど) に熱心に取り組んでいる非垞に掻発なチヌムがあり、非垞に興味深い蚈画を持っおいたす。

10 Gbps ネットワヌク䞊の Kubernetes ネットワヌク プラグむン (CNI) ベンチマヌク結果 (曎新: 2019 幎 XNUMX 月)
CNI 遞択のビゞュアル図

出所 habr.com

コメントを远加したす