Hau da nire eguneraketa
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
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:
Benchmark baterako CNI bat hautatzea
Ataleko zerrendako CNIrako soilik erreferentzia bat da
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:
Nola eragiten du MTU-k errendimenduan?
MTU errendimendurako zein garrantzitsua den ikusi dugu, orain ikus dezagun nola gure CNIek automatikoki zehazten duten:
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
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:
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:
CNI guztiak ondo aritu ziren TCP erreferentean. Enkriptatzea duen CNI oso atzean geratzen da enkriptatzea garestia delako.
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.
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.
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.
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:
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.
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:
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:
Emaitzak
Emaitza guztiekin taula:
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.
CNI hautapenerako diagrama bisuala
Iturria: www.habr.com