Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Ovo je moje ažuriranje prethodno mjerilo, koji sada radi na Kubernetesu 1.14 s najnovijom CNI verzijom od travnja 2019.

Prije svega, želim zahvaliti Cilium timu: dečki su mi pomogli provjeriti i ispraviti skripte za praćenje metrike.

Što se promijenilo od studenog 2018

Evo što se od tada promijenilo (ako vas zanima):

Flannel ostaje najbrže i najjednostavnije CNI sučelje, ali još uvijek ne podržava mrežna pravila i enkripciju.

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

WeaveNet sada podržava mrežna pravila za ulaz i izlaz! Ali produktivnost se smanjila.

U Calicu još uvijek morate ručno konfigurirati maksimalnu veličinu paketa (MTU) za najbolju izvedbu. Calico nudi dvije opcije za instaliranje CNI-ja, tako da možete bez zasebnog ETCD repozitorija:

  • pohranjivanje stanja u Kubernetes API kao pohranu podataka (veličina klastera < 50 čvorova);
  • pohranjivanje stanja u Kubernetes API kao pohranu podataka s Typha proxyjem za rasterećenje K8S API-ja (veličina klastera > 50 čvorova).

Calico je najavio podršku politike na razini aplikacije na vrhu Istio za sigurnost na razini aplikacije.

Cilium sada podržava enkripciju! Cilium pruža enkripciju s IPSec tunelima i nudi alternativu šifriranoj WeaveNet mreži. Ali WeaveNet je brži od Ciliuma s uključenom enkripcijom.

Cilium je sada lakše implementirati zahvaljujući ugrađenom ETCD operatoru.

Tim Ciliuma pokušao je malo smanjiti težinu svog CNI-ja smanjenjem potrošnje memorije i troškova CPU-a, ali njegovi su konkurenti još uvijek lakši.

Benchmark kontekst

Benchmark se izvodi na tri nevirtualizirana Supermicro poslužitelja s 10 Gb Supermicro preklopnikom. Poslužitelji su povezani izravno na preklopnik putem pasivnih DAC SFP+ kabela i konfigurirani su na istom VLAN-u s jumbo okvirima (MTU 9000).

Kubernetes 1.14.0 instaliran na Ubuntu 18.04 LTS s Dockerom 18.09.2 (zadana verzija Dockera u ovom izdanju).

Kako bismo poboljšali ponovljivost, odlučili smo uvijek konfigurirati master na prvom čvoru, postaviti poslužiteljski dio referentne vrijednosti na drugi poslužitelj, a klijentski dio na treći. Da bismo to učinili, koristimo NodeSelector u Kubernetes implementacijama.

Opisat ćemo rezultate benchmarka na sljedećoj ljestvici:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

Odabir CNI-a za referentnu vrijednost

Ovo je mjerilo samo za CNI s popisa u odjeljku o stvaranju jednog glavnog klastera s kubeadmom Pogledajte službenu Kubernetes dokumentaciju. Od 9 CNI-ova uzet ćemo samo 6: isključit ćemo one koje je teško instalirati i/ili ne rade bez konfiguracije prema dokumentaciji (Romana, Contiv-VPP i JuniperContrail/TungstenFabric).

Usporedit ćemo sljedeće CNI-ove:

  • Calico v3.6
  • Canal v3.6 (u suštini Flannel za umrežavanje + Calico kao vatrozid)
  • Trepetljika 1.4.2
  • Flanel 0.11.0
  • Kube-usmjerivač 0.2.5
  • WeaveNet 2.5.1

Instalacija

Što je CNI lakše instalirati, to će naš prvi dojam biti bolji. Svi CNI-ovi iz benchmarka vrlo su jednostavni za instalaciju (s jednom ili dvije naredbe).

Kao što smo rekli, poslužitelji i preklopnik su konfigurirani s omogućenim jumbo okvirima (postavili smo MTU na 9000). Bili bismo sretni kada bi CNI automatski odredio MTU na temelju 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 to ručno konfigurirati promjenom ConfigMap-a za Calico, Canal i Kube-router ili prosljeđivanjem varijable okruženja za WeaveNet.

U čemu je problem s netočnim MTU-om? Ovaj dijagram prikazuje razliku između WeaveNeta sa omogućenim zadanim MTU i velikim okvirima:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Kako MTU utječe na propusnost?

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

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
CNI automatski detektira MTU

Grafikon pokazuje da trebate konfigurirati MTU za Calico, Canal, Kube-router i WeaveNet za optimalnu izvedbu. Cilium i Flannel mogli su sami ispravno odrediti MTU bez ikakvih postavki.

sigurnosti

Usporedit ćemo CNI sigurnost u dva aspekta: mogućnost šifriranja prenesenih podataka i implementacija Kubernetes mrežnih politika (na temelju stvarnih testova, a ne dokumentacije).

Samo dva CNI-ja šifriraju podatke: Cilium i WeaveNet. Šifriranje WeaveNet omogućeno postavljanjem lozinke za šifriranje kao CNI varijable okruženja. U dokumentacija WeaveNet to opisuje na kompliciran način, ali sve se radi jednostavno. Šifriranje Trepetljika konfiguriran naredbama, stvaranjem Kubernetes tajni i modifikacijom daemonSeta (malo kompliciranije nego u WeaveNetu, ali Cilium ima korak po korak instrukcije).

Što se tiče provedbe mrežne politike, uspjeli su Calico, Canal, Cilium i WeaveNet, u kojem možete konfigurirati ulazna i izlazna pravila. Za Kube-usmjerivač postoje pravila samo za Ingress, i Flanel Uopće ne postoje mrežna pravila.

Ovo su ukupni rezultati:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Rezultati mjerenja sigurnosti

Performanse

Ovo mjerilo pokazuje prosječnu propusnost tijekom najmanje tri izvođenja svakog testa. Testiramo izvedbu TCP-a i UDP-a (pomoću iperf3), stvarnih aplikacija poput HTTP-a (s Nginxom i curl-om) ili FTP-a (s vsftpd-om i curl-om) i konačno izvedbu aplikacije pomoću enkripcije temeljene na SCP-u (pomoću OpenSSH klijenta i poslužitelja).

Za sve testove proveli smo benchmark na goli metal (zelena linija) kako bismo usporedili performanse CNI-ja s performansama izvorne mreže. Ovdje koristimo istu ljestvicu, ali u boji:

  • Žuto = vrlo dobro
  • Narančasto = dobro
  • Plavo = tako-tako
  • Crveno = loše

Nećemo uzeti neispravno konfigurirane CNI-ove i prikazat ćemo samo rezultate za CNI-ove s točnim 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 Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
TCP izvedba

Svi CNI-ovi imali su dobre rezultate u TCP benchmarku. CNI s enkripcijom daleko zaostaje jer je enkripcija skupa.

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
UDP performanse

I ovdje svi CNI-ji dobro stoje. CNI s enkripcijom pokazao je gotovo 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 Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

Što je sa stvarnom primjenom? Kao što vidite, ukupna izvedba za HTTP nešto je niža nego za TCP. Čak i ako koristite HTTP s TCP-om, konfigurirali smo iperf3 u TCP referentnoj vrijednosti kako bismo izbjegli spori početak koji bi utjecao na HTTP referentnu vrijednost. Ovdje su svi obavili dobar posao. Kube-usmjerivač ima jasnu prednost, ali WeaveNet nije imao dobre rezultate: oko 20% lošije od golog metala. Cilium i WeaveNet s enkripcijom izgledaju jako tužno.

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

S FTP-om, drugim protokolom temeljenim na TCP-u, rezultati se razlikuju. Flannel i Kube-router rade posao, ali Calico, Canal i Cilium malo zaostaju i oko 10% su sporiji od golog metala. WeaveNet zaostaje za čak 17%, ali šifrirani WeaveNet je 40% ispred šifriranog Ciliuma.

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

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

Evo tablice sažetka s rezultatima:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

Potrošnja resursa

Sada usporedimo kako CNI troši resurse pod velikim opterećenjem (tijekom TCP prijenosa, 10 Gbps). U testovima performansi uspoređujemo CNI s golim metalom (zelena linija). Za potrošnju resursa, pokažimo čisti Kubernetes (ljubičasta linija) bez CNI-ja i vidimo koliko dodatnih resursa CNI troši.

Počnimo s pamćenjem. Ovdje je prosječna vrijednost RAM-a čvorova (isključujući međuspremnike i predmemoriju) u MB tijekom prijenosa.

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Potrošnja memorije

Flannel i Kube-router pokazali su izvrsne 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. Vrijedno pažnje: dijagram ne prikazuje postotke, već ppm, odnosno 38 ppm za "golo željezo" je 3,8%. Evo rezultata:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Potrošnja procesora

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

Evo sažetka potrošnje resursa:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)

Rezultati

Tablica sa svim rezultatima:

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Opći rezultati benchmarka

Zaključak

U zadnjem dijelu ću iznijeti svoje subjektivno mišljenje o rezultatima. Upamtite da ovo mjerilo testira samo propusnost jedne veze na vrlo malom klasteru (3 čvora). Ne odnosi 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 s malo resursa (nekoliko GB RAM-a, nekoliko jezgri) i ne trebaju vam sigurnosne značajke - odaberite Flanel. Ovo je jedan od najisplativijih CNI-ova. Kompatibilan je sa širokim spektrom arhitektura (amd64, arm, arm64 itd.). Osim toga, ovo je jedan od dva (drugi je Cilium) CNI koji može automatski odrediti MTU, tako da ne morate ništa konfigurirati. Kube-usmjerivač je također prikladan, ali nije standardan i morat ćete ručno konfigurirati MTU.
  • Ako je potrebno šifrirati mrežu za sigurnost, 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 izvedbu - to je cijena enkripcije.
  • za normalno korištenje Savjetujem vam platno. Ovaj CNI naširoko se koristi u raznim Kubernetes alatima za implementaciju (Kops, Kubespray, Rancher itd.). Kao i kod WeaveNeta, svakako konfigurirajte MTU u ConfigMap ako koristite jumbo okvire. To je višenamjenski alat koji je učinkovit u smislu potrošnje resursa, performansi i sigurnosti.

I na kraju, savjetujem vam da pratite razvoj Trepetljika. Ovaj CNI ima vrlo aktivan tim koji puno radi na svom proizvodu (značajke, ušteda resursa, performanse, sigurnost, klasteriranje...) i imaju vrlo zanimljive planove.

Kubernetes Network Plugin (CNI) Rezultati usporedne mjere preko mreže od 10 Gbps (ažurirano: travanj 2019.)
Vizualni dijagram za odabir CNI

Izvor: www.habr.com

Dodajte komentar