Hodnotenie výkonu CNI pre Kubernetes cez 10G sieť (august 2020)
TL; DR: Všetky CNI fungujú ako majú, s výnimkou Kube-Router a Kube-OVN je Calico s výnimkou automatickej detekcie MTU najlepšie.
Článok – aktualizácia mojich minulých kontrol (2018 и 2019), v čase testovania používam Kubernetes 1.19 na Ubuntu 18.04 s aktualizovanými CNI od augusta 2020.
Predtým, než sa ponoríme do metrík...
Čo je nové od apríla 2019?
Môžete testovať na svojom vlastnom klastri: Pomocou nášho nástroja môžete spustiť testy na svojom vlastnom klastri Kubernetes Network Benchmark: knb
Nové scenáre: Aktuálne kontroly spúšťajú testy výkonu siete „Pod-to-Pod“ a bol pridaný nový skript „Pod-to-Service“, ktorý spúšťa testy bližšie k reálnym podmienkam. V praxi váš Pod s API pracuje so základňou ako so službou, a nie cez IP adresu Podu (samozrejme kontrolujeme TCP aj UDP pre oba scenáre).
Spotreba zdrojov: každý test má teraz svoje vlastné porovnanie zdrojov
Odstránenie aplikačných testov: Už nerobíme testy HTTP, FTP a SCP, pretože naša plodná spolupráca s komunitou a správcami CNI odhalila medzeru medzi výsledkami iperf oproti TCP a výsledkom curl kvôli oneskoreniu pri spustení CNI (prvých pár sekúnd pod startup, ktorý nie je typický v reálnych podmienkach).
Otvorený zdroj: dostupné sú všetky zdroje testov (skripty, nastavenia yml a pôvodné „surové“ údaje). tu
Referenčný testovací protokol
Protokol je podrobne opísaný tuUpozorňujeme, že tento článok je o Ubuntu 18.04 s predvoleným jadrom.
Výber CNI na posúdenie
Toto testovanie je zamerané na porovnanie CNI nakonfigurovaných s jedným súborom yaml (preto sú vylúčené všetky tie, ktoré sú nainštalované pomocou skriptov, ako je VPP a iné).
Naše vybrané CNI na porovnanie:
Antrea v.0.9.1
Calico v3.16
Canal v3.16 (sieť Flanel + zásady siete Calico)
Cilium 1.8.2
Flanel 0.12.0
Najnovší smerovač Kube (2020 – 08 – 25)
WeaveNet 2.7.0
Konfigurácia MTU pre CNI
Najprv skontrolujeme vplyv automatickej detekcie MTU na výkon TCP:
Vplyv MTU na výkon TCP
Ešte väčšia medzera sa nachádza pri použití UDP:
Vplyv MTU na výkon UDP
Vzhľadom na OBROVSKÝ vplyv na výkon odhalený v testoch by sme chceli všetkým správcom CNI poslať list s nádejou: pridajte do CNI automatickú detekciu MTU. Zachránite mačiatka, jednorožce a dokonca aj toho najroztomilejšieho: malého Devopa.
Ak však potrebujete použiť CNI bez podpory automatickej detekcie MTU, môžete ho nakonfigurovať manuálne, aby ste získali výkon. Upozorňujeme, že to platí pre Calico, Canal a WeaveNet.
Moja malá požiadavka na sprievodné CNI...
Testovanie CNI: nespracované údaje
V tejto časti porovnáme CNI so správnym MTU (určeným automaticky alebo nastaveným manuálne). Hlavným cieľom je zobraziť nespracované údaje v grafoch.
Legenda farieb:
šedá - vzorka (t.j. holé železo)
zelená - šírka pásma nad 9500 Mbps
žltá - šírka pásma nad 9000 Mbps
oranžová - šírka pásma nad 8000 Mbps
červená - šírka pásma pod 8000 Mbps
modrá - neutrálna (netýka sa šírky pásma)
Spotreba zdrojov bez zaťaženia
Najprv skontrolujte spotrebu zdrojov, keď klaster „spí“.
Spotreba zdrojov bez zaťaženia
Pod-to-Pod
Tento scenár predpokladá, že podložka klienta sa pripojí priamo k podu servera pomocou svojej adresy IP.
Scenár pod-to-pod
TCP
Výsledky TCP typu Pod-to-Pod a zodpovedajúca spotreba zdrojov:
UDP
Výsledky UDP typu Pod-to-Pod a zodpovedajúca spotreba zdrojov:
Pod-to-Service
Táto sekcia je relevantná pre reálne prípady použitia, klient Pod sa pripája na server Pod cez službu ClusterIP.
Pod-to-Service Script
TCP
Výsledky protokolu TCP typu Pod-to-Service a zodpovedajúca spotreba zdrojov:
UDP
Výsledky UDP typu Pod-to-Service a zodpovedajúca spotreba zdrojov:
Podpora sieťovej politiky
Zo všetkých vyššie uvedených jediný, kto nepodporuje politiku, je Flannel. Všetci ostatní správne implementujú sieťové politiky vrátane prichádzajúcich a odchádzajúcich. Dobrá práca!
CNI šifrovanie
Medzi kontrolovanými CNI sú tie, ktoré dokážu šifrovať sieťovú výmenu medzi modulmi:
Antrea pomocou IPsec
Calico pomocou drôteného chrániča
Cilium pomocou IPsec
WeaveNet pomocou IPsec
kapacita
Keďže zostáva menej CNI, dajme všetky scenáre do jedného grafu:
Spotreba zdrojov
V tejto časti zhodnotíme zdroje použité pri spracovaní komunikácie Pod-to-Pod v TCP a UDP. Nemá zmysel kresliť graf Pod-to-Service, pretože neposkytuje ďalšie informácie.
Dávať to všetko dokopy
Skúsme zopakovať všetky grafy, zaviedli sme tu malú subjektivitu a nahradili skutočné hodnoty slovami „vwry fast“, „low“ atď.
Záver a moje závery
Je to trochu subjektívne, keďže uvádzam svoju vlastnú interpretáciu výsledkov.
Som rád, že sa objavili nové CNI, Antrea fungovala dobre, mnohé funkcie boli implementované aj v skorých verziách: automatická detekcia MTU, šifrovanie a jednoduchá inštalácia.
Ak porovnáme výkon, všetky CNI fungujú dobre, okrem Kube-OVN a Kube-Router. Kube-Router tiež nedokázal zistiť MTU, nikde v dokumentácii som nenašiel spôsob, ako ho nakonfigurovať (tu žiadosť na túto tému je otvorená).
Čo sa týka spotreby zdrojov, Cilium stále využíva viac pamäte RAM ako ostatné, no výrobca jednoznačne mieri na veľké klastre, čo zjavne nie je to isté ako test na klastri s tromi uzlami. Kube-OVN tiež spotrebuje veľa zdrojov CPU a RAM, ale je to mladé CNI založené na Open vSwitch (ako Antrea funguje lepšie a s menšou spotrebou).
Všetci okrem Flanela majú sieťové pravidlá. Je veľmi pravdepodobné, že ich nikdy nepodporí, keďže cieľ je jednoduchší ako dusená repa: čím ľahšia, tým lepšia.
Okrem iného je úžasný aj výkon šifrovania. Calico je jedným z najstarších CNI, ale šifrovanie bolo pridané len pred pár týždňami. Namiesto IPsec zvolili wireguard a jednoducho povedané, funguje skvele a úžasne, pričom v tejto časti testovania úplne zatieni ostatné CNI. Spotreba zdrojov sa samozrejme vďaka šifrovaniu zvyšuje, no dosiahnutá priepustnosť stojí za to (Calico preukázalo šesťnásobné zlepšenie v teste šifrovania v porovnaní s Ciliom, ktoré je na druhom mieste). Okrem toho môžete po nasadení Calico do klastra kedykoľvek povoliť drôtovú ochranu a môžete ju tiež vypnúť na krátky čas alebo natrvalo, ak chcete. Je to však neuveriteľne pohodlné! Pripomíname vám, že Calico v súčasnosti automaticky nezisťuje MTU (táto funkcia je plánovaná pre budúce verzie), takže nezabudnite nakonfigurovať MTU, ak vaša sieť podporuje Jumbo Frames (MTU 9000).
Okrem iného si všimnite, že Cilium dokáže šifrovať prevádzku medzi uzlami klastra (a nielen medzi modulmi), čo môže byť veľmi dôležité pre verejné uzly klastra.
Na záver navrhujem nasledujúce prípady použitia:
Potrebujem CNI pre veľmi malý klaster ALEBO nepotrebujem zabezpečenie: pracovať s flanel, najľahší a najstabilnejší CNI (je tiež jedným z najstarších, podľa legendy ho vynašiel Homo Kubernautus alebo Homo Contaitorus). Možno vás bude zaujímať aj najdômyselnejší projekt k3, skontrolujte!
Potrebujete CNI pre bežný klaster: kaliko - vaša voľba, ale v prípade potreby nezabudnite nakonfigurovať MTU. Môžete sa jednoducho a prirodzene hrať so sieťovými politikami, zapínať a vypínať šifrovanie atď.
Potrebujete CNI pre (veľmi) rozsiahly klaster: No, test neukazuje správanie veľkých klastrov, rád urobím testy, ale nemáme stovky serverov s 10Gbps pripojením. Najlepšou možnosťou je teda spustiť upravený test na vašich uzloch, aspoň s Calico a Cilium.