Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
Å is ir mans atjauninājums iepriekŔējais etalons, kas tagad darbojas uz Kubernetes 1.14 ar jaunāko CNI versiju no 2019. gada aprīļa.

Pirmkārt, es vēlos pateikties Cilium komandai: puiÅ”i man palÄ«dzēja pārbaudÄ«t un labot metrikas uzraudzÄ«bas skriptus.

Kas ir mainÄ«jies kopÅ” 2018. gada novembra

LÅ«k, kas kopÅ” tā laika ir mainÄ«jies (ja jÅ«s interesē):

Flanelis joprojām ir ātrākais un vienkārŔākais CNI interfeiss, taču joprojām neatbalsta tÄ«kla politikas un Å”ifrÄ“Å”anu.

Romana vairs netiek atbalstÄ«ta, tāpēc esam to noņēmuÅ”i no etalona.

WeaveNet tagad atbalsta tīkla politikas Ingress un Egress! Bet produktivitāte ir samazinājusies.

Programmā Calico jums joprojām ir manuāli jākonfigurē maksimālais pakeÅ”u lielums (MTU), lai nodroÅ”inātu vislabāko veiktspēju. Calico piedāvā divas CNI instalÄ“Å”anas iespējas, lai jÅ«s varētu iztikt bez atseviŔķa ETCD repozitorija:

  • saglabājot stāvokli Kubernetes API kā datu krātuvi (klastera izmērs < 50 mezgli);
  • saglabājot stāvokli Kubernetes API kā datu krātuvi ar Typha starpniekserveri, lai atvieglotu K8S API slodzi (klastera izmērs > 50 mezgli).

Calico paziņoja par atbalstu lietojumprogrammu lÄ«meņa politikas papildus Istio lietojumprogrammas lÄ«meņa droŔībai.

Cilium tagad atbalsta Å”ifrÄ“Å”anu! Cilium nodroÅ”ina Å”ifrÄ“Å”anu ar IPSec tuneļiem un piedāvā alternatÄ«vu Å”ifrētajam WeaveNet tÄ«klam. Bet WeaveNet ir ātrāks par Cilium ar iespējotu Å”ifrÄ“Å”anu.

Pateicoties iebūvētajam ETCD operatoram, Cilium tagad ir vieglāk izvietot.

Cilium komanda ir mēģinājusi nedaudz samazināt CNI svaru, samazinot atmiņas patēriņu un CPU izmaksas, taču tās konkurenti joprojām ir vieglāki.

Etalona konteksts

Etalons tiek palaists trÄ«s nevirtualizētos Supermicro serveros ar 10 Gb Supermicro slēdzi. Serveri ir tieÅ”i savienoti ar slēdzi, izmantojot pasÄ«vos DAC SFP+ kabeļus, un ir konfigurēti tajā paŔā VLAN ar lielajiem rāmjiem (MTU 9000).

Kubernetes 1.14.0 instalēta Ubuntu 18.04 LTS ar Docker 18.09.2 (noklusējuma Docker versija Å”ajā laidienā).

Lai uzlabotu reproducējamÄ«bu, mēs nolēmām vienmēr konfigurēt galveno mezglu pirmajā mezglā, novietot etalona servera daļu otrajā serverÄ« un klienta daļu treÅ”ajā. Lai to izdarÄ«tu, Kubernetes izvietojumos izmantojam NodeSelector.

Mēs aprakstÄ«sim etalona rezultātus Ŕādā mērogā:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

CNI atlase etalonam

Šis ir etalons tikai CNI no sadaļas saraksta par viena galvenā klastera izveidi ar kubeadm Skatiet oficiālo Kubernetes dokumentāciju. No 9 CNI mēs ņemsim tikai 6: mēs izslēgsim tos, kurus ir grūti uzstādīt un/vai nedarbojas bez konfigurācijas saskaņā ar dokumentāciju (Romana, Contiv-VPP un JuniperContrail/TungstenFabric).

Mēs salÄ«dzināsim Ŕādus CNI:

  • Calico v3.6
  • Canal v3.6 (bÅ«tÄ«bā Flannel tÄ«kla izveidei + Calico kā ugunsmÅ«ris)
  • Cilium 1.4.2
  • Flanelis 0.11.0
  • Kube-marÅ”rutētājs 0.2.5
  • WeaveNet 2.5.1

UzstādīŔana

Jo vieglāk ir uzstādīt CNI, jo labāks būs mūsu pirmais iespaids. Visus CNI no etalona ir ļoti viegli instalēt (ar vienu vai divām komandām).

Kā jau teicām, serveri un slēdzis ir konfigurēti ar iespējotiem lielajiem rāmjiem (mēs iestatÄ«jām MTU uz 9000). Mēs bÅ«tu priecÄ«gi, ja CNI automātiski noteiktu MTU, pamatojoties uz adapteru konfigurāciju. Tomēr tas izdevās tikai Cilium un Flanel. Pārējiem CNI ir GitHub pieprasÄ«jumi pievienot automātisku MTU atklāŔanu, taču mēs to konfigurēsim manuāli, mainot ConfigMap for Calico, Canal un Kube-router vai nododot WeaveNet vides mainÄ«go.

Kāda ir problēma ar nepareizu MTU? Å Ä« diagramma parāda atŔķirÄ«bu starp WeaveNet ar noklusējuma MTU un iespējotiem lielajiem rāmjiem:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
Kā MTU ietekmē caurlaidspēju?

Mēs esam redzējuÅ”i, cik MTU ir svarÄ«ga veiktspējai, tagad redzēsim, kā mÅ«su CNI to automātiski nosaka:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
CNI automātiski nosaka MTU

Diagrammā redzams, ka optimālai veiktspējai ir jākonfigurē MTU Calico, Canal, Kube-router un WeaveNet. Cilium un Flanel varēja pareizi noteikt MTU paÅ”i bez jebkādiem iestatÄ«jumiem.

DroŔība

Mēs salÄ«dzināsim CNI droŔību divos aspektos: spēja Å”ifrēt pārsÅ«tÄ«tos datus un Kubernetes tÄ«kla politiku ievieÅ”ana (pamatojoties uz reāliem testiem, nevis dokumentāciju).

Tikai divi CNI Å”ifrē datus: Cilium un WeaveNet. Å ifrÄ“Å”ana WeaveNet iespējots, iestatot Å”ifrÄ“Å”anas paroli kā CNI vides mainÄ«go. IN dokumentācija WeaveNet to apraksta sarežģīti, bet viss tiek darÄ«ts vienkārÅ”i. Å ifrÄ“Å”ana ciliums konfigurēts ar komandām, izveidojot Kubernetes noslēpumus un modificējot daemonSet (nedaudz sarežģītāk nekā WeaveNet, bet Cilium ir soli pa solim instrukcijas).

Runājot par tÄ«kla politikas ievieÅ”anu, viņiem tas ir izdevies Calico, Canal, Cilium un WeaveNet, kurā varat konfigurēt ieejas un izejas noteikumus. PriekÅ” Kube marÅ”rutētājs ir noteikumi tikai Ingress, un Flaneļa TÄ«kla politiku vispār nav.

Šeit ir kopējie rezultāti:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
DroŔības veiktspējas etalona rezultāti

ŠŸŃ€Š¾ŠøŠ·Š²Š¾Š“ŠøтŠµŠ»ŃŒŠ½Š¾ŃŃ‚ŃŒ

Å is etalons parāda vidējo caurlaidspēju vismaz trÄ«s katra testa braucienos. Mēs pārbaudām TCP un UDP (izmantojot iperf3), reālu lietojumprogrammu, piemēram, HTTP (ar Nginx un curl) vai FTP (ar vsftpd un curl) veiktspēju un, visbeidzot, lietojumprogrammu veiktspēju, izmantojot SCP Å”ifrÄ“Å”anu (izmantojot klientu un serveri OpenSSH).

Visiem testiem mēs veicām tukÅ”a metāla etalonu (zaļā lÄ«nija), lai salÄ«dzinātu CNI veiktspēju ar vietējā tÄ«kla veiktspēju. Å eit mēs izmantojam to paÅ”u mērogu, bet krāsā:

  • Dzeltens = ļoti labi
  • Oranžs = labs
  • Zils = tik-tā
  • Sarkans = slikti

Mēs neuzņemsim nepareizi konfigurētus CNI un rādÄ«sim tikai rezultātus CNI ar pareizo MTU. (PiezÄ«me: Cilium neaprēķina pareizi MTU, ja iespējojat Å”ifrÄ“Å”anu, tāpēc jums bÅ«s manuāli jāsamazina MTU lÄ«dz 8900 versijā 1.4. Nākamā versija 1.5 to dara automātiski.)

Lūk, rezultāti:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
TCP veiktspēja

Visi CNI TCP etalonā darbojās labi. CNI ar Å”ifrÄ“Å”anu ievērojami atpaliek, jo Å”ifrÄ“Å”ana ir dārga.

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
UDP veiktspēja

ArÄ« Å”eit visiem CNI klājas labi. CNI ar Å”ifrÄ“Å”anu uzrādÄ«ja gandrÄ«z tādu paÅ”u rezultātu. Cilium nedaudz atpaliek no konkurentiem, taču tajā ir tikai 2,3% tukŔā metāla, tāpēc tas nav slikts rezultāts. Neaizmirstiet, ka tikai Cilium un Flanel paÅ”i pareizi noteica MTU, un tie ir viņu rezultāti bez papildu konfigurācijas.

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

Kā ar reālu pieteikumu? Kā redzat, HTTP kopējā veiktspēja ir nedaudz zemāka nekā TCP. Pat ja izmantojat HTTP ar TCP, mēs konfigurējām iperf3 TCP etalonā, lai izvairÄ«tos no lēnas palaiÅ”anas, kas ietekmētu HTTP etalonu. Å eit visi labi pastrādāja. Kube marÅ”rutētājam ir nepārprotamas priekÅ”rocÄ«bas, taču WeaveNet nedarbojās labi: aptuveni par 20% sliktāk nekā tukÅ”am metālam. Cilium un WeaveNet ar Å”ifrÄ“Å”anu izskatās patieŔām skumji.

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

Izmantojot FTP, citu uz TCP balstÄ«tu protokolu, rezultāti atŔķiras. Flanelis un Kube-router paveic Å”o darbu, bet Calico, Canal un Cilium nedaudz atpaliek un ir aptuveni 10% lēnāki nekā tukÅ”s metāls. WeaveNet atpaliek pat par 17%, bet Å”ifrētais WeaveNet apsteidz Å”ifrēto Cilium par 40%.

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

Izmantojot SCP, mēs uzreiz varam redzēt, cik SSH Å”ifrÄ“Å”ana mums maksā. GandrÄ«z visiem CNI klājas labi, taču WeaveNet atkal atpaliek. Paredzams, ka Cilium un WeaveNet ar Å”ifrÄ“Å”anu ir vissliktākie dubultās Å”ifrÄ“Å”anas (SSH + CNI) dēļ.

Šeit ir kopsavilkuma tabula ar rezultātiem:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

Resursu patēriņŔ

Tagad salÄ«dzināsim, kā CNI patērē resursus pie lielas slodzes (TCP pārsÅ«tÄ«Å”anas laikā, 10 Gbps). Veiktspējas testos mēs salÄ«dzinām CNI ar tukÅ”u metālu (zaļa lÄ«nija). Resursu patēriņam parādÄ«sim tÄ«ru Kubernetes (violeta lÄ«nija) bez CNI un paskatÄ«simies, cik papildu resursus patērē CNI.

Sāksim ar atmiņu. Å eit ir norādÄ«ta mezglu RAM vidējā vērtÄ«ba (izņemot buferus un keÅ”atmiņu) MB pārsÅ«tÄ«Å”anas laikā.

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
Atmiņas patēriņŔ

Flanelis un Kube-router uzrādīja lieliskus rezultātus - tikai 50 MB. Calico un Canal katram ir 70. WeaveNet nepārprotami patērē vairāk nekā citi - 130 MB, un Cilium izmanto pat 400.
Tagad pārbaudÄ«sim CPU laika patēriņu. IevērÄ«bas cienÄ«gs: diagrammā parādÄ«ti nevis procenti, bet ppm, tas ir, 38 ppm ā€œbez dzelzsā€ ir 3,8%. LÅ«k, rezultāti:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
CPU patēriņŔ

Calico, Canal, Flannel un Kube-router ir ļoti efektīvas CPU - tikai par 2% vairāk nekā Kubernetes bez CNI. WeaveNet ievērojami atpaliek ar papildu 5%, kam seko Cilium ar 7%.

Šeit ir resursu patēriņa kopsavilkums:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)

Rezultāti

Tabula ar visiem rezultātiem:

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
Vispārīgie etalona rezultāti

Secinājums

Pēdējā daļā izteikÅ”u savu subjektÄ«vo viedokli par rezultātiem. Atcerieties, ka Å”is etalons pārbauda tikai viena savienojuma caurlaidspēju ļoti mazā klasterÄ« (3 mezgli). Tas neattiecas uz lielām kopām (<50 mezgliem) vai paralēliem savienojumiem.

Atkarībā no scenārija es iesaku izmantot Ŕādus CNI:

  • Vai jums ir jÅ«su klasterÄ« mezgli ar maz resursiem (vairāki GB RAM, vairāki kodoli), un jums nav nepiecieÅ”ami droŔības lÄ«dzekļi - izvēlieties Flaneļa. Å is ir viens no visrentablākajiem CNI. Un tas ir savietojams ar visdažādākajām arhitektÅ«rām (amd64, arm, arm64 utt.). Turklāt Å”is ir viens no diviem (otrs ir Cilium) CNI, kas var automātiski noteikt MTU, tāpēc jums nekas nav jākonfigurē. Ir piemērots arÄ« Kube marÅ”rutētājs, taču tas nav standarta, un jums bÅ«s manuāli jākonfigurē MTU.
  • Ja nepiecieÅ”ams Å”ifrēt tÄ«klu droŔības labad ņem WeaveNet. Neaizmirstiet norādÄ«t MTU lielumu, ja izmantojat lielos rāmjus, un iespējojiet Å”ifrÄ“Å”anu, norādot paroli, izmantojot vides mainÄ«go. Bet labāk aizmirst par veiktspēju ā€” tās ir Å”ifrÄ“Å”anas izmaksas.
  • Par normāla lietoÅ”ana padomu Calico. Å is CNI tiek plaÅ”i izmantots dažādos Kubernetes izvietoÅ”anas rÄ«kos (Kops, Kubespray, Rancher utt.). Tāpat kā ar WeaveNet, noteikti konfigurējiet MTU programmā ConfigMap, ja izmantojat lielos rāmjus. Tas ir daudzfunkcionāls rÄ«ks, kas ir efektÄ«vs resursu patēriņa, veiktspējas un droŔības ziņā.

Un visbeidzot iesaku sekot lÄ«dzi attÄ«stÄ«bai ciliums. Å im CNI ir ļoti aktÄ«va komanda, kas daudz strādā pie sava produkta (funkcijas, resursu taupÄ«Å”ana, veiktspēja, droŔība, klasteru veidoÅ”ana...), un viņiem ir ļoti interesanti plāni.

Kubernetes tÄ«kla spraudņa (CNI) etalona rezultāti virs 10 Gb/s tÄ«kla (atjaunināts: 2019. gada aprÄ«lis)
Vizuāla diagramma CNI izvēlei

Avots: www.habr.com

Pievieno komentāru