Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
Dit is my opdatering vorige maatstaf, wat nou op Kubernetes 1.14 loop met die nuutste CNI-weergawe vanaf April 2019.

Eerstens wil ek die Cilium-span bedank: die ouens het my gehelp om die metrieke-monitering-skrifte na te gaan en reg te stel.

Wat het verander sedert November 2018

Hier is wat sedertdien verander het (as jy belangstel):

Flannel bly die vinnigste en eenvoudigste CNI-koppelvlak, maar ondersteun steeds nie netwerkbeleide en enkripsie nie.

Romana word nie meer ondersteun nie, daarom het ons dit van die maatstaf verwyder.

WeaveNet ondersteun nou netwerkbeleide vir Ingress en Egress! Maar produktiwiteit het afgeneem.

In Calico moet u steeds die maksimum pakkiegrootte (MTU) handmatig opstel vir die beste werkverrigting. Calico bied twee opsies om CNI te installeer, sodat u sonder 'n aparte ETCD-bewaarplek kan klaarkom:

  • stoor toestand in die Kubernetes API as 'n data stoor (cluster grootte < 50 nodusse);
  • stoortoestand in die Kubernetes API as 'n datastoor met 'n Typha-instaanbediener om die las op die K8S API (klustergrootte > 50 nodusse) te verlig.

Calico het ondersteuning aangekondig toepassingsvlakbeleide bo-op Istio vir sekuriteit op toepassingsvlak.

Cilium ondersteun nou enkripsie! Cilium verskaf enkripsie met IPSec-tonnels en bied 'n alternatief vir die geïnkripteer WeaveNet-netwerk. Maar WeaveNet is vinniger as Cilium met enkripsie geaktiveer.

Cilium is nou makliker om te ontplooi danksy die ingeboude ETCD-operateur.

Die Cilium-span het probeer om 'n bietjie gewig van sy CNI te verminder deur geheueverbruik en SVE-koste te verminder, maar sy mededingers is steeds ligter.

Benchmark konteks

Die maatstaf word uitgevoer op drie nie-gevirtualiseerde Supermicro-bedieners met 'n 10 Gb Supermicro-skakelaar. Die bedieners is direk aan die skakelaar gekoppel via passiewe DAC SFP+ kabels en is op dieselfde VLAN gekonfigureer met jumbo rame (MTU 9000).

Kubernetes 1.14.0 geïnstalleer op Ubuntu 18.04 LTS met Docker 18.09.2 (die verstek Docker-weergawe in hierdie vrystelling).

Om die reproduceerbaarheid te verbeter, het ons besluit om altyd die meester op die eerste nodus op te stel, die bedienerdeel van die maatstaf op die tweede bediener te plaas en die kliëntdeel op die derde. Om dit te doen, gebruik ons ​​NodeSelector in Kubernetes-ontplooiings.

Ons sal die maatstafresultate op die volgende skaal beskryf:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Kies 'n CNI vir 'n maatstaf

Dit is slegs 'n maatstaf vir CNI uit die lys in die afdeling oor die skep van een meesterkluster met kubeadm Sien die amptelike Kubernetes-dokumentasie. Van die 9 CNI's sal ons net 6 neem: ons sal dié uitsluit wat moeilik is om te installeer en/of nie werk sonder konfigurasie volgens die dokumentasie nie (Romana, Contiv-VPP en JuniperContrail/TungstenFabric).

Ons sal die volgende CNI's vergelyk:

  • Calico v3.6
  • Canal v3.6 (in wese Flannel vir netwerk + Calico as 'n firewall)
  • Silium 1.4.2
  • Flanel 0.11.0
  • Kube-roeteerder 0.2.5
  • WeaveNet 2.5.1

installasie

Hoe makliker die CNI is om te installeer, hoe beter sal ons eerste indruk wees. Alle CNI's van die maatstaf is baie maklik om te installeer (met een of twee opdragte).

Soos ons gesê het, is die bedieners en skakelaar gekonfigureer met jumbo-rame geaktiveer (ons stel die MTU op 9000). Ons sal bly wees as CNI outomaties die MTU bepaal op grond van die adapters se konfigurasie. Slegs Cilium en Flannel het dit egter reggekry. Die res van die CNI's het versoeke op GitHub om outomatiese MTU-ontdekking by te voeg, maar ons sal dit handmatig instel deur die ConfigMap vir Calico, Canal en Kube-router te verander, of 'n omgewingsveranderlike vir WeaveNet deur te gee.

Wat is die probleem met verkeerde MTU? Hierdie diagram toon die verskil tussen WeaveNet met verstek MTU en jumbo rame geaktiveer:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
Hoe beïnvloed MTU deurvloei?

Ons het gesien hoe belangrik MTU vir prestasie is, kom ons kyk nou hoe ons CNI's dit outomaties bepaal:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
CNI bespeur MTU outomaties

Die grafiek wys dat jy die MTU vir Calico, Canal, Kube-router en WeaveNet moet konfigureer vir optimale werkverrigting. Cilium en Flannel kon self die MTU korrek bepaal sonder enige instellings.

sekuriteit

Ons sal CNI-sekuriteit in twee aspekte vergelyk: die vermoë om gestuurde data te enkripteer en die implementering van Kubernetes-netwerkbeleide (gebaseer op werklike toetse, nie dokumentasie nie).

Slegs twee CNI's enkripteer data: Cilium en WeaveNet. Enkripsie WeefNet geaktiveer deur die enkripsiewagwoord as 'n CNI-omgewingsveranderlike in te stel. IN dokumentasie WeaveNet beskryf dit op 'n ingewikkelde manier, maar alles word eenvoudig gedoen. Enkripsie silium gekonfigureer deur opdragte, deur Kubernetes-geheime te skep, en deur wysiging van die daemonSet ('n bietjie meer ingewikkeld as in WeaveNet, maar Cilium het stap-vir-stap instruksies).

Wat die implementering van netwerkbeleid betref, het hulle daarin geslaag Calico, Canal, Cilium en WeaveNet, waarin jy Ingress- en Egress-reëls kan opstel. Vir Kube-router daar is reëls net vir Ingress, en flanel Daar is glad nie netwerkbeleide nie.

Hier is die algehele resultate:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
Veiligheidsprestasie-maatstafresultate

produktiwiteit

Hierdie maatstaf toon die gemiddelde deurset oor ten minste drie lopies van elke toets. Ons toets die werkverrigting van TCP en UDP (met iperf3), regte toepassings soos HTTP (met Nginx en krul) of FTP (met vsftpd en krul) en laastens toepassingsprestasie deur gebruik te maak van SCP-gebaseerde enkripsie (met behulp van kliënt en bediener OpenSSH).

Vir alle toetse het ons 'n kaalmetaal-maatstaf (groen lyn) uitgevoer om CNI-prestasie met inheemse netwerkprestasie te vergelyk. Hier gebruik ons ​​dieselfde skaal, maar in kleur:

  • Geel = baie goed
  • Oranje = goed
  • Blou = so-so
  • Rooi = sleg

Ons sal nie verkeerd gekonfigureerde CNI's neem nie en sal slegs resultate vir CNI's met die korrekte MTU wys. (Let wel: Cilium bereken nie die MTU korrek as jy enkripsie aktiveer nie, so jy sal die MTU met die hand na 8900 in weergawe 1.4 moet verminder. Die volgende weergawe, 1.5, doen dit outomaties.)

Hier is die resultate:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
TCP prestasie

Alle CNI's het goed gevaar in die TCP-maatstaf. CNI met enkripsie bly ver agter omdat enkripsie duur is.

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
UDP prestasie

Ook hier vaar alle CNI's goed. CNI met enkripsie het amper dieselfde resultaat getoon. Cilium is 'n bietjie agter die kompetisie, maar dit is net 2,3% van kaal metaal, so dit is nie 'n slegte resultaat nie. Moenie vergeet dat slegs Cilium en Flannel die MTU self korrek bepaal het nie, en dit is hul resultate sonder enige bykomende konfigurasie.

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Wat van 'n regte toepassing? Soos u kan sien, is die algehele werkverrigting vir HTTP effens laer as vir TCP. Selfs as jy HTTP met TCP gebruik, het ons iperf3 in die TCP-maatstaf gekonfigureer om 'n stadige begin te vermy wat die HTTP-maatstaf sal beïnvloed. Almal het goeie werk hier gedoen. Kube-router het 'n duidelike voordeel, maar WeaveNet het nie goed gevaar nie: ongeveer 20% slegter as kaal metaal. Cilium en WeaveNet met enkripsie lyk baie hartseer.

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Met FTP, 'n ander TCP-gebaseerde protokol, verskil resultate. Flannel en Kube-router doen die werk, maar Calico, Canal en Cilium is 'n bietjie agter en is ongeveer 10% stadiger as kaal metaal. WeaveNet is met soveel as 17% agter, maar geënkripteerde WeaveNet is 40% voor geënkripteerde Cilium.

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Met SCP kan ons dadelik sien hoeveel SSH-enkripsie ons kos. Byna alle CNI's vaar goed, maar WeaveNet is weer agter. Cilium en WeaveNet met enkripsie is na verwagting die ergste as gevolg van dubbele enkripsie (SSH + CNI).

Hier is 'n opsommingstabel met die resultate:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Hulpbronverbruik

Kom ons vergelyk nou hoe CNI hulpbronne onder swaar vragte verbruik (tydens TCP-oordrag, 10 Gbps). In prestasietoetse vergelyk ons ​​CNI met kaal metaal (groen lyn). Vir hulpbronverbruik, kom ons wys suiwer Kubernetes (pers lyn) sonder CNI en kyk hoeveel ekstra hulpbronne CNI verbruik.

Kom ons begin met geheue. Hier is die gemiddelde waarde vir nodusse se RAM (buffers en kas uitgesluit) in MB tydens oordrag.

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
Geheueverbruik

Flannel en Kube-router het uitstekende resultate getoon - slegs 50 MB. Calico en Canal het elk 70. WeaveNet verbruik duidelik meer as die ander – 130 MB, en Cilium gebruik soveel as 400.
Kom ons kyk nou na die SVE tydverbruik. Opmerklik: die diagram toon nie persentasies nie, maar dpm, dit wil sê, 38 dpm vir "kaal yster" is 3,8%. Hier is die resultate:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
SVE verbruik

Calico, Canal, Flannel en Kube-router is baie SVE-doeltreffend - slegs 2% meer as Kubernetes sonder CNI. WeaveNet bly ver agter met 'n ekstra 5%, gevolg deur Cilium op 7%.

Hier is 'n opsomming van hulpbronverbruik:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)

Resultate van

Tabel met alle resultate:

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
Algemene maatstaf resultate

Gevolgtrekking

In die laaste deel sal ek my subjektiewe mening oor die resultate uitspreek. Onthou dat hierdie maatstaf slegs die deurset van 'n enkele verbinding op 'n baie klein groepie (3 nodusse) toets. Dit is nie van toepassing op groot trosse (<50 nodusse) of parallelle verbindings nie.

Ek beveel aan om die volgende CNI's te gebruik, afhangende van die scenario:

  • Het jy in jou cluster nodusse met min hulpbronne (verskeie GB RAM, verskeie kerne) en jy het nie sekuriteitskenmerke nodig nie - kies flanel. Dit is een van die mees koste-effektiewe CNI's. En dit is versoenbaar met 'n wye verskeidenheid argitekture (amd64, arm, arm64, ens.). Daarbenewens is dit een van twee (die ander is Cilium) CNI wat outomaties die MTU kan bepaal, so jy hoef niks te konfigureer nie. Kube-router is ook geskik, maar dit is nie standaard nie en jy sal die MTU handmatig moet opstel.
  • Indien nodig enkripteer die netwerk vir veiligheid, neem WeefNet. Moenie vergeet om die MTU-grootte te spesifiseer as jy jumbo-rame gebruik nie, en aktiveer enkripsie deur 'n wagwoord via 'n omgewingsveranderlike te spesifiseer. Maar dit is beter om van prestasie te vergeet - dit is die koste van enkripsie.
  • Vir normale gebruik советую Calico. Hierdie CNI word wyd gebruik in verskeie Kubernetes-ontplooiingsinstrumente (Kops, Kubespray, Rancher, ens.). Soos met WeaveNet, maak seker dat jy die MTU in ConfigMap konfigureer as jy jumbo-rame gebruik. Dit is 'n multifunksionele instrument wat doeltreffend is in terme van hulpbronverbruik, werkverrigting en sekuriteit.

En laastens raai ek jou aan om die ontwikkeling te volg silium. Hierdie CNI het 'n baie aktiewe span wat baie aan hul produk werk (kenmerke, hulpbronbesparing, prestasie, sekuriteit, groepering ...) en hulle het baie interessante planne.

Kubernetes Networking Plugin (CNI) Benchmark-resultate oor 10 Gbps-netwerk (opgedateer April 2019)
Visuele diagram vir CNI seleksie

Bron: will.com

Voeg 'n opmerking