Questu hè u mo aghjurnamentu
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
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:
Selezzione di un CNI per un benchmark
Questu hè un benchmark solu per CNI da a lista in a rùbbrica
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:
Cumu MTU influenza u throughput?
Avemu vistu quantu hè impurtante MTU per u rendiment, avà vedemu cumu i nostri CNIs determinanu automaticamente:
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
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:
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:
Tutti i CNI anu fattu bè in u benchmark TCP. CNI cù a criptografia hè assai in daretu perchè a criptografia hè caru.
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.
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.
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.
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:
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.
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:
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:
Risultati
Tavula cù tutti i risultati:
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.
Schema visuale per a selezzione CNI
Source: www.habr.com