Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
Hau da nire eguneraketa aurreko erreferentzia, orain Kubernetes 1.14-n exekutatzen dena CNI azken bertsioarekin 2019ko apiriletik aurrera.

Lehenik eta behin, Cilium taldeari eskerrak eman nahi dizkiot: mutilek metrics monitoring script-ak egiaztatzen eta zuzentzen lagundu didate.

2018ko azarotik zer aldatu den

Hona hemen orduz geroztik zer aldatu den (interesa baduzu):

Flannel CNI interfaze azkarrena eta errazena izaten jarraitzen du, baina oraindik ez ditu sare-politikak eta enkriptatzea onartzen.

Romana jada ez da onartzen, beraz, erreferentetik kendu dugu.

WeaveNet-ek sare-politikak onartzen ditu Sarrera eta Irteerarako! Baina produktibitatea jaitsi egin da.

Calicon, oraindik ere eskuz konfiguratu behar duzu paketeen gehienezko tamaina (MTU) errendimendu onena lortzeko. Calicok bi aukera eskaintzen ditu CNI instalatzeko, beraz, aparteko ETCD biltegirik gabe egin dezakezu:

  • Kubernetes APIan egoera biltegiratzea datu biltegi gisa (kluster tamaina < 50 nodo);
  • Kubernetes APIan biltegiratzea egoera Typha proxy batekin datu biltegi gisa, K8S APIaren karga arintzeko (kluster tamaina > 50 nodo).

Calicok laguntza iragarri zuen aplikazio-mailako politikak Istioren gainean aplikazio-mailako segurtasunerako.

Cilium-ek orain enkriptatzea onartzen du! Cilium-ek IPSec tunelekin enkriptatzea eskaintzen du eta enkriptatutako WeaveNet sarearen alternatiba eskaintzen du. Baina WeaveNet Cilium baino azkarragoa da enkriptatzea gaituta.

Cilium orain errazagoa da inplementatzen integratutako ETCD operadoreari esker.

Cilium taldea bere CNItik pisu pixka bat kentzen saiatu da memoria-kontsumoa eta CPU-kostuak murriztuz, baina bere lehiakideak arinagoak dira oraindik.

Erreferentziazko testuingurua

Erreferentzia birtualizatu gabeko hiru Supermicro zerbitzarietan exekutatzen da 10 Gb Supermicro switch batekin. Zerbitzariak switch-era zuzenean konektatuta daude DAC SFP+ kable pasiboen bidez eta VLAN berean konfiguratuta daude jumbo frameekin (MTU 9000).

Kubernetes 1.14.0 Ubuntu 18.04 LTS-n instalatuta dago Docker 18.09.2-rekin (argitalpen honetako Docker bertsio lehenetsia).

Erreproduzigarritasuna hobetzeko, maisua lehen nodoan beti konfiguratzea erabaki dugu, erreferentziako zerbitzariaren zatia bigarren zerbitzarian eta bezeroaren zatia hirugarrenean jartzea. Horretarako, NodeSelector erabiltzen dugu Kubernetes inplementazioetan.

Erreferentziako emaitzak eskala honetan deskribatuko ditugu:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

Benchmark baterako CNI bat hautatzea

Ataleko zerrendako CNIrako soilik erreferentzia bat da kubeadm-ekin kluster nagusi bat sortzeari buruz Ikusi Kubernetesen dokumentazio ofiziala. 9 CNIetatik 6 bakarrik hartuko ditugu: dokumentazioaren arabera instalatzen zailak diren edo/eta konfiguraziorik gabe funtzionatzen ez dutenak baztertuko ditugu (Romana, Contiv-VPP eta JuniperContrail/TungstenFabric).

Honako CNI hauek alderatuko ditugu:

  • Calico v3.6
  • Canal v3.6 (funtsean Flannel sareak egiteko + Calico suebaki gisa)
  • Zilioa 1.4.2
  • Flanela 0.11.0
  • Kube-router 0.2.5
  • WeaveNet 2.5.1

Instalazio-

Zenbat eta errazago CNI instalatu, orduan eta hobea izango da gure lehenengo inpresioa. Erreferentziako CNI guztiak oso errazak instalatzen dira (komando bat edo birekin).

Esan bezala, zerbitzariak eta switch-a jumbo frames gaituta daude (MTU 9000-n ezarri dugu). Pozik egongo ginateke CNIk MTU automatikoki zehaztuko balu egokitzaileen konfigurazioaren arabera. Hala ere, Cilium eta Flannel-ek bakarrik kudeatu zuten hori. Gainontzeko CNIek GitHub-en eskaerak dituzte MTU aurkikuntza automatikoa gehitzeko, baina eskuz konfiguratuko dugu Calico, Canal eta Kube-router-erako ConfigMap aldatuz edo WeaveNet-erako ingurune-aldagai bat pasatuz.

Zein da MTU okerren arazoa? Diagrama honek WeaveNet-en arteko aldea erakusten du lehenetsitako MTU eta jumbo frames gaituta:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
Nola eragiten du MTU-k errendimenduan?

MTU errendimendurako zein garrantzitsua den ikusi dugu, orain ikus dezagun nola gure CNIek automatikoki zehazten duten:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
CNIk automatikoki detektatzen du MTU

Grafikoak erakusten du Calico, Canal, Kube-router eta WeaveNet-en MTU konfiguratu behar duzula errendimendu optimorako. Cilium eta Flannel MTU beraiek behar bezala zehaztu ahal izan zuten inolako ezarpenik gabe.

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

CNIren segurtasuna bi alderditan alderatuko dugu: transmititutako datuak enkriptatzeko gaitasuna eta Kubernetes sareko politiken ezarpena (benetako probetan oinarrituta, ez dokumentazioan).

Bi CNIk soilik zifratzen dituzte datuak: Cilium eta WeaveNet. Enkriptatzea WeaveNet gaituta enkriptatzea pasahitza CNI ingurune-aldagai gisa ezarriz. IN dokumentazioa WeaveNetek modu konplikatuan deskribatzen du, baina dena besterik gabe egiten da. Enkriptatzea Zilioa komandoen bidez konfiguratuta, Kubernetes sekretuak sortuz eta daemonSet-en aldaketaren bidez (WeaveNet-en baino apur bat konplikatuagoa, baina Cilium-ek urratsez urrats ditu argibideak).

Sare politika ezartzeari dagokionez, lortu dute Calico, Canal, Cilium eta WeaveNet, zeinetan Sarrera eta Irteera arauak konfigura ditzakezu. Izan ere Kube-bideratzailea Ingress-erako bakarrik daude arauak, eta flannel Ez dago sareko politikarik.

Hona hemen emaitza orokorrak:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
Segurtasun Errendimendu Erreferentziazko Emaitzak

produktibitatea

Erreferentzia honek proba bakoitzaren gutxienez hiru exekuziotan batez besteko errendimendua erakusten du. TCP eta UDPren errendimendua (iperf3 erabiliz), HTTP (Nginx eta curl-ekin) edo FTP (vsftpd eta curl-ekin) bezalako aplikazio errealak probatzen ditugu eta azkenik aplikazioen errendimendua SCPn oinarritutako enkriptatzea erabiliz (OpenSSH bezero eta zerbitzaria erabiliz).

Proba guztietarako, metal hutsezko erreferentzia bat egin genuen (lerro berdea) CNIren errendimendua sarearen jatorrizko errendimenduarekin alderatzeko. Hemen eskala bera erabiltzen dugu, baina kolorez:

  • Horia = oso ona
  • Laranja = ona
  • Urdina = horrela
  • Gorria = txarra

Ez ditugu gaizki konfiguratutako CNIak hartuko eta MTU zuzena duten CNIen emaitzak soilik erakutsiko ditugu. (Oharra: Cilium-ek ez du MTU behar bezala kalkulatzen enkriptatzea gaitzen baduzu, beraz, eskuz MTU 8900ra murriztu beharko duzu 1.4 bertsioan. Hurrengo bertsioak, 1.5, automatikoki egiten du hori.)

Hona hemen emaitzak:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
TCP Errendimendua

CNI guztiak ondo aritu ziren TCP erreferentean. Enkriptatzea duen CNI oso atzean geratzen da enkriptatzea garestia delako.

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
UDP errendimendua

Hemen ere CNI guztiak ondo ari dira. Enkriptatutako CNIk ia emaitza bera erakutsi zuen. Cilium apur bat atzean dago lehiatik, baina bare metalaren %2,3 baino ez da, beraz, ez da emaitza txarra. Ez ahaztu Cilium-ek eta Flannel-ek soilik MTU beraiek zehazten dutela zuzen, eta hauek dira haien emaitzak inolako konfigurazio gehigarririk gabe.

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

Zer gertatzen da benetako aplikazio batekin? Ikus dezakezunez, HTTP-ren errendimendu orokorra TCP-ren aldean apur bat txikiagoa da. HTTP TCPrekin erabiltzen baduzu ere, iperf3 konfiguratu dugu TCP erreferentean, HTTP erreferenteari eragingo liokeen hasiera motel bat saihesteko. Hemen denek lan ona egin zuten. Kube-router-ek abantaila argia du, baina WeaveNet-ek ez zuen ondo aritu: bare metala baino %20 okerragoa. Cilium eta WeaveNet enkriptatzearekin oso tristeak dirudite.

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

FTPrekin, TCPn oinarritutako beste protokolo batekin, emaitzak aldatu egiten dira. Flannel eta Kube-router-ek egiten dute lana, baina Calico, Canal eta Cilium pixka bat atzeratuta daude eta bare metalak baino %10 inguru motelagoak dira. WeaveNet % 17 atzean dago, baina enkriptatutako WeaveNet enkriptatutako Cilium-en % 40 baino gehiago dago.

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

SCPrekin berehala ikus dezakegu zenbat kostatzen zaigun SSH enkriptatzea. Ia CNI guztiak ondo ari dira, baina WeaveNet atzeratuta dago berriro. Enkriptatzea duten Cilium eta WeaveNet espero dira okerrenak zifratze bikoitzaren ondorioz (SSH + CNI).

Hona hemen emaitzen laburpen-taula bat:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

Baliabideen kontsumoa

Orain konparatu dezagun CNIk nola kontsumitzen dituen baliabideak karga astunetan (TCP transferentzian, 10 Gbps). Errendimendu probetan CNI metal hutsarekin alderatzen dugu (lerro berdea). Baliabideen kontsumorako, erakutsi ditzagun Kubernetes purua (lerro morea) CNIrik gabe eta ikus ditzagun CNIk zenbat baliabide gehigarri kontsumitzen dituen.

Has gaitezen memoriarekin. Hona hemen nodoen RAMaren batez besteko balioa (buffer-ak eta cachea izan ezik) MB-ko transferentzian.

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
Memoria-kontsumoa

Flannel eta Kube-router-ek emaitza bikainak erakutsi zituzten - 50 MB bakarrik. Calicok eta Canalek 70 dituzte. WeaveNetek argi eta garbi besteek baino gehiago kontsumitzen dute: 130 MB, eta Cilium-ek 400 erabiltzen ditu.
Orain ikus dezagun CPU denbora-kontsumoa. Aipagarria: diagraman portzentajeak ez, ppm-a baizik, hau da, 38 ppm "burdina biluzik" %3,8 da. Hona hemen emaitzak:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
CPU kontsumoa

Calico, Canal, Flannel eta Kube-router oso PUZ eraginkorrak dira - CNIrik gabeko Kubernetes baino %2 gehiago besterik ez. WeaveNet oso atzean geratu da %5 gehigarri batekin, eta ondoren Cilium %7rekin.

Hona hemen baliabideen kontsumoaren laburpena:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)

Emaitzak

Emaitza guztiekin taula:

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
Erreferentziazko emaitza orokorrak

Ondorioa

Azken zatian emaitzei buruzko nire iritzi subjektiboa adieraziko dut. Gogoratu erreferentzia honek konexio bakar baten errendimendua soilik probatzen duela kluster oso txiki batean (3 nodo). Ez da kluster handietan (<50 nodo) edo konexio paraleloetan aplikatzen.

Hurrengo CNIak erabiltzea gomendatzen dut eszenatokiaren arabera:

  • Zure multzoan daukazu baliabide gutxi dituzten nodoak (hainbat GB RAM, hainbat nukleo) eta ez duzu segurtasun-eginbiderik behar - aukeratu flannel. Hau da CNI errentagarrienetako bat. Eta hainbat arkitekturarekin bateragarria da (amd64, arm, arm64, etab.). Horrez gain, MTU automatikoki zehaztu dezakeen bi CNI (bestea Cilium da) bat da, beraz, ez duzu ezer konfiguratu beharrik. Kube-router ere egokia da, baina ez da estandarra eta MTU eskuz konfiguratu beharko duzu.
  • Beharrezkoa izanez gero sarea enkriptatu segurtasunagatik, hartu WeaveNet. Ez ahaztu MTU tamaina zehaztea, jumbo frames erabiltzen ari bazara, eta enkriptatzea gaitu pasahitz bat zehaztuz ingurune-aldagai baten bidez. Baina hobe da errendimenduaz ahaztea - hori da enkriptatzearen kostua.
  • For erabilera normala aholkatzen dut Calico. CNI hau asko erabiltzen da Kubernetes inplementazio tresnetan (Kops, Kubespray, Rancher, etab.). WeaveNet-ekin gertatzen den bezala, ziurtatu MTU konfiguratzen duzula ConfigMap-en, markoak jumbo erabiltzen badituzu. Baliabideen kontsumoari, errendimenduari eta segurtasunari dagokionez eraginkorra den funtzio anitzeko tresna da.

Eta azkenik, garapena jarraitzea gomendatzen dizut Zilioa. CNI honek bere produktuan asko lantzen duen talde oso aktiboa du (ezaugarriak, baliabideen aurrezpena, errendimendua, segurtasuna, clustering...) eta oso plan interesgarriak dituzte.

Kubernetes Network Plugin (CNI) Erreferentziazko emaitzak 10 Gbps saretik gorakoak (Eguneratua: 2019ko apirila)
CNI hautapenerako diagrama bisuala

Iturria: www.habr.com

Gehitu iruzkin berria