Toto je moja aktualizácia
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
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ýber CNI pre benchmark
Toto je benchmark iba pre CNI zo zoznamu v sekcii
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:
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:
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
Č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 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šetky CNI fungovali dobre v benchmarku TCP. CNI so šifrovaním výrazne zaostáva, pretože šifrovanie je drahé.
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.
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.
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.
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:
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.
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:
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
Tabuľka so všetkými výsledkami:
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.
Vizuálny diagram pre výber CNI
Zdroj: hab.com