Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Toto je moja aktualizácia predchádzajúci benchmark, ktorý teraz beží na Kubernetes 1.14 s najnovšou verziou CNI od apríla 2019.

V prvom rade sa chcem poďakovať tímu Cilium: chlapci mi pomohli skontrolovať a opraviť skripty monitorovania metrík.

Čo sa zmenilo od novembra 2018

Tu je to, čo sa odvtedy zmenilo (ak vás to zaujíma):

Flannel zostáva najrýchlejším a najjednoduchším rozhraním CNI, ale stále nepodporuje sieťové politiky a šifrovanie.

Romana už nie je podporovaná, preto sme ju odstránili z benchmarku.

WeaveNet teraz podporuje sieťové politiky pre Ingress a Egress! Ale produktivita klesla.

V Calico stále musíte manuálne nakonfigurovať maximálnu veľkosť paketu (MTU), aby ste dosiahli najlepší výkon. Calico ponúka dve možnosti inštalácie CNI, takže sa zaobídete bez samostatného úložiska ETCD:

  • stav uloženia v Kubernetes API ako úložisko údajov (veľkosť klastra < 50 uzlov);
  • stav ukladania v Kubernetes API ako úložisko údajov s proxy Typha na odľahčenie K8S API (veľkosť klastra > 50 uzlov).

Calico oznámilo podporu pravidlá na úrovni aplikácie na vrchole Istio pre zabezpečenie na úrovni aplikácie.

Cilium teraz podporuje šifrovanie! Cilium poskytuje šifrovanie pomocou IPSec tunelov a ponúka alternatívu k šifrovanej sieti WeaveNet. WeaveNet je však rýchlejší ako Cilium s povoleným šifrovaním.

Cilium je teraz jednoduchšie nasadiť vďaka zabudovanému operátorovi ETCD.

Tím Cilium sa pokúsil znížiť hmotnosť svojho CNI znížením spotreby pamäte a nákladov na CPU, ale jeho konkurenti sú stále ľahší.

Kontext benchmarku

Benchmark beží na troch nevirtualizovaných serveroch Supermicro s 10 Gb prepínačom Supermicro. Servery sú pripojené priamo k prepínaču pomocou pasívnych káblov DAC SFP+ a sú nakonfigurované na rovnakej VLAN s jumbo rámcami (MTU 9000).

Kubernetes 1.14.0 nainštalovaný na Ubuntu 18.04 LTS s Docker 18.09.2 (predvolená verzia Docker v tomto vydaní).

Pre zlepšenie reprodukovateľnosti sme sa rozhodli vždy nakonfigurovať master na prvý uzol, serverovú časť benchmarku umiestniť na druhý server a klientsku časť na tretí. Na tento účel používame NodeSelector v nasadení Kubernetes.

Výsledky benchmarku popíšeme na nasledujúcej škále:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

Výber CNI pre benchmark

Toto je benchmark iba pre CNI zo zoznamu v sekcii o vytvorení jedného hlavného klastra pomocou kubeadm Pozrite si oficiálnu dokumentáciu Kubernetes. Z 9 CNI vezmeme len 6: vylúčime tie, ktoré sa ťažko inštalujú a/alebo nefungujú bez konfigurácie podľa dokumentácie (Romana, Contiv-VPP a JuniperContrail/TungstenFabric).

Porovnáme nasledujúce CNI:

  • Calico v3.6
  • Canal v3.6 (v podstate Flannel pre siete + Calico ako firewall)
  • Cilium 1.4.2
  • Flanel 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

Inštalácia

Čím jednoduchšia je inštalácia CNI, tým lepší bude náš prvý dojem. Všetky CNI z benchmarku sa inštalujú veľmi jednoducho (s jedným alebo dvoma príkazmi).

Ako sme povedali, servery a prepínač sú nakonfigurované s povolenými jumbo rámcami (nastavili sme MTU na 9000). Boli by sme radi, keby CNI automaticky určilo MTU na základe konfigurácie adaptérov. Toto sa však podarilo iba Ciliumovi a Flanelovi. Zvyšok CNI má na GitHub požiadavky na pridanie automatického zisťovania MTU, ale nakonfigurujeme ho manuálne zmenou ConfigMap pre Calico, Canal a Kube-router alebo odovzdaním premennej prostredia pre WeaveNet.

Aký je problém s nesprávnym MTU? Tento diagram ukazuje rozdiel medzi WeaveNet so zapnutým predvoleným MTU a jumbo rámcami:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Ako MTU ovplyvňuje priepustnosť?

Videli sme, aké dôležité je MTU pre výkon, teraz sa pozrime, ako ho automaticky určujú naše CNI:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
CNI automaticky detekuje MTU

Graf ukazuje, že pre optimálny výkon musíte nakonfigurovať MTU pre Calico, Canal, Kube-router a WeaveNet. Cilium a Flannel dokázali sami správne určiť MTU bez akýchkoľvek nastavení.

zabezpečenia

Bezpečnosť CNI budeme porovnávať v dvoch aspektoch: schopnosť šifrovať prenášané dáta a implementácia sieťových politík Kubernetes (na základe reálnych testov, nie dokumentácie).

Iba dve CNI šifrujú údaje: Cilium a WeaveNet. Šifrovanie WeaveNet povolené nastavením šifrovacieho hesla ako premennej prostredia CNI. IN dokumentáciu WeaveNet to opisuje komplikovane, ale všetko sa robí jednoducho. Šifrovanie cilium nakonfigurovaný pomocou príkazov, vytvorením tajomstiev Kubernetes a úpravou daemonSet (trochu komplikovanejšie ako vo WeaveNet, ale Cilium má krok za krokom inštrukcie).

Čo sa týka implementácie sieťovej politiky, podarilo sa im to Calico, Canal, Cilium a WeaveNet, v ktorom môžete nakonfigurovať pravidlá Ingress a Egress. Pre Kube-smerovač existujú pravidlá len pre Ingress a flanel Neexistujú vôbec žiadne sieťové pravidlá.

Tu sú celkové výsledky:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Výsledky testovania výkonnosti v oblasti bezpečnosti

produktivita

Tento benchmark ukazuje priemernú priepustnosť počas najmenej troch spustení každého testu. Testujeme výkon TCP a UDP (pomocou iperf3), skutočných aplikácií ako HTTP (s Nginx a curl) alebo FTP (s vsftpd a curl) a nakoniec výkon aplikácií pomocou šifrovania na báze SCP (pomocou klienta a servera OpenSSH).

Pri všetkých testoch sme vykonali benchmark holých kovov (zelená čiara), aby sme porovnali výkon CNI s výkonom natívnej siete. Tu používame rovnakú stupnicu, ale vo farbe:

  • Žltá = veľmi dobrá
  • Oranžová = dobrá
  • Modrá = tak-tak
  • Červená = zlé

Nebudeme brať nesprávne nakonfigurované CNI a zobrazíme len výsledky pre CNI so správnou MTU. (Poznámka: Cilium správne nevypočíta MTU, ak povolíte šifrovanie, takže budete musieť manuálne znížiť MTU na 8900 vo verzii 1.4. Ďalšia verzia, 1.5, to robí automaticky.)

Tu sú výsledky:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Výkon TCP

Všetky CNI fungovali dobre v benchmarku TCP. CNI so šifrovaním výrazne zaostáva, pretože šifrovanie je drahé.

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Výkon UDP

Aj tu sa všetkým CNI darí. CNI so šifrovaním vykázali takmer rovnaký výsledok. Cilium trochu zaostáva za konkurenciou, ale je to len 2,3 % holého kovu, takže to nie je zlý výsledok. Nezabudnite, že iba Cilium a Flannel si sami správne určili MTU a toto sú ich výsledky bez ďalšej konfigurácie.

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

A čo skutočná aplikácia? Ako vidíte, celkový výkon pre HTTP je o niečo nižší ako pre TCP. Aj keď používate HTTP s TCP, iperf3 sme nakonfigurovali v benchmarku TCP, aby sme sa vyhli pomalému štartu, ktorý by ovplyvnil benchmark HTTP. Všetci tu odviedli dobrú prácu. Kube-router má jasnú výhodu, ale WeaveNet nefungoval dobre: ​​asi o 20% horší ako holý kov. Cilium a WeaveNet so šifrovaním vyzerajú naozaj smutne.

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

S FTP, ďalším protokolom založeným na TCP, sa výsledky líšia. Flannel a Kube-router to robia, ale Calico, Canal a Cilium sú trochu pozadu a sú asi o 10% pomalšie ako holý kov. WeaveNet zaostáva až o 17 %, ale šifrovaný WeaveNet je o 40 % pred šifrovaným Cilium.

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

S SCP okamžite vidíme, koľko nás stojí šifrovanie SSH. Takmer všetky CNI sú na tom dobre, ale WeaveNet opäť zaostáva. Cilium a WeaveNet so šifrovaním sú na tom podľa očakávania najhoršie kvôli dvojitému šifrovaniu (SSH + CNI).

Tu je súhrnná tabuľka s výsledkami:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

Spotreba zdrojov

Teraz si porovnajme, ako CNI spotrebúva zdroje pri veľkom zaťažení (počas prenosu TCP, 10 Gbps). Vo výkonnostných testoch porovnávame CNI s holým kovom (zelená čiara). Pokiaľ ide o spotrebu zdrojov, ukážme čistý Kubernetes (fialová čiara) bez CNI a uvidíme, koľko zdrojov navyše CNI spotrebuje.

Začnime pamäťou. Tu je priemerná hodnota pamäte RAM uzlov (okrem vyrovnávacích pamätí a vyrovnávacej pamäte) v MB počas prenosu.

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Spotreba pamäte

Flannel a Kube-router ukázali vynikajúce výsledky - iba 50 MB. Calico a Canal majú po 70. WeaveNet jednoznačne spotrebuje viac ako ostatné – 130 MB a Cilium ich spotrebuje až 400.
Teraz skontrolujeme spotrebu času procesora. Pozoruhodné: diagram neukazuje percentá, ale ppm, to znamená, že 38 ppm pre „holé železo“ je 3,8 %. Tu sú výsledky:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
spotreba CPU

Calico, Canal, Flannel a Kube-router sú veľmi efektívne CPU – iba o 2 % viac ako Kubernetes bez CNI. WeaveNet výrazne zaostáva s extra 5 %, nasleduje Cilium so 7 %.

Tu je súhrn spotreby zdrojov:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)

Výsledky

Tabuľka so všetkými výsledkami:

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Všeobecné výsledky benchmarku

Záver

V poslednej časti vyjadrím svoj subjektívny názor na výsledky. Pamätajte, že tento benchmark testuje iba priepustnosť jedného pripojenia na veľmi malom klastri (3 uzly). Neplatí pre veľké klastre (<50 uzlov) alebo paralelné pripojenia.

Odporúčam použiť nasledujúce CNI v závislosti od scenára:

  • Máte vo svojom klastri uzly s malým množstvom zdrojov (niekoľko GB RAM, niekoľko jadier) a nepotrebujete bezpečnostné funkcie - vyberte si flanel. Ide o jeden z nákladovo najefektívnejších CNI. A je kompatibilný so širokou škálou architektúr (amd64, arm, arm64 atď.). Okrem toho je to jeden z dvoch (druhý je Cilium) CNI, ktorý dokáže automaticky určiť MTU, takže nemusíte nič konfigurovať. Kube-router je tiež vhodný, ale nie je štandardom a budete musieť manuálne nakonfigurovať MTU.
  • V prípade potreby zašifrovať sieť pre istotu zober WeaveNet. Ak používate jumbo snímky, nezabudnite zadať veľkosť MTU a povoľte šifrovanie zadaním hesla prostredníctvom premennej prostredia. Ale je lepšie zabudnúť na výkon - to sú náklady na šifrovanie.
  • pre bežné používanie советую kaliko. Toto CNI sa široko používa v rôznych nástrojoch na nasadenie Kubernetes (Kops, Kubespray, Rancher atď.). Rovnako ako v prípade WeaveNet, nezabudnite nakonfigurovať MTU v ConfigMap, ak používate jumbo snímky. Ide o multifunkčný nástroj, ktorý je efektívny z hľadiska spotreby zdrojov, výkonu a bezpečnosti.

A na záver vám radím sledovať vývoj cilium. Toto CNI má veľmi aktívny tím, ktorý veľa pracuje na svojom produkte (funkcie, úspora zdrojov, výkon, bezpečnosť, klastrovanie...) a majú veľmi zaujímavé plány.

Výsledky benchmarku Kubernetes Network Plugin (CNI) cez 10 Gbps sieť (aktualizované: apríl 2019)
Vizuálny diagram pre výber CNI

Zdroj: hab.com

Pridať komentár