Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
Dëst ass meng Update virdrun Benchmark, déi elo op Kubernetes 1.14 leeft mat der leschter CNI Versioun ab Abrëll 2019.

Als éischt wëll ech dem Cilium Team Merci soen: d'Jongen hunn mir gehollef d'Metriken Iwwerwaachungsskripter ze kontrolléieren an ze korrigéieren.

Wat huet sech zënter November 2018 geännert

Hei ass wat zënterhier geännert huet (wann Dir interesséiert sidd):

Flannel bleift déi schnellsten an einfachste CNI Interface, awer ënnerstëtzt nach ëmmer keng Netzwierkpolitik a Verschlësselung.

Romana gëtt net méi ënnerstëtzt, also hu mir et aus dem Benchmark geläscht.

WeaveNet ënnerstëtzt elo Netzwierkpolitik fir Ingress an Egress! Awer d'Produktivitéit ass erofgaang.

Am Calico musst Dir nach ëmmer déi maximal Paketgréisst (MTU) manuell konfiguréieren fir déi bescht Leeschtung. Calico bitt zwou Méiglechkeeten fir CNI z'installéieren, sou datt Dir ouni separat ETCD Repository maache kënnt:

  • Späichere Staat an der Kubernetes API als Dategeschäft (Clustergréisst <50 Noden);
  • Späichere Staat an der Kubernetes API als Dategeschäft mat engem Typha Proxy fir d'Laascht op der K8S API ze entlaaschten (Clustergréisst> 50 Noden).

Calico huet Ënnerstëtzung ugekënnegt Applikatioun Niveau Politiken uewen op Istio fir Applikatiounsniveau Sécherheet.

Cilium ënnerstëtzt elo Verschlësselung! Cilium bitt Verschlësselung mat IPSec Tunnel a bitt eng Alternativ zum verschlësselte WeaveNet Netzwierk. Awer WeaveNet ass méi séier wéi Cilium mat Verschlësselung aktivéiert.

Cilium ass elo méi einfach ze deployéieren dank dem agebauten ETCD Bedreiwer.

D'Cilium Team huet probéiert e bësse Gewiicht vu sengem CNI ze trimmen andeems d'Erënnerungsverbrauch an d'CPU Käschten reduzéiert ginn, awer seng Konkurrenten sinn nach ëmmer méi hell.

Benchmark Kontext

De Benchmark gëtt op dräi net-virtualiséierter Supermicro Server mat engem 10 Gb Supermicro Schalter lafen. D'Servere sinn direkt un de Schalter verbonne via passiv DAC SFP + Kabelen a sinn op der selwechter VLAN mat Jumbo Rummen konfiguréiert (MTU 9000).

Kubernetes 1.14.0 installéiert op Ubuntu 18.04 LTS mat Docker 18.09.2 (déi Standard Docker Versioun an dëser Verëffentlechung).

Fir d'Reproduzibilitéit ze verbesseren, hu mir décidéiert fir ëmmer de Master op den éischte Node ze konfiguréieren, de Serverdeel vum Benchmark op den zweeten Server ze setzen an de Client Deel op den drëtten. Fir dëst ze maachen, benotze mir NodeSelector a Kubernetes Deployment.

Mir beschreiwen d'Benchmark Resultater op der folgender Skala:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Auswiel vun engem CNI fir e Benchmark

Dëst ass e Benchmark nëmme fir CNI aus der Lëscht an der Rubrik iwwer d'Schafe vun engem Mastercluster mat kubeadm Kuckt déi offiziell Kubernetes Dokumentatioun. Vun den 9 CNIs wäerte mir nëmmen 6 huelen: mir wäerten déi ausgeschloss, déi schwéier z'installéieren an / oder net ouni Konfiguratioun no der Dokumentatioun funktionnéieren (Romana, Contiv-VPP an JuniperContrail / TungstenFabric).

Mir vergläichen déi folgend CNIs:

  • Calico v3.6
  • Canal v3.6 (wesentlech Flannel fir Netzwierker + Calico als Firewall)
  • Cilium 1.4.2
  • Flanell 0.11.0
  • Kube-Router 0.2.5
  • WeaveNet 2.5.1

Kader

Wat méi einfach de CNI ass ze installéieren, dest besser ass eisen éischten Androck. All CNIs aus dem Benchmark si ganz einfach ze installéieren (mat engem oder zwee Kommandoen).

Wéi mir gesot hunn, sinn d'Serveren a Schalter mat Jumbo Frames aktivéiert konfiguréiert (mir setzen d'MTU op 9000). Mir wiere frou wann de CNI automatesch d'MTU bestëmmt baséiert op der Konfiguratioun vun den Adapter. Allerdéngs hunn nëmmen Cilium a Flannel dëst gepackt. De Rescht vun den CNIs hunn Ufroen op GitHub fir automatesch MTU Entdeckung ze addéieren, awer mir wäerte se manuell konfiguréieren andeems Dir de ConfigMap fir Calico, Canal a Kube-Router änneren, oder eng Ëmfeldvariabel fir WeaveNet passéieren.

Wat ass de Problem mat falschen MTU? Dëst Diagramm weist den Ënnerscheed tëscht WeaveNet mat Standard MTU a Jumbo Frames aktivéiert:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
Wéi beaflosst MTU den Duerchgang?

Mir hu gesinn wéi wichteg MTU fir d'Leeschtung ass, loosst eis elo kucken wéi eis CNIs et automatesch bestëmmen:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
CNI erkennt automatesch MTU

D'Grafik weist datt Dir d'MTU fir Calico, Canal, Kube-Router a WeaveNet fir eng optimal Leeschtung konfiguréiere musst. Cilium a Flannel konnten d'MTU selwer richteg bestëmmen ouni Astellungen.

Sécherheet

Mir wäerten CNI Sécherheet an zwee Aspekter vergläichen: d'Fähegkeet iwwerdroen Donnéeën ze verschlëssele an der Ëmsetzung vun Kubernetes Reseau Politiken (baséiert op real Tester, net Dokumentatioun).

Nëmmen zwee CNIs verschlëssele Daten: Cilium a WeaveNet. Verschlësselung WeaveNet aktivéiert andeems Dir d'Verschlësselungspasswuert als CNI Ëmfeld Variabel setzt. IN Dokumentatioun WeaveNet beschreift et op eng komplizéiert Manéier, awer alles gëtt einfach gemaach. Verschlësselung cilium konfiguréiert duerch Kommandoen, andeems Dir Kubernetes Geheimnisser erstellt, an duerch Modifikatioun vum DaemonSet (e bësse méi komplizéiert wéi am WeaveNet, awer Cilium huet Schrëtt-fir-Schrëtt Instruktiounen).

Wat d'Ëmsetzung vun der Netzpolitik ugeet, si si gelongen Calico, Canal, Cilium a WeaveNet, an deem Dir Ingress an Egress Regelen konfiguréieren. Fir Kube-Router et gi Regele nëmme fir Ingress, an Flannel Et gëtt guer keng Netzwierkpolitik.

Hei sinn d'Gesamtresultater:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
Sécherheet Leeschtung Benchmark Resultater

Produktivitéit

Dëse Benchmark weist den Duerchschnëttsduerchgang iwwer mindestens dräi Runen vun all Test. Mir testen d'Performance vun TCP an UDP (mat iperf3), real Uwendungen wéi HTTP (mat Nginx a Curl) oder FTP (mat vsftpd a Curl) a schliisslech Applikatiounsleistung mat SCP-baséiert Verschlësselung (mat Client a Server OpenSSH).

Fir all Tester hu mir e bloe Metal Benchmark (gréng Linn) gemaach fir d'CNI Performance mat der gebierteg Netzwierkleistung ze vergläichen. Hei benotze mir déiselwecht Skala, awer a Faarf:

  • Giel = ganz gutt
  • Orange = gutt
  • Blo = sou-so
  • Rot = schlecht

Mir huelen net falsch konfiguréiert CNIs a weisen nëmmen Resultater fir CNIs mat der korrekter MTU. (Notiz: Cilium berechent d'MTU net korrekt wann Dir d'Verschlësselung aktivéiert, also musst Dir d'MTU manuell op 8900 an der Versioun 1.4 reduzéieren. Déi nächst Versioun, 1.5, mécht dat automatesch.)

Hei d'Resultater:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
TCP Leeschtung

All CNIs hunn gutt am TCP Benchmark gemaach. CNI mat Verschlësselung läit wäit hannendrun well Verschlësselung deier ass.

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
UDP Leeschtung

Och hei geet all CNI gutt. CNI mat Verschlësselung huet bal datselwecht Resultat gewisen. Cilium ass e bëssen hannert der Konkurrenz, awer et ass nëmmen 2,3% vum kale Metal, also ass et kee schlecht Resultat. Vergiesst net datt nëmmen Cilium a Flannel d'MTU selwer korrekt bestëmmt hunn, an dëst sinn hir Resultater ouni zousätzlech Konfiguratioun.

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Wat iwwer eng richteg Applikatioun? Wéi Dir gesitt, ass d'Gesamtleeschtung fir HTTP liicht manner wéi fir TCP. Och wann Dir HTTP mat TCP benotzt, hu mir iperf3 am TCP Benchmark konfiguréiert fir e luesen Start ze vermeiden deen den HTTP Benchmark beaflosst. Jiddereen huet eng gutt Aarbecht hei. Kube-Router huet e klore Virdeel, awer WeaveNet huet net gutt geschafft: ongeféier 20% méi schlecht wéi blo Metal. Cilium a WeaveNet mat Verschlësselung kucken wierklech traureg.

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Mat FTP, en aneren TCP-baséierte Protokoll, variéieren d'Resultater. Flanell a Kube-Router maachen d'Aarbecht, awer Calico, Canal a Cilium sinn e bëssen hannendrun a sinn ongeféier 10% méi lues wéi blo Metal. WeaveNet ass hannert sou vill wéi 17%, awer verschlësselte WeaveNet ass 40% virum verschlësselte Cilium.

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Mat SCP kënne mir direkt gesinn wéi vill SSH Verschlësselung eis kascht. Bal all CNIs maachen et gutt, awer WeaveNet ass erëm hannendrun. Cilium a WeaveNet mat Verschlësselung sinn erwaart déi Schlëmmst wéinst duebel Verschlësselung (SSH + CNI).

Hei ass e Resumétabel mat de Resultater:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Ressource Konsum

Loosst eis elo vergläichen wéi CNI Ressourcen ënner schwéier Laascht verbraucht (während TCP Transfer, 10 Gbps). An Performance Tester vergläichen mir CNI mat blot Metal (gréng Linn). Fir Ressource Konsum, Loosst eis reng Kubernetes weisen (violett Linn) ouni CNI a gesinn wéivill extra Ressourcen CNI verbraucht.

Loosst d'mat Erënnerung ufänken. Hei ass den Duerchschnëttswäert fir Noden RAM (ausser Puffer a Cache) a MB beim Transfer.

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
Erënnerung Konsum

Flannel a Kube-Router hunn exzellent Resultater gewisen - nëmmen 50 MB. Calico a Canal hunn all 70. WeaveNet verbraucht kloer méi wéi déi aner - 130 MB, a Cilium benotzt esou vill wéi 400.
Loosst eis elo den CPU Zäitverbrauch kontrolléieren. Opgepasst: d'Diagramm weist net Prozentzuelen, mee ppm, dat heescht 38 ppm fir "bloe Eisen" sinn 3,8%. Hei d'Resultater:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
CPU Konsum

Calico, Canal, Flannel a Kube-Router si ganz CPU effizient - nëmmen 2% méi wéi Kubernetes ouni CNI. WeaveNet ass wäit hannendrun mat engem extra 5%, gefollegt vum Cilium bei 7%.

Hei ass e Resumé vum Ressourceverbrauch:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)

Resultater

Tabell mat alle Resultater:

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
Allgemeng Benchmark Resultater

Konklusioun

Am leschten Deel wäert ech meng subjektiv Meenung iwwer d'Resultater ausdrécken. Denkt drun datt dëse Benchmark nëmmen den Duerchgang vun enger eenzeger Verbindung op engem ganz klenge Cluster (3 Wirbelen) testt. Et gëllt net fir grouss Cluster (<50 Noden) oder parallel Verbindungen.

Ech recommandéieren déi folgend CNIs ofhängeg vum Szenario ze benotzen:

  • Hutt Dir an Ärem Cluster Node mat wéineg Ressourcen (puer GB RAM, verschidde Kären) an Dir braucht keng Sécherheetsfeatures - wielt Flannel. Dëst ass ee vun de kosteneffektivste CNIs. An et ass kompatibel mat enger grousser Villfalt vun Architekturen (amd64, arm, arm64, etc.). Zousätzlech ass dëst ee vun zwee (deen aneren ass Cilium) CNI deen automatesch d'MTU bestëmmen kann, sou datt Dir näischt konfiguréieren musst. Kube-Router ass och gëeegent, awer et ass net als Standard an Dir musst d'MTU manuell konfiguréieren.
  • Wann néideg d'Netz verschlësselen fir Sécherheet, huelen WeaveNet. Vergiesst net d'MTU-Gréisst ze spezifizéieren wann Dir Jumbo Rummen benotzt, an d'Verschlësselung aktivéieren andeems Dir e Passwuert iwwer eng Ëmfeldvariabel uginn. Awer et ass besser iwwer d'Leeschtung ze vergiessen - dat ass d'Käschte vun der Verschlësselung.
  • fir normal Notzung Ech roden Calico. Dëse CNI gëtt wäit a verschiddene Kubernetes Deployment Tools (Kops, Kubespray, Rancher, etc.) benotzt. Wéi mat WeaveNet, gitt sécher d'MTU an ConfigMap ze konfiguréieren wann Dir Jumbo Frames benotzt. Et ass e multifunktionnellt Tool dat effizient ass wat d'Ressourceverbrauch, d'Leeschtung an d'Sécherheet ugeet.

A schliisslech roden ech Iech d'Entwécklung ze verfollegen cilium. Dëse CNI huet e ganz aktiv Team dat vill un hirem Produkt schafft (Features, Ressource spueren, Leeschtung, Sécherheet, Clustering ...) a si hu ganz interessant Pläng.

Kubernetes Network Plugin (CNI) Benchmark Resultater iwwer 10 Gbps Network (aktualiséiert: Abrëll 2019)
Visuell Diagramm fir CNI Auswiel

Source: will.com

Setzt e Commentaire