Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Ky është përditësimi im standardi i mëparshëm, i cili tani funksionon në Kubernetes 1.14 me versionin më të fundit CNI që nga prilli 2019.

Para së gjithash, dua të falënderoj ekipin e Cilium: djemtë më ndihmuan të kontrolloja dhe korrigjoja skriptet e monitorimit të metrikës.

Çfarë ka ndryshuar që nga nëntori 2018

Ja çfarë ka ndryshuar që atëherë (nëse jeni të interesuar):

Flannel mbetet ndërfaqja më e shpejtë dhe më e thjeshtë CNI, por ende nuk mbështet politikat e rrjetit dhe enkriptimin.

Romana nuk mbështetet më, ndaj e kemi hequr nga standardi.

WeaveNet tani mbështet politikat e rrjetit për Ingress dhe Egress! Por produktiviteti është ulur.

Në Calico, ju duhet ende të konfiguroni manualisht madhësinë maksimale të paketës (MTU) për performancën më të mirë. Calico ofron dy opsione për instalimin e CNI, kështu që ju mund të bëni pa një depo të veçantë ETCD:

  • gjendjen e ruajtjes në Kubernetes API si një dyqan të dhënash (madhësia e grupit < 50 nyje);
  • gjendjen e ruajtjes në Kubernetes API si një dyqan të dhënash me një përfaqësues Typha për të lehtësuar ngarkesën në API K8S (madhësia e grupit > 50 nyje).

Calico njoftoi mbështetje politikat e nivelit të aplikimit në krye të Istio për sigurinë e nivelit të aplikacionit.

Ciliium tani mbështet enkriptimin! Cilium ofron kriptim me tunele IPSec dhe ofron një alternativë ndaj rrjetit të koduar WeaveNet. Por WeaveNet është më i shpejtë se Cilium me enkriptim të aktivizuar.

Ciliium tani është më i lehtë për t'u vendosur falë operatorit të integruar ETCD.

Ekipi Ciliium është përpjekur të zvogëlojë disa peshë nga CNI i tij duke ulur konsumin e memories dhe kostot e CPU-së, por konkurrentët e tij janë akoma më të lehtë.

Konteksti standard

Standardi ekzekutohet në tre serverë Supermicro jo të virtualizuar me një ndërprerës 10 Gb Supermicro. Serverët janë të lidhur direkt me çelësin nëpërmjet kabllove pasive DAC SFP+ dhe janë konfiguruar në të njëjtin VLAN me korniza jumbo (MTU 9000).

Kubernetes 1.14.0 i instaluar në Ubuntu 18.04 LTS me Docker 18.09.2 (versioni i parazgjedhur i Docker në këtë version).

Për të përmirësuar riprodhueshmërinë, vendosëm që gjithmonë të konfigurojmë masterin në nyjen e parë, të vendosim pjesën e serverit të standardit në serverin e dytë dhe pjesën e klientit në të tretën. Për ta bërë këtë, ne përdorim NodeSelector në vendosjet e Kubernetes.

Ne do të përshkruajmë rezultatet e standardeve në shkallën e mëposhtme:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Zgjedhja e një CNI për një pikë referimi

Ky është një pikë referimi vetëm për CNI nga lista në seksion rreth krijimit të një grupi master me kubeadm Shihni dokumentacionin zyrtar të Kubernetes. Nga 9 CNI, do të marrim vetëm 6: do të përjashtojmë ato që janë të vështira për t'u instaluar dhe/ose nuk funksionojnë pa konfigurim sipas dokumentacionit (Romana, Contiv-VPP dhe JuniperContrail/TungstenFabric).

Ne do të krahasojmë CNI-të e mëposhtme:

  • Calico v3.6
  • Canal v3.6 (në thelb flannel për rrjetëzim + Calico si mur zjarri)
  • Ciliumi 1.4.2
  • Fanellë 0.11.0
  • Kube-ruteri 0.2.5
  • WeaveNet 2.5.1

Instalim

Sa më e lehtë të instalohet CNI, aq më e mirë do të jetë përshtypja jonë e parë. Të gjitha CNI-të nga standardi janë shumë të lehta për t'u instaluar (me një ose dy komanda).

Siç thamë, serverët dhe ndërprerësi janë konfiguruar me korniza jumbo të aktivizuara (ne kemi vendosur MTU në 9000). Do të ishim të lumtur nëse CNI do të përcaktonte automatikisht MTU-në bazuar në konfigurimin e përshtatësve. Megjithatë, vetëm Cilium dhe Flannel ia dolën këtë. Pjesa tjetër e CNI-ve kanë kërkesa në GitHub për të shtuar zbulimin automatik të MTU, por ne do ta konfigurojmë atë manualisht duke ndryshuar ConfigMap për Calico, Canal dhe Kube-ruter, ose duke kaluar një variabël mjedisi për WeaveNet.

Cili është problemi me MTU-në e gabuar? Ky diagram tregon ndryshimin midis WeaveNet me MTU të paracaktuar dhe kornizat jumbo të aktivizuara:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Si ndikon parametri MTU në xhiros?

Ne kemi parë se sa e rëndësishme është MTU për performancën, tani le të shohim se si CNI-të tona e përcaktojnë automatikisht atë:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
CNI zbulon automatikisht MTU

Grafiku tregon se ju duhet të konfiguroni MTU për Calico, Canal, Kube-ruter dhe WeaveNet për performancë optimale. Cilium dhe Flannel ishin në gjendje të përcaktonin saktë MTU vetë pa asnjë cilësim.

siguri

Ne do të krahasojmë sigurinë CNI në dy aspekte: aftësinë për të kriptuar të dhënat e transmetuara dhe zbatimin e politikave të rrjetit Kubernetes (bazuar në teste reale, jo në dokumentacion).

Vetëm dy CNI kodojnë të dhënat: Cilium dhe WeaveNet. Enkriptimi WeaveNet aktivizuar duke vendosur fjalëkalimin e enkriptimit si një variabël mjedisi CNI. NË dokumentacionin WeaveNet e përshkruan atë në një mënyrë të ndërlikuar, por gjithçka bëhet thjesht. Enkriptimi cilium konfiguruar me komanda, duke krijuar sekrete të Kubernetes dhe përmes modifikimit të daemonSet (pak më i komplikuar se në WeaveNet, por Cilium ka hap pas hapi udhëzime).

Sa i përket zbatimit të politikës së rrjetit, ato ia kanë dalë Calico, Canal, Ciliium dhe WeaveNet, në të cilin mund të konfiguroni rregullat e hyrjes dhe daljes. Për Kube-ruter ka rregulla vetëm për hyrjen, dhe fanellë Nuk ka fare politika rrjeti.

Këtu janë rezultatet e përgjithshme:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Rezultatet e standardit të performancës së sigurisë

prodhimtari

Ky pikë referimi tregon xhiron mesatare për të paktën tre ekzekutime të secilit test. Ne testojmë performancën e TCP dhe UDP (duke përdorur iperf3), aplikacione reale si HTTP (me Nginx dhe curl) ose FTP (me vsftpd dhe curl) dhe në fund performancën e aplikacionit duke përdorur kriptim të bazuar në SCP (duke përdorur klientin dhe serverin OpenSSH).

Për të gjitha testet, ne kryem një standard standard metalik të zhveshur (vijë e gjelbër) për të krahasuar performancën e CNI me performancën e rrjetit vendas. Këtu përdorim të njëjtën shkallë, por me ngjyra:

  • E verdha = shumë mirë
  • Portokalli = mirë
  • Blu = kaq-kaq
  • E kuqe = keq

Ne nuk do të marrim CNI të konfiguruara gabimisht dhe do të tregojmë vetëm rezultate për CNI me MTU të saktë. (Shënim: Cilium nuk e llogarit saktë MTU-në nëse aktivizoni enkriptimin, kështu që do t'ju duhet ta zvogëloni manualisht MTU-në në 8900 në versionin 1.4. Versioni tjetër, 1.5, e bën këtë automatikisht.)

Këtu janë rezultatet:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Performanca e TCP

Të gjitha CNI-të performuan mirë në standardin TCP. CNI me kriptim mbetet shumë prapa sepse kriptimi është i shtrenjtë.

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Performanca e UDP

Edhe këtu, të gjitha CNI-të po ecin mirë. CNI me kriptim tregoi pothuajse të njëjtin rezultat. Ciliium është pak prapa konkurrencës, por është vetëm 2,3% e metalit të zhveshur, kështu që nuk është një rezultat i keq. Mos harroni se vetëm Cilium dhe Flannel e përcaktuan MTU saktë vetë, dhe këto janë rezultatet e tyre pa ndonjë konfigurim shtesë.

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Po në lidhje me një aplikim të vërtetë? Siç mund ta shihni, performanca e përgjithshme për HTTP është pak më e ulët se për TCP. Edhe nëse përdorni HTTP me TCP, ne konfiguruam iperf3 në standardin TCP për të shmangur një fillim të ngadaltë që do të ndikonte në standardin HTTP. Të gjithë bënë një punë të mirë këtu. Ruteri Kube ka një avantazh të qartë, por WeaveNet nuk performoi mirë: rreth 20% më keq se metali i zhveshur. Ciliium dhe WeaveNet me enkriptim duken vërtet të trishtueshme.

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Me FTP, një tjetër protokoll i bazuar në TCP, rezultatet ndryshojnë. Flannel dhe Kube-router bëjnë punën, por Calico, Canal dhe Cilium janë pak prapa dhe janë rreth 10% më të ngadaltë se metali i zhveshur. WeaveNet është prapa deri në 17%, por WeaveNet i koduar është 40% përpara Ciliium i koduar.

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Me SCP mund të shohim menjëherë se sa na kushton kriptimi SSH. Pothuajse të gjitha CNI-të po ecin mirë, por WeaveNet është përsëri prapa. Ciliium dhe WeaveNet me enkriptim pritet të jenë më të këqijat për shkak të kriptimit të dyfishtë (SSH + CNI).

Këtu është një tabelë përmbledhëse me rezultatet:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Konsumi i burimeve

Tani le të krahasojmë se si CNI konsumon burimet nën ngarkesa të rënda (gjatë transferimit të TCP, 10 Gbps). Në testet e performancës ne krahasojmë CNI me metalin e zhveshur (vijë e gjelbër). Për konsumin e burimeve, le të tregojmë Kubernetes të pastër (vijë vjollce) pa CNI dhe të shohim sa burime shtesë konsumon CNI.

Le të fillojmë me kujtesën. Këtu është vlera mesatare për RAM-in e nyjeve (duke përjashtuar buferat dhe cache) në MB gjatë transferimit.

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Konsumi i memories

Flannel dhe Kube-router treguan rezultate të shkëlqyera - vetëm 50 MB. Calico dhe Canal kanë secili nga 70. WeaveNet konsumon qartë më shumë se të tjerët - 130 MB, dhe Cilium përdor deri në 400.
Tani le të kontrollojmë konsumin e kohës së CPU-së. Vlen të përmendet: diagrami nuk tregon përqindje, por ppm, domethënë 38 ppm për "hekurin e zhveshur" është 3,8%. Këtu janë rezultatet:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Konsumi i CPU-së

Calico, Canal, Flannel dhe Kube-router janë shumë efikas të CPU - vetëm 2% më shumë se Kubernetes pa CNI. WeaveNet mbetet shumë prapa me një shtesë prej 5%, e ndjekur nga Cilium me 7%.

Këtu është një përmbledhje e konsumit të burimeve:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)

Rezultatet e

Tabela me të gjitha rezultatet:

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Rezultatet e standardeve të përgjithshme

Përfundim

Në pjesën e fundit do të shpreh mendimin tim subjektiv për rezultatet. Mos harroni se ky pikë referimi teston vetëm xhiron e një lidhjeje të vetme në një grup shumë të vogël (3 nyje). Nuk zbatohet për grupime të mëdha (<50 nyje) ose lidhje paralele.

Unë rekomandoj përdorimin e CNI-ve të mëposhtme në varësi të skenarit:

  • A keni në grupin tuaj nyje me pak burime (disa GB RAM, disa bërthama) dhe nuk keni nevojë për veçori sigurie - zgjidhni fanellë. Ky është një nga CNI-të më me kosto efektive. Dhe është në përputhje me një shumëllojshmëri të gjerë arkitekturash (amd64, krah, arm64, etj.). Për më tepër, ky është një nga dy (tjetri është Ciliium) CNI që mund të përcaktojë automatikisht MTU, kështu që nuk keni nevojë të konfiguroni asgjë. Ruteri Kube është gjithashtu i përshtatshëm, por nuk është aq standard dhe do t'ju duhet të konfiguroni manualisht MTU.
  • Nëse është e nevojshme enkriptojnë rrjetin për siguri, merrni WeaveNet. Mos harroni të specifikoni madhësinë MTU nëse jeni duke përdorur korniza jumbo dhe aktivizoni enkriptimin duke specifikuar një fjalëkalim përmes një ndryshoreje mjedisi. Por është më mirë të harrosh performancën - kjo është kostoja e kriptimit.
  • Për përdorim normal këshillë prej basme. Ky CNI përdoret gjerësisht në mjete të ndryshme të vendosjes së Kubernetes (Kops, Kubespray, Rancher, etj.). Ashtu si me WeaveNet, sigurohuni që të konfiguroni MTU në ConfigMap nëse përdorni korniza jumbo. Është një mjet shumëfunksional që është efikas për sa i përket konsumit të burimeve, performancës dhe sigurisë.

Dhe së fundi, ju këshilloj të ndiqni zhvillimin cilium. Kjo CNI ka një ekip shumë aktiv që punon shumë në produktin e tyre (karakteristikat, kursimet e burimeve, performanca, siguria, grupimi...) dhe ata kanë plane shumë interesante.

Rezultatet e standardit të Pluginit të Rrjetit Kubernetes (CNI) mbi rrjetin 10 Gbps (Përditësuar: Prill 2019)
Diagrami vizual për përzgjedhjen e CNI

Burimi: www.habr.com

Shto një koment