Ovo je moje ažuriranje
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
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:
Odabir CNI-a za referentnu vrijednost
Ovo je mjerilo samo za CNI s popisa u odjeljku
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:
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:
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
Š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:
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:
Svi CNI-ovi imali su dobre rezultate u TCP benchmarku. CNI s enkripcijom daleko zaostaje jer je enkripcija skupa.
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.
Š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.
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.
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:
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.
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:
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:
Rezultati
Tablica sa svim rezultatima:
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.
Vizualni dijagram za odabir CNI
Izvor: www.habr.com