Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
Dit is myn update foarige benchmark, dy't no rint op Kubernetes 1.14 mei de lêste CNI-ferzje fan april 2019.

Alderearst wol ik it Cilium-team betankje: de jonges holpen my te kontrolearjen en korrizjearje de metriken tafersjochskripts.

Wat is feroare sûnt novimber 2018

Hjir is wat sûnt dy tiid feroare is (as jo ynteressearre binne):

Flannel bliuwt de fluchste en ienfâldichste CNI-ynterface, mar stipet noch gjin netwurkbelied en fersifering.

Romana wurdt net mear stipe, dus wy hawwe it fuortsmiten fan 'e benchmark.

WeaveNet stipet no netwurkbelied foar Ingress en Egress! Mar de produktiviteit is ôfnommen.

Yn Calico moatte jo de maksimale pakketgrutte (MTU) noch manuell konfigurearje foar bêste prestaasjes. Calico biedt twa opsjes foar it ynstallearjen fan CNI, sadat jo sûnder in apart ETCD-repository kinne dwaan:

  • it opslaan fan steat yn 'e Kubernetes API as in gegevenswinkel (klustergrutte <50 knopen);
  • it opslaan fan steat yn 'e Kubernetes API as in gegevenswinkel mei in Typha-proxy om de lêst op' e K8S API te ûntlêsten (klustergrutte> 50 knopen).

Calico kundige stipe oan applikaasje nivo belied boppe op Istio foar feiligens op applikaasjenivo.

Cilium stipet no fersifering! Cilium leveret fersifering mei IPSec-tunnels en biedt in alternatyf foar it fersifere WeaveNet-netwurk. Mar WeaveNet is rapper dan Cilium mei fersifering ynskeakele.

Cilium is no makliker te ynsetten troch de ynboude ETCD-operator.

It Cilium-team hat besocht wat gewicht fan har CNI te trimmen troch ûnthâldferbrûk en CPU-kosten te ferminderjen, mar har konkurrinten binne noch lichter.

Benchmark kontekst

De benchmark wurdt útfierd op trije net-virtualisearre Supermicro-tsjinners mei in 10 Gb Supermicro-switch. De tsjinners binne ferbûn direkt mei de switch fia passive DAC SFP + kabels en binne konfigurearre op deselde VLAN mei jumbo frames (MTU 9000).

Kubernetes 1.14.0 ynstalleare op Ubuntu 18.04 LTS mei Docker 18.09.2 (de standert Docker-ferzje yn dizze útjefte).

Om de reprodusearberens te ferbetterjen, hawwe wy besletten om de master altyd op 'e earste knooppunt te konfigurearjen, it serverdiel fan' e benchmark op 'e twadde server te pleatsen, en it clientdiel op 'e tredde. Om dit te dwaan, brûke wy NodeSelector yn Kubernetes-ynset.

Wy sille de benchmarkresultaten beskriuwe op 'e folgjende skaal:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Selektearje in CNI foar in benchmark

Dit is allinich in benchmark foar CNI út 'e list yn' e seksje oer it meitsjen fan ien masterkluster mei kubeadm Sjoch de offisjele Kubernetes-dokumintaasje. Fan 'e 9 CNI's sille wy allinich 6 nimme: wy sille dejingen útslute dy't lestich te ynstallearjen binne en / of net wurkje sûnder konfiguraasje neffens de dokumintaasje (Romana, Contiv-VPP en JuniperContrail / TungstenFabric).

Wy sille de folgjende CNI's fergelykje:

  • Calico v3.6
  • Canal v3.6 (yn essinsje Flannel foar netwurken + Calico as firewall)
  • Cilium 1.4.2
  • Flanel 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

ynstelling

Hoe makliker de CNI is te ynstallearjen, hoe better ús earste yndruk sil wêze. Alle CNI's fan 'e benchmark binne heul maklik te ynstallearjen (mei ien of twa kommando's).

Lykas wy seine, binne de servers en switch konfigureare mei jumbo-frames ynskeakele (wy sette de MTU op 9000). Wy soene bliid wêze as CNI de MTU automatysk bepaalt op basis fan de konfiguraasje fan 'e adapters. Lykwols, allinnich Cilium en Flannel slagge dit. De rest fan 'e CNI's hawwe fersiken op GitHub om automatyske MTU-ûntdekking ta te foegjen, mar wy sille it manuell konfigurearje troch de ConfigMap foar Calico, Canal en Kube-router te feroarjen, of in omjouwingsfariabele troch te jaan foar WeaveNet.

Wat is it probleem mei ferkearde MTU? Dit diagram lit it ferskil sjen tusken WeaveNet mei standert MTU en jumbo-frames ynskeakele:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
Hoe beynfloedet MTU trochstreaming?

Wy hawwe sjoen hoe wichtich MTU is foar prestaasjes, litte wy no sjen hoe't ús CNI's it automatysk bepale:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
CNI detektearret automatysk MTU

De grafyk lit sjen dat jo de MTU moatte konfigurearje foar Calico, Canal, Kube-router en WeaveNet foar optimale prestaasjes. Cilium en Flannel koenen de MTU sels korrekt bepale sûnder ynstellings.

Feiligens

Wy sille CNI-feiligens yn twa aspekten fergelykje: de mooglikheid om oerdroegen gegevens te fersiferjen en de ymplemintaasje fan Kubernetes netwurkbelied (basearre op echte tests, net dokumintaasje).

Allinich twa CNI's fersiferje gegevens: Cilium en WeaveNet. Fersifering WeaveNet ynskeakele troch it ynstellen fan it fersiferingswachtwurd as in CNI-omjouwingsfariabele. YN dokumintaasje WeaveNet beskriuwt it op in yngewikkelde manier, mar alles wurdt gewoan dien. Fersifering Silium ynsteld troch kommando's, troch it meitsjen fan Kubernetes-geheimen, en troch modifikaasje fan 'e daemonSet (in bytsje komplisearre as yn WeaveNet, mar Cilium hat stap-foar-stap ynstruksjes).

Wat de ymplemintaasje fan netwurkbelied oanbelanget, binne se slagge Calico, Canal, Cilium en WeaveNet, wêryn jo Ingress- en Egress-regels ynstelle kinne. Foar Kube-router der binne regels allinnich foar Ingress, en Flannel D'r binne hielendal gjin netwurkbelied.

Hjir binne de algemiene resultaten:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
Safety Performance Benchmark Results

Produktiviteit

Dizze benchmark toant de gemiddelde trochfier oer op syn minst trije runen fan elke test. Wy testje de prestaasjes fan TCP en UDP (mei iperf3), echte applikaasjes lykas HTTP (mei Nginx en curl) of FTP (mei vsftpd en curl) en úteinlik applikaasjeprestaasjes mei SCP-basearre fersifering (brûkend client en server OpenSSH).

Foar alle tests hawwe wy in bleate metalen benchmark (griene line) útfierd om CNI-prestaasjes te fergelykjen mei native netwurkprestaasjes. Hjir brûke wy deselde skaal, mar yn kleur:

  • Giel = hiel goed
  • Oranje = goed
  • Blau = sa-so
  • Red = min

Wy sille net ferkeard ynstelde CNI's nimme en allinich resultaten sjen litte foar CNI's mei de juste MTU. (Opmerking: Cilium berekkent de MTU net goed as jo fersifering ynskeakelje, dus jo moatte de MTU manuell ferminderje nei 8900 yn ferzje 1.4. De folgjende ferzje, 1.5, docht dit automatysk.)

Hjir binne de resultaten:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
TCP Performance

Alle CNI's presteare goed yn 'e TCP-benchmark. CNI mei fersifering leit fier efter omdat fersifering is djoer.

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
UDP prestaasjes

Ek hjir dogge alle CNI's it goed. CNI mei fersifering toande hast itselde resultaat. Cilium is in bytsje efter de konkurrinsje, mar it is mar 2,3% fan blank metaal, dus it is net in min resultaat. Ferjit net dat allinich Cilium en Flannel de MTU sels goed bepale, en dit binne har resultaten sûnder ekstra konfiguraasje.

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Hoe sit it mei in echte applikaasje? As jo ​​​​sjogge, is de totale prestaasjes foar HTTP wat leger dan foar TCP. Sels as jo HTTP brûke mei TCP, hawwe wy iperf3 yn 'e TCP-benchmark konfigureare om in trage start te foarkommen dy't de HTTP-benchmark beynfloedzje. Elkenien hat hjir goed wurk dien. Kube-router hat in dúdlik foardiel, mar WeaveNet die net goed: oer 20% slimmer as bleate metaal. Cilium en WeaveNet mei fersifering sjogge echt tryst.

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Mei FTP, in oar TCP-basearre protokol, ferskille resultaten. Flannel en Kube-router dogge it wurk, mar Calico, Canal en Cilium binne in bytsje efter en binne sawat 10% stadiger as keal metaal. WeaveNet is efter mei safolle as 17%, mar fersifere WeaveNet is 40% foarút fan fersifere Cilium.

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Mei SCP kinne wy ​​fuortendaliks sjen hoefolle SSH-fersifering ús kostet. Hast alle CNI's dogge it goed, mar WeaveNet bliuwt wer efter. Cilium en WeaveNet mei fersifering wurde ferwachte it minste fanwege dûbele fersifering (SSH + CNI).

Hjir is in gearfetting tabel mei de resultaten:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Resource konsumpsje

Litte wy no fergelykje hoe't CNI boarnen konsumearret ûnder swiere lesten (by TCP-oerdracht, 10 Gbps). Yn prestaasjestests fergelykje wy CNI mei bleat metaal (griene line). Foar boarne konsumpsje, lit ús sjen litte suvere Kubernetes (purple line) sûnder CNI en sjen hoefolle ekstra middels CNI konsumearret.

Litte wy begjinne mei ûnthâld. Hjir is de gemiddelde wearde foar RAM fan knopen (útsein buffers en cache) yn MB by oerdracht.

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
Unthâld konsumpsje

Flannel en Kube-router lieten treflike resultaten sjen - mar 50 MB. Calico en Canal hawwe elk 70. WeaveNet konsumearret dúdlik mear as de oaren - 130 MB, en Cilium brûkt safolle as 400.
Litte wy no it CPU-tiidferbrûk kontrolearje. Opmerklik: it diagram lit gjin persintaazjes sjen, mar ppm, dat is, 38 ppm foar "keale izer" is 3,8%. Hjir binne de resultaten:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
CPU konsumpsje

Calico, Canal, Flannel en Kube-router binne heul CPU-effisjint - mar 2% mear dan Kubernetes sûnder CNI. WeaveNet leit fier efter mei in ekstra 5%, folge troch Cilium op 7%.

Hjir is in gearfetting fan boarneferbrûk:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)

Resultaten

Tabel mei alle resultaten:

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
Algemiene benchmark resultaten

konklúzje

Yn it lêste diel sil ik myn subjektive miening útsprekke oer de resultaten. Unthâld dat dizze benchmark allinich de trochfier fan in inkele ferbining testet op in heul lyts kluster (3 knopen). It jildt net foar grutte klusters (<50 knopen) of parallelle ferbiningen.

Ik advisearje de folgjende CNI's te brûken ôfhinklik fan it senario:

  • Hawwe jo yn jo kluster knopen mei in pear boarnen (ferskate GB RAM, ferskate kearnen) en jo hawwe gjin feiligensfunksjes nedich - kies Flannel. Dit is ien fan 'e meast kosten-effektive CNI's. En it is kompatibel mei in breed ferskaat oan arsjitektuer (amd64, earm, arm64, ensfh.). Dêrneist is dit ien fan twa (de oare is Cilium) CNI dat kin automatysk bepale de MTU, dus jo hoege net te konfigurearjen neat. Kube-router is ek gaadlik, mar it is net as standert en jo moatte de MTU manuell konfigurearje.
  • As it nedich is fersiferje it netwurk foar feiligens, nimme WeaveNet. Ferjit net de MTU-grutte op te jaan as jo jumbo-frames brûke, en fersifering ynskeakelje troch in wachtwurd op te jaan fia in omjouwingsfariabele. Mar it is better om te ferjitten oer prestaasjes - dat binne de kosten fan fersifering.
  • foar normaal gebrûk советую Calico. Dizze CNI wurdt in protte brûkt yn ferskate Kubernetes-ynsetynstruminten (Kops, Kubespray, Rancher, ensfh.). Lykas by WeaveNet, wês wis dat jo de MTU yn ConfigMap konfigurearje as jo jumbo-frames brûke. It is in multyfunksjoneel ark dat effisjint is yn termen fan boarneferbrûk, prestaasjes en feiligens.

En as lêste ried ik jo oan om de ûntwikkeling te folgjen Silium. Dizze CNI hat in heul aktyf team dat in protte wurket oan har produkt (funksjes, boarnebesparring, prestaasjes, feiligens, klustering ...) en se hawwe heul ynteressante plannen.

Kubernetes Networking Plugin (CNI) benchmarkresultaten oer 10 Gbps netwurk (bywurke april 2019)
Visual diagram foar CNI seleksje

Boarne: www.habr.com

Add a comment