Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Questu hè u mo aghjurnamentu benchmark precedente, chì avà funziona in Kubernetes 1.14 cù l'ultima versione CNI da aprile 2019.

Prima di tuttu, vogliu ringrazià a squadra di Cilium: i picciotti m'hà aiutatu à verificà è curreghje i scripts di monitorizazione di metrica.

Ciò chì hè cambiatu da nuvembre 2018

Eccu ciò chì hè cambiatu da tandu (se site interessatu):

Flannel resta l'interfaccia CNI più veloce è simplice, ma ùn sustene micca e pulitiche di rete è a criptografia.

Romana ùn hè più supportata, cusì l'avemu eliminata da u benchmark.

WeaveNet supporta avà e pulitiche di rete per Ingress è Egress! Ma a produtividade hè diminuita.

In Calico, avete sempre bisognu di cunfigurà manualmente a dimensione massima di pacchettu (MTU) per u megliu rendimentu. Calico offre duie opzioni per installà CNI, cusì pudete fà senza un repositariu ETCD separatu:

  • u statu di almacenamentu in l'API Kubernetes cum'è un magazzinu di dati (taglia di cluster < 50 nodes);
  • u statu di almacenamentu in l'API Kubernetes cum'è un magazzinu di dati cù un proxy Typha per allevà a carica nantu à l'API K8S (taglia di cluster> 50 nodi).

Calico hà annunziatu u sustegnu pulitiche à livellu di applicazione nantu à Istio per a sicurità à livellu di l'applicazione.

Cilium supporta avà a criptografia! Cilium furnisce criptografia cù tunnel IPSec è offre una alternativa à a reta WeaveNet criptata. Ma WeaveNet hè più veloce di Cilium cù a criptografia attivata.

Cilium hè avà più faciule da implementà grazia à l'operatore ETCD integratu.

A squadra di Cilium hà pruvatu à trimlà un pocu di pesu da u so CNI riducendu u cunsumu di memoria è i costi di CPU, ma i so cuncurrenti sò sempre più ligeri.

Cuntestu di benchmark

U benchmark hè gestitu nantu à trè servitori Supermicro micca virtualizzati cù un switch Supermicro 10 Gb. I servitori sò cunnessi direttamente à u switch via DAC passivi SFP + cables è sò cunfigurati nantu à a stessa VLAN cù frames jumbo (MTU 9000).

Kubernetes 1.14.0 installatu in Ubuntu 18.04 LTS cù Docker 18.09.2 (a versione predeterminata di Docker in questa versione).

Per migliurà a riproducibilità, avemu decisu di cunfigurà sempre u maestru in u primu node, postu a parte di u servitore di u benchmark in u sicondu servitore, è a parte di u cliente in u terzu. Per fà questu, usemu NodeSelector in implementazioni Kubernetes.

Descriveremu i risultati di u benchmark in a scala seguente:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

Selezzione di un CNI per un benchmark

Questu hè un benchmark solu per CNI da a lista in a rùbbrica circa a creazione di un cluster maestru cù kubeadm Vede a documentazione ufficiale di Kubernetes. Di i 9 CNI, pigliaremu solu 6: escluderemu quelli chì sò difficiuli di stallà è / o ùn travaglianu micca senza cunfigurazione secondu a ducumentazione (Romana, Contiv-VPP è JuniperContrail/TungstenFabric).

Compararemu i seguenti CNI:

  • Calico v3.6
  • Canal v3.6 (essenzialmente Flannel for networking + Calico cum'è firewall)
  • Cilium 1.4.2
  • Flanella 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

rimarchevuli

A più faciule da installà u CNI, megliu serà a nostra prima impressione. Tutti i CNI da u benchmark sò assai faciuli d'installà (cù unu o dui cumandamenti).

Comu avemu dettu, i servitori è u switch sò cunfigurati cù frames jumbo attivati ​​(avemu stabilitu u MTU à 9000). Saremu felici se CNI determina automaticamente u MTU basatu annantu à a cunfigurazione di l'adattatori. Tuttavia, solu Cilium è Flannel hà riisciutu questu. U restu di i CNI anu richieste nantu à GitHub per aghjunghje una scuperta automatica di MTU, ma l'avemu cunfigurà manualmente cambiendu u ConfigMap per Calico, Canal è Kube-router, o passendu una variabile d'ambiente per WeaveNet.

Chì ci hè u prublema cù MTU incorrecte? Stu diagramma mostra a diffarenza trà WeaveNet cù u MTU predeterminatu è i frames jumbo attivati:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Cumu MTU influenza u throughput?

Avemu vistu quantu hè impurtante MTU per u rendiment, avà vedemu cumu i nostri CNIs determinanu automaticamente:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
CNI rileva automaticamente MTU

U graficu mostra chì avete bisognu di cunfigurà u MTU per Calico, Canal, Kube-router è WeaveNet per un rendiment ottimali. Cilium è Flannel sò stati capaci di determinà currettamente u MTU stessu senza paràmetri.

Seguretat

Cumpararemu a sicurezza CNI in dui aspetti: a capacità di criptà e dati trasmessi è l'implementazione di e pulitiche di a rete Kubernetes (basatu nantu à teste reali, micca documentazioni).

Solu dui CNI criptanu i dati: Cilium è WeaveNet. Encryption WeaveNet attivatu da stabilisce a password di criptografia cum'è una variabile d'ambiente CNI. IN ducumentazione WeaveNet descrive in una manera cumplicata, ma tuttu hè fattu simplice. Encryption Ciliu cunfiguratu da i cumandamenti, creendu secreti Kubernetes, è attraversu a mudificazione di u daemonSet (un pocu più cumplicatu chè in WeaveNet, ma Cilium hà passu à passu). instructions).

In quantu à l'implementazione di a pulitica di a rete, anu successu Calico, Canal, Cilium è WeaveNet, in quale pudete cunfigurà e regule Ingress è Egress. Per Kube-router ci sò regule solu per Ingress, è Flannel Ùn ci sò micca pulitiche di rete in tuttu.

Eccu i risultati generali:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Risultati di Benchmark di Performance di Sicurezza

Produttività

Stu benchmark mostra u throughput mediu annantu à almenu trè corse di ogni prova. Testemu a prestazione di TCP è UDP (usendu iperf3), applicazioni reali cum'è HTTP (cù Nginx è curl) o FTP (cù vsftpd è curl) è infine u rendiment di l'applicazioni utilizendu a criptografia basata in SCP (usendu client è servitore OpenSSH).

Per tutti i testi, avemu realizatu un benchmark bare metal (linea verde) per paragunà u rendiment CNI cù u rendiment di a rete nativa. Quì avemu aduprà a stessa scala, ma in culore:

  • Giallu = assai bè
  • Orange = bè
  • Blu = cusì cusì
  • Rossu = male

Ùn pigliaremu micca CNI cunfigurati in modu incorrectu è mostrarà solu risultati per CNI cù u MTU currettu. (Nota: Cilium ùn hà micca calculatu currettamente l'MTU se attivate a criptografia, cusì avete da riduce manualmente l'MTU à 8900 in a versione 1.4. A prossima versione, 1.5, fa automaticamente.)

Eccu i risultati:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Prestazione TCP

Tutti i CNI anu fattu bè in u benchmark TCP. CNI cù a criptografia hè assai in daretu perchè a criptografia hè caru.

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Prestazione UDP

Ancu quì, tutti i CNI facenu bè. CNI cù criptografia hà dimustratu quasi u listessu risultatu. Cilium hè un pocu daretu à a cumpetizione, ma hè solu 2,3% di u metale nudu, per quessa ùn hè micca un malu risultatu. Ùn vi scurdate chì solu Cilium è Flannel anu determinatu u MTU currettamente elli stessi, è questi sò i so risultati senza cunfigurazione supplementu.

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

E una vera applicazione? Comu pudete vede, u rendiment generale per HTTP hè ligeramente più bassu cà per TCP. Ancu s'è vo utilizate HTTP cù TCP, avemu cunfiguratu iperf3 in u benchmark TCP per evità un iniziu lento chì affettanu u benchmark HTTP. Tutti anu fattu un bonu travagliu quì. Kube-router hà un vantaghju chjaru, ma WeaveNet ùn hà micca fattu bè: circa 20% peggiu di u metale nudu. Cilium è WeaveNet cù criptografia parenu veramente tristi.

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

Cù FTP, un altru protocolu basatu in TCP, i risultati varienu. Flannel è Kube-router facenu u travagliu, ma Calico, Canal è Cilium sò un pocu daretu è sò circa 10% più lentu cà u metale nudu. WeaveNet hè daretu da quant'è 17%, ma WeaveNet criptatu hè 40% davanti à Cilium criptatu.

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

Cù SCP pudemu immediatamente vede quantu ci costa a criptografia SSH. Quasi tutti i CNI stanu bè, ma WeaveNet hè in ritardu di novu. Cilium è WeaveNet cù criptografia sò previste u peghju per via di doppia criptografia (SSH + CNI).

Eccu un tavulu riassuntu cù i risultati:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

U cunsumu di risorse

Avà paragunemu cumu CNI cunsuma risorse sottu carichi pesanti (durante u trasferimentu TCP, 10 Gbps). In i testi di prestazione paragunemu CNI cù metallo nudu (linea verde). Per u cunsumu di risorse, mustramu Kubernetes puri (linea viola) senza CNI è vede quante risorse extra CNI cunsuma.

Cuminciamu cù a memoria. Eccu u valore mediu per a RAM di i nodi (escludendu i buffer è a cache) in MB durante u trasferimentu.

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Cunsumu di memoria

Flannel è Kube-router anu mostratu risultati eccellenti - solu 50 MB. Calico è Canal anu ognunu 70. WeaveNet chjaramente cunsuma più di l'altri - 130 MB, è Cilium usa quant'è 400.
Avà cuntrollà u cunsumu di tempu CPU. Da nutà: u diagramma ùn mostra micca percentuali, ma ppm, vale à dì, 38 ppm per "ferru nudu" hè 3,8%. Eccu i risultati:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
U cunsumu di CPU

Calico, Canal, Flannel è Kube-router sò assai CPU efficienti - solu 2% più di Kubernetes senza CNI. WeaveNet si trova assai daretu cù un 5% extra, seguita da Cilium à 7%.

Eccu un riassuntu di u cunsumu di risorse:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)

Risultati

Tavula cù tutti i risultati:

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
I risultati di benchmark generale

cunchiusioni

In l'ultima parte, esprimeraghju a mo opinione subjectiva nantu à i risultati. Ricurdativi chì stu benchmark prova solu u throughput di una sola cunnessione in un cluster assai chjucu (3 nodi). Ùn si applicà micca à grandi clusters (<50 nodes) o cunnessione parallele.

Aghju ricumandemu di utilizà i seguenti CNI secondu u scenariu:

  • Avete in u vostru cluster nodi cù pocu risorse (parechji GB di RAM, parechji nuclei) è ùn avete micca bisognu di funziunalità di sicurità - sceglite Flannel. Questu hè unu di i CNI più costuali. È hè cumpatibile cù una larga varietà di architetture (amd64, arm, arm64, etc.). Inoltre, questu hè unu di dui (l'altru hè Cilium) CNI chì ponu automaticamente determinà u MTU, perchè ùn avete micca cunfigurà nunda. Kube-router hè ancu adattatu, ma ùn hè micca standard è avete bisognu di cunfigurà manualmente u MTU.
  • Se ne necessariu cripta a reta per a sicurità, pigliate WeaveNet. Ùn vi scurdate di specificà a dimensione MTU si usate jumbo frames, è attivate a criptografia specificando una password via una variabile di ambiente. Ma hè megliu scurdà di u rendiment - questu hè u costu di criptografia.
  • di usu normale Dicemu Calico. Stu CNI hè largamente utilizatu in diversi strumenti di implementazione di Kubernetes (Kops, Kubespray, Rancher, etc.). Cum'è cù WeaveNet, assicuratevi di cunfigurà u MTU in ConfigMap se utilizate jumbo frames. Hè un strumentu multifunzionale chì hè efficiente in termini di cunsumu di risorse, prestazioni è sicurità.

È infine, vi cunsigliu di seguità u sviluppu Ciliu. Stu CNI hà una squadra assai attiva chì travaglia assai nantu à u so pruduttu (caratteristiche, risparmiu di risorse, prestazioni, sicurezza, clustering...) è anu piani assai interessanti.

Kubernetes Network Plugin (CNI) Benchmark Results over 10 Gbps Network (Aggiornatu: Aprile 2019)
Schema visuale per a selezzione CNI

Source: www.habr.com

Add a comment