Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Ovo je moje ažuriranje prethodni benchmark, koji sada radi na Kubernetesu 1.14 s najnovijom CNI verzijom od aprila 2019.

Pre svega, želim da se zahvalim Cilium timu: momci su mi pomogli da proverim i ispravim skripte za praćenje metrike.

Šta se promenilo od novembra 2018

Evo šta se promijenilo od tada (ako ste zainteresovani):

Flannel ostaje najbrži i najjednostavniji CNI interfejs, ali i dalje ne podržava mrežne politike i enkripciju.

Romana više nije podržana, pa smo je uklonili iz benchmarka.

WeaveNet sada podržava mrežne politike za Ingress i Egress! Ali produktivnost je smanjena.

U Calico, još uvijek morate ručno konfigurirati maksimalnu veličinu paketa (MTU) za najbolje performanse. Calico nudi dvije opcije za instaliranje CNI-a, tako da možete bez zasebnog ETCD spremišta:

  • skladištenje stanja u Kubernetes API-ju kao skladište podataka (veličina klastera < 50 čvorova);
  • pohranjivanje stanja u Kubernetes API-ju kao skladište podataka sa Typha proxyjem kako bi se rasteretilo K8S API (veličina klastera > 50 čvorova).

Calico je najavio podršku politike na nivou aplikacije na vrhu Istio-a za sigurnost na nivou aplikacije.

Cilium sada podržava enkripciju! Cilium obezbeđuje enkripciju sa IPSec tunelima i nudi alternativu šifrovanoj WeaveNet mreži. Ali WeaveNet je brži od Ciliuma sa omogućenom enkripcijom.

Cilium je sada lakši za implementaciju zahvaljujući ugrađenom ETCD operateru.

Cilium tim je pokušao smanjiti težinu svog CNI-a smanjenjem potrošnje memorije i troškova CPU-a, ali su njegovi konkurenti i dalje lakši.

Benchmark kontekst

Benchmark se izvodi na tri nevirtuelizovana Supermicro servera sa 10 Gb Supermicro prekidačem. Serveri su povezani direktno na svič preko pasivnih DAC SFP+ kablova i konfigurisani su na istom VLAN-u sa jumbo okvirima (MTU 9000).

Kubernetes 1.14.0 instaliran na Ubuntu 18.04 LTS sa Docker 18.09.2 (podrazumevana verzija Docker-a u ovom izdanju).

Da bismo poboljšali reproduktivnost, odlučili smo da uvijek konfigurišemo master na prvom čvoru, serverski dio benčmarka postavimo na drugi server, a klijentski dio na treći. Da bismo to učinili, koristimo NodeSelector u Kubernetes implementacijama.

Referentne rezultate ćemo opisati na sljedećoj skali:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Odabir CNI za referentnu vrijednost

Ovo je mjerilo samo za CNI sa liste u odjeljku o kreiranju jednog glavnog klastera sa kubeadm-om Pogledajte zvaničnu Kubernetes dokumentaciju. Od 9 CNI-ova, uzet ćemo samo 6: isključićemo one koje je teško instalirati i/ili ne rade bez konfiguracije prema dokumentaciji (Romana, Contiv-VPP i JuniperContrail/TungstenFabric).

Uporedićemo sledeće CNI:

  • Calico v3.6
  • Canal v3.6 (u suštini Flannel za umrežavanje + Calico kao firewall)
  • Cilium 1.4.2
  • Flanel 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

postavljanje

Što je CNI lakše instalirati, to će naš prvi utisak biti bolji. Svi CNI-ovi iz benčmarka su vrlo jednostavni za instalaciju (sa jednom ili dvije komande).

Kao što smo rekli, serveri i switch su konfigurisani sa uključenim jumbo okvirima (MTU smo postavili na 9000). Bili bismo sretni kada bi CNI automatski odredio MTU na osnovu konfiguracije adaptera. Međutim, to su uspjeli samo Cilium i Flannel. Ostali CNI-ovi imaju zahtjeve na GitHubu za dodavanje automatskog otkrivanja MTU-a, ali mi ćemo ga ručno konfigurirati promjenom ConfigMap-a za Calico, Canal i Kube-ruter, ili prosljeđivanjem varijable okruženja za WeaveNet.

U čemu je problem sa netačnim MTU? Ovaj dijagram prikazuje razliku između WeaveNet-a sa omogućenim zadanim MTU-om i jumbo okvirima:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Kako MTU utiče na propusnost?

Vidjeli smo koliko je MTU važan za performanse, a sada da vidimo kako ga naši CNI automatski određuju:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
CNI automatski detektuje MTU

Grafikon pokazuje da morate konfigurirati MTU za Calico, Canal, Kube-router i WeaveNet za optimalne performanse. Cilium i Flannel su bili u mogućnosti da sami ispravno odrede MTU bez ikakvih podešavanja.

Sigurnost

Uporedićemo CNI bezbednost u dva aspekta: sposobnost šifrovanja prenetih podataka i implementacija Kubernetes mrežnih politika (na osnovu stvarnih testova, a ne dokumentacije).

Samo dva CNI-a šifriraju podatke: Cilium i WeaveNet. Enkripcija WeaveNet omogućeno postavljanjem lozinke za enkripciju kao varijable CNI okruženja. IN dokumentaciju WeaveNet to opisuje na komplikovan način, ali sve se radi jednostavno. Enkripcija cilium konfigurisan naredbama, kreiranjem Kubernetes tajni i modifikacijom daemonSet-a (malo komplikovanije nego u WeaveNet-u, ali Cilium ima korak po korak uputstva).

Što se tiče implementacije mrežne politike, oni su uspjeli Calico, Canal, Cilium i WeaveNet, u kojem možete konfigurirati ulazna i izlazna pravila. Za Kube-ruter postoje pravila samo za Ingress, i Flannel Uopšte ne postoje mrežne politike.

Evo ukupnih rezultata:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Rezultati mjerenja performansi sigurnosti

Produktivnost

Ovo mjerilo pokazuje prosječnu propusnost tokom najmanje tri izvođenja svakog testa. Testiramo performanse TCP i UDP (koristeći iperf3), stvarne aplikacije kao što su HTTP (sa Nginxom i curl) ili FTP (sa vsftpd i curl) i konačno performanse aplikacija koristeći SCP baziranu enkripciju (koristeći klijent i server OpenSSH).

Za sve testove, izvršili smo benchmark (zelena linija) da bismo uporedili CNI performanse sa performansama matične mreže. Ovdje koristimo istu skalu, ali u boji:

  • Žuta = vrlo dobra
  • Narandžasta = dobro
  • Plava = tako-tako
  • Crveno = loše

Nećemo uzimati pogrešno konfigurisane CNI-je i prikazaćemo rezultate samo za CNI-je sa ispravnim MTU-om. (Napomena: Cilium ne izračunava ispravno MTU ako omogućite enkripciju, tako da ćete morati ručno smanjiti MTU na 8900 u verziji 1.4. Sljedeća verzija, 1.5, to radi automatski.)

Evo rezultata:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
TCP performanse

Svi CNI su se dobro pokazali u TCP mjerilu. CNI sa enkripcijom daleko zaostaje jer je enkripcija skupa.

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
UDP performanse

I ovdje svi CNI dobro rade. CNI sa enkripcijom pokazao je skoro isti rezultat. Cilium malo zaostaje za konkurencijom, ali je samo 2,3% golog metala, tako da nije loš rezultat. Ne zaboravite da su samo Cilium i Flannel sami ispravno odredili MTU, a ovo su njihovi rezultati bez ikakve dodatne konfiguracije.

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Šta je sa pravom aplikacijom? Kao što vidite, ukupne performanse za HTTP su nešto niže nego za TCP. Čak i ako koristite HTTP sa TCP-om, konfigurisali smo iperf3 u TCP benchmark-u da bismo izbegli spor početak koji bi uticao na HTTP benchmark. Ovdje su svi dobro obavili posao. Kube-ruter ima jasnu prednost, ali WeaveNet se nije dobro pokazao: oko 20% lošiji od golog metala. Cilium i WeaveNet sa enkripcijom izgledaju zaista tužno.

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Kod FTP-a, drugog protokola zasnovanog na TCP-u, rezultati se razlikuju. Flannel i Kube-router rade svoj posao, ali Calico, Canal i Cilium malo zaostaju i oko 10% su sporiji od golog metala. WeaveNet zaostaje čak 17%, ali šifrovani WeaveNet je 40% ispred šifrovanog Ciliuma.

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Sa SCP-om možemo odmah vidjeti koliko nas košta SSH enkripcija. Gotovo svi CNI-ovi rade dobro, ali WeaveNet opet zaostaje. Cilium i WeaveNet sa enkripcijom su očekivano najgori zbog dvostruke enkripcije (SSH + CNI).

Evo zbirne tabele sa rezultatima:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Potrošnja resursa

Sada uporedimo kako CNI troši resurse pod velikim opterećenjem (tokom TCP transfera, 10 Gbps). U testovima performansi poredimo CNI sa golim metalom (zelena linija). Za potrošnju resursa, hajde da pokažemo čisti Kubernetes (ljubičasta linija) bez CNI i vidimo koliko dodatnih resursa CNI troši.

Počnimo s pamćenjem. Ovdje je prosječna vrijednost za RAM čvorova (isključujući bafere i keš) u MB tokom prijenosa.

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Potrošnja memorije

Flannel i Kube-router su pokazali odlične rezultate - samo 50 MB. Calico i Canal imaju po 70. WeaveNet očito troši više od ostalih - 130 MB, a Cilium čak 400.
Sada provjerimo potrošnju CPU vremena. Zanimljivo: dijagram ne prikazuje procente, već ppm, odnosno 38 ppm za „golo gvožđe“ je 3,8%. Evo rezultata:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Potrošnja CPU-a

Calico, Canal, Flannel i Kube-router su veoma efikasni CPU - samo 2% više od Kubernetesa bez CNI-a. WeaveNet daleko zaostaje sa dodatnih 5%, a slijedi ga Cilium sa 7%.

Evo sažetka potrošnje resursa:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)

Ishodi

Tabela sa svim rezultatima:

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Opći benchmark rezultati

zaključak

U zadnjem dijelu ću iznijeti svoje subjektivno mišljenje o rezultatima. Zapamtite da ovo mjerilo testira samo propusnost jedne veze na vrlo malom klasteru (3 čvora). Ne primjenjuje se na velike klastere (<50 čvorova) ili paralelne veze.

Preporučujem korištenje sljedećih CNI-ova ovisno o scenariju:

  • Imate li u svom klasteru čvorovi sa malo resursa (nekoliko GB RAM-a, nekoliko jezgri) i ne trebaju vam sigurnosne funkcije - odaberite Flannel. Ovo je jedan od najisplativijih CNI-a. I kompatibilan je sa širokim spektrom arhitektura (amd64, arm, arm64, itd.). Osim toga, ovo je jedan od dva (drugi je Cilium) CNI koji mogu automatski odrediti MTU, tako da ne morate ništa konfigurirati. Kube-router je također prikladan, ali nije standardan i morat ćete ručno konfigurirati MTU.
  • Ako je potrebno šifriranje mreže radi sigurnosti, uzmi WeaveNet. Ne zaboravite navesti MTU veličinu ako koristite jumbo okvire i omogućite enkripciju navođenjem lozinke putem varijable okruženja. Ali bolje je zaboraviti na performanse - to je cijena enkripcije.
  • Do normalna upotreba Sovetuû Calico. Ovaj CNI se široko koristi u raznim alatima za implementaciju Kubernetesa (Kops, Kubespray, Rancher, itd.). Kao i kod WeaveNeta, obavezno konfigurišite MTU u ConfigMap ako koristite jumbo okvire. To je multifunkcionalni alat koji je efikasan u smislu potrošnje resursa, performansi i sigurnosti.

I na kraju, savjetujem vam da pratite razvoj cilium. Ovaj CNI ima vrlo aktivan tim koji puno radi na svom proizvodu (karakteristike, uštede resursa, performanse, sigurnost, grupisanje...) i imaju vrlo zanimljive planove.

Kubernetes mrežni dodatak (CNI) Benchmark rezultati preko 10 Gbps mreže (ažurirano: april 2019.)
Vizualni dijagram za izbor CNI

izvor: www.habr.com

Dodajte komentar