ఇది నా నవీకరణ
అన్నింటిలో మొదటిది, నేను Cilium బృందానికి ధన్యవాదాలు చెప్పాలనుకుంటున్నాను: కొలమానాల పర్యవేక్షణ స్క్రిప్ట్లను తనిఖీ చేయడం మరియు సరిదిద్దడంలో అబ్బాయిలు నాకు సహాయం చేసారు.
నవంబర్ 2018 నుండి ఏమి మారింది
అప్పటి నుండి మార్చబడినవి ఇక్కడ ఉన్నాయి (మీకు ఆసక్తి ఉంటే):
Flannel అత్యంత వేగవంతమైన మరియు సరళమైన CNI ఇంటర్ఫేస్గా మిగిలిపోయింది, కానీ ఇప్పటికీ నెట్వర్క్ విధానాలు మరియు గుప్తీకరణకు మద్దతు ఇవ్వదు.
రొమానాకు మద్దతు లేదు, కాబట్టి మేము దానిని బెంచ్మార్క్ నుండి తీసివేసాము.
WeaveNet ఇప్పుడు ప్రవేశం మరియు ఎగ్రెస్ కోసం నెట్వర్క్ విధానాలకు మద్దతు ఇస్తుంది! కానీ ఉత్పాదకత తగ్గింది.
కాలికోలో, ఉత్తమ పనితీరు కోసం మీరు ఇప్పటికీ గరిష్ట ప్యాకెట్ పరిమాణాన్ని (MTU) మాన్యువల్గా కాన్ఫిగర్ చేయాలి. CNIని ఇన్స్టాల్ చేయడానికి కాలికో రెండు ఎంపికలను అందిస్తుంది, కాబట్టి మీరు ప్రత్యేక ETCD రిపోజిటరీ లేకుండా చేయవచ్చు:
- Kubernetes APIలో స్థితిని డేటా స్టోర్గా నిల్వ చేయడం (క్లస్టర్ పరిమాణం <50 నోడ్లు);
- K8S API (క్లస్టర్ పరిమాణం > 50 నోడ్లు)పై లోడ్ను తగ్గించడానికి టైఫా ప్రాక్సీతో డేటా స్టోర్గా Kubernetes APIలో స్థితిని నిల్వ చేస్తోంది.
కాలికో మద్దతు ప్రకటించింది
Cilium ఇప్పుడు గుప్తీకరణకు మద్దతు ఇస్తుంది! Cilium IPSec టన్నెల్స్తో గుప్తీకరణను అందిస్తుంది మరియు గుప్తీకరించిన WeaveNet నెట్వర్క్కు ప్రత్యామ్నాయాన్ని అందిస్తుంది. కానీ వీవ్నెట్ ఎన్క్రిప్షన్ ప్రారంభించబడిన Cilium కంటే వేగవంతమైనది.
అంతర్నిర్మిత ETCD ఆపరేటర్కి ధన్యవాదాలు Cilium ఇప్పుడు సులభంగా అమర్చబడింది.
Cilium బృందం మెమరీ వినియోగం మరియు CPU ఖర్చులను తగ్గించడం ద్వారా దాని CNI నుండి కొంత బరువును తగ్గించడానికి ప్రయత్నించింది, అయితే దాని పోటీదారులు ఇప్పటికీ తేలికగా ఉన్నారు.
బెంచ్మార్క్ సందర్భం
బెంచ్మార్క్ 10 Gb సూపర్మైక్రో స్విచ్తో వర్చువలైజ్ చేయని మూడు సూపర్మైక్రో సర్వర్లపై అమలు చేయబడుతుంది. సర్వర్లు నిష్క్రియ DAC SFP+ కేబుల్ల ద్వారా నేరుగా స్విచ్కి కనెక్ట్ చేయబడ్డాయి మరియు జంబో ఫ్రేమ్లతో (MTU 9000) అదే VLANలో కాన్ఫిగర్ చేయబడతాయి.
డాకర్ 1.14.0తో ఉబుంటు 18.04 LTSలో Kubernetes 18.09.2 ఇన్స్టాల్ చేయబడింది (ఈ విడుదలలో డిఫాల్ట్ డాకర్ వెర్షన్).
పునరుత్పత్తి సామర్థ్యాన్ని మెరుగుపరచడానికి, మేము ఎల్లప్పుడూ మొదటి నోడ్లో మాస్టర్ను కాన్ఫిగర్ చేయాలని నిర్ణయించుకున్నాము, బెంచ్మార్క్ యొక్క సర్వర్ భాగాన్ని రెండవ సర్వర్లో మరియు క్లయింట్ భాగాన్ని మూడవదానిలో ఉంచాము. దీన్ని చేయడానికి, మేము Kubernetes విస్తరణలలో NodeSelectorని ఉపయోగిస్తాము.
మేము బెంచ్మార్క్ ఫలితాలను క్రింది స్కేల్లో వివరిస్తాము:
బెంచ్మార్క్ కోసం CNIని ఎంచుకోవడం
ఇది విభాగంలోని జాబితా నుండి CNIకి మాత్రమే బెంచ్మార్క్
మేము క్రింది CNIలను పోల్చి చూస్తాము:
- కాలికో v3.6
- కెనాల్ v3.6 (ముఖ్యంగా నెట్వర్కింగ్ కోసం ఫ్లాన్నెల్ + ఫైర్వాల్గా కాలికో)
- సిలియం 1.4.2
- ఫ్లాన్నెల్ 0.11.0
- కుబే-రూటర్ 0.2.5
- WeaveNet 2.5.1
సెట్టింగ్
CNIని ఇన్స్టాల్ చేయడం ఎంత సులభమో, మన మొదటి అభిప్రాయం అంత మెరుగ్గా ఉంటుంది. బెంచ్మార్క్ నుండి అన్ని CNIలు ఇన్స్టాల్ చేయడం చాలా సులభం (ఒకటి లేదా రెండు ఆదేశాలతో).
మేము చెప్పినట్లుగా, సర్వర్లు మరియు స్విచ్ జంబో ఫ్రేమ్లతో కాన్ఫిగర్ చేయబడ్డాయి (మేము MTUని 9000కి సెట్ చేసాము). అడాప్టర్ల కాన్ఫిగరేషన్ ఆధారంగా CNI స్వయంచాలకంగా MTUని నిర్ణయిస్తే మేము సంతోషిస్తాము. అయితే, Cilium మరియు Flannel మాత్రమే దీనిని నిర్వహించేవారు. మిగిలిన CNIలు GitHubలో ఆటోమేటిక్ MTU డిస్కవరీని జోడించమని అభ్యర్థనలను కలిగి ఉన్నాయి, అయితే మేము దానిని Calico, Canal మరియు Kube-router కోసం కాన్ఫిగ్మ్యాప్ని మార్చడం ద్వారా లేదా WeaveNet కోసం ఎన్విరాన్మెంట్ వేరియబుల్ను పాస్ చేయడం ద్వారా మాన్యువల్గా కాన్ఫిగర్ చేస్తాము.
సరికాని MTUతో సమస్య ఏమిటి? ఈ రేఖాచిత్రం డిఫాల్ట్ MTU మరియు జంబో ఫ్రేమ్లు ప్రారంభించబడిన WeaveNet మధ్య వ్యత్యాసాన్ని చూపుతుంది:
MTU నిర్గమాంశను ఎలా ప్రభావితం చేస్తుంది?
పనితీరు కోసం MTU ఎంత ముఖ్యమైనదో మేము చూశాము, ఇప్పుడు మన CNIలు దానిని స్వయంచాలకంగా ఎలా నిర్ధారిస్తాయో చూద్దాం:
CNI స్వయంచాలకంగా MTUని గుర్తిస్తుంది
సరైన పనితీరు కోసం మీరు కాలికో, కెనాల్, క్యూబ్-రూటర్ మరియు వీవ్నెట్ కోసం MTUని కాన్ఫిగర్ చేయాలని గ్రాఫ్ చూపిస్తుంది. Cilium మరియు Flannel ఎలాంటి సెట్టింగ్లు లేకుండా MTUని సరిగ్గా గుర్తించగలిగారు.
భద్రత
మేము CNI భద్రతను రెండు అంశాలలో పోలుస్తాము: ప్రసారం చేయబడిన డేటాను గుప్తీకరించే సామర్థ్యం మరియు కుబెర్నెట్స్ నెట్వర్క్ విధానాల అమలు (వాస్తవ పరీక్షల ఆధారంగా, డాక్యుమెంటేషన్ కాదు).
రెండు CNIలు మాత్రమే డేటాను గుప్తీకరిస్తాయి: Cilium మరియు WeaveNet. ఎన్క్రిప్షన్ WeaveNet ఎన్క్రిప్షన్ పాస్వర్డ్ను CNI ఎన్విరాన్మెంట్ వేరియబుల్గా సెట్ చేయడం ద్వారా ప్రారంభించబడింది. IN
నెట్వర్క్ విధానం అమలు విషయానికొస్తే, వారు విజయం సాధించారు కాలికో, కెనాల్, సిలియం మరియు వీవ్ నెట్, దీనిలో మీరు ఇన్గ్రెస్ మరియు ఎగ్రెస్ నియమాలను కాన్ఫిగర్ చేయవచ్చు. కోసం కుబే-రౌటర్ ప్రవేశానికి మాత్రమే నియమాలు ఉన్నాయి మరియు ఒక దినుసు సన్నకంబళి నెట్వర్క్ విధానాలు అస్సలు లేవు.
మొత్తం ఫలితాలు ఇక్కడ ఉన్నాయి:
భద్రతా పనితీరు బెంచ్మార్క్ ఫలితాలు
ఉత్పాదకత
ఈ బెంచ్మార్క్ ప్రతి పరీక్షలో కనీసం మూడు పరుగుల కంటే సగటు నిర్గమాంశను చూపుతుంది. మేము TCP మరియు UDP (iperf3ని ఉపయోగించడం), HTTP (Nginx మరియు కర్ల్తో) లేదా FTP (vsftpd మరియు కర్ల్తో) వంటి నిజమైన అప్లికేషన్ల పనితీరును మరియు చివరకు SCP-ఆధారిత ఎన్క్రిప్షన్ (క్లయింట్ మరియు సర్వర్ OpenSSH ఉపయోగించి) ఉపయోగించి అప్లికేషన్ పనితీరును పరీక్షిస్తాము.
అన్ని పరీక్షల కోసం, స్థానిక నెట్వర్క్ పనితీరుతో CNI పనితీరును పోల్చడానికి మేము బేర్ మెటల్ బెంచ్మార్క్ (గ్రీన్ లైన్)ని ప్రదర్శించాము. ఇక్కడ మేము అదే స్థాయిని ఉపయోగిస్తాము, కానీ రంగులో:
- పసుపు = చాలా మంచిది
- నారింజ = మంచిది
- బ్లూ = కాబట్టి
- ఎరుపు = చెడ్డ
మేము తప్పుగా కాన్ఫిగర్ చేయబడిన CNIలను తీసుకోము మరియు సరైన MTUతో CNIల కోసం మాత్రమే ఫలితాలను చూపుతాము. (గమనిక: మీరు ఎన్క్రిప్షన్ని ఎనేబుల్ చేస్తే Cilium సరిగ్గా MTUని గణించదు, కాబట్టి మీరు వెర్షన్ 8900లో MTUని 1.4కి మాన్యువల్గా తగ్గించాలి. తదుపరి వెర్షన్, 1.5, దీన్ని స్వయంచాలకంగా చేస్తుంది.)
ఫలితాలు ఇక్కడ ఉన్నాయి:
అన్ని CNIలు TCP బెంచ్మార్క్లో బాగా పనిచేశాయి. ఎన్క్రిప్షన్తో CNI చాలా వెనుకబడి ఉంది ఎందుకంటే ఎన్క్రిప్షన్ ఖరీదైనది.
ఇక్కడ కూడా, అన్ని CNIలు బాగా పనిచేస్తున్నాయి. ఎన్క్రిప్షన్తో CNI దాదాపు అదే ఫలితాన్ని చూపించింది. సిలియం పోటీలో కొంచెం వెనుకబడి ఉంది, కానీ ఇది బేర్ మెటల్లో 2,3% మాత్రమే, కాబట్టి ఇది చెడు ఫలితం కాదు. Cilium మరియు Flannel మాత్రమే MTUని సరిగ్గా నిర్ణయించుకున్నారని మర్చిపోవద్దు మరియు ఇవి ఎటువంటి అదనపు కాన్ఫిగరేషన్ లేకుండా వాటి ఫలితాలు.
నిజమైన అప్లికేషన్ గురించి ఏమిటి? మీరు చూడగలిగినట్లుగా, HTTP యొక్క మొత్తం పనితీరు TCP కంటే కొంచెం తక్కువగా ఉంది. మీరు TCPతో HTTPని ఉపయోగించినప్పటికీ, HTTP బెంచ్మార్క్ను ప్రభావితం చేసే నెమ్మదిగా ప్రారంభాన్ని నివారించడానికి మేము TCP బెంచ్మార్క్లో iperf3ని కాన్ఫిగర్ చేసాము. ఇక్కడ అందరూ మంచి పని చేశారు. Kube-router స్పష్టమైన ప్రయోజనాన్ని కలిగి ఉంది, కానీ WeaveNet బాగా పని చేయలేదు: బేర్ మెటల్ కంటే 20% అధ్వాన్నంగా ఉంది. గుప్తీకరణతో Cilium మరియు WeaveNet నిజంగా విచారంగా ఉన్నాయి.
FTPతో, మరొక TCP-ఆధారిత ప్రోటోకాల్, ఫలితాలు మారుతూ ఉంటాయి. Flannel మరియు Kube-router పని చేస్తాయి, కానీ కాలికో, కెనాల్ మరియు Cilium కొంచెం వెనుకబడి ఉన్నాయి మరియు బేర్ మెటల్ కంటే 10% నెమ్మదిగా ఉంటాయి. WeaveNet 17% వెనుకబడి ఉంది, అయితే గుప్తీకరించిన WeaveNet గుప్తీకరించిన Cilium కంటే 40% ముందుంది.
SCPతో SSH ఎన్క్రిప్షన్కు ఎంత ఖర్చవుతుందో మనం వెంటనే చూడవచ్చు. దాదాపు అన్ని CNIలు బాగా పనిచేస్తున్నాయి, కానీ WeaveNet మళ్లీ వెనుకబడి ఉంది. డబుల్ ఎన్క్రిప్షన్ (SSH + CNI) కారణంగా ఎన్క్రిప్షన్తో కూడిన సిలియం మరియు వీవ్నెట్ చెత్తగా ఉండవచ్చు.
ఫలితాలతో కూడిన సారాంశ పట్టిక ఇక్కడ ఉంది:
వనరుల వినియోగం
ఇప్పుడు CNI అధిక భారం (TCP బదిలీ సమయంలో, 10 Gbps) కింద వనరులను ఎలా వినియోగిస్తుందో పోల్చి చూద్దాం. పనితీరు పరీక్షలలో మేము CNIని బేర్ మెటల్ (గ్రీన్ లైన్)తో పోల్చాము. వనరుల వినియోగం కోసం, CNI లేకుండా స్వచ్ఛమైన కుబెర్నెట్లను (పర్పుల్ లైన్) చూపిద్దాం మరియు CNI ఎన్ని అదనపు వనరులను వినియోగిస్తుందో చూద్దాం.
జ్ఞాపకశక్తితో ప్రారంభిద్దాం. బదిలీ సమయంలో MBలో నోడ్ల RAM (బఫర్లు మరియు కాష్ మినహా) సగటు విలువ ఇక్కడ ఉంది.
Flannel మరియు Kube-router అద్భుతమైన ఫలితాలను చూపించాయి - కేవలం 50 MB మాత్రమే. కాలికో మరియు కెనాల్లు ఒక్కొక్కటి 70ని కలిగి ఉన్నాయి. వీవ్నెట్ స్పష్టంగా మిగతా వాటి కంటే ఎక్కువగా వినియోగిస్తుంది - 130 MB, మరియు Cilium 400 వరకు ఉపయోగిస్తుంది.
ఇప్పుడు CPU సమయ వినియోగాన్ని తనిఖీ చేద్దాం. గమనించదగినది: రేఖాచిత్రం శాతాలను చూపదు, కానీ ppm, అంటే "బేర్ ఐరన్" కోసం 38 ppm 3,8%. ఫలితాలు ఇక్కడ ఉన్నాయి:
కాలికో, కెనాల్, ఫ్లాన్నెల్ మరియు కుబే-రౌటర్ చాలా CPU సమర్థవంతమైనవి - CNI లేని కుబెర్నెట్స్ కంటే 2% మాత్రమే ఎక్కువ. WeaveNet అదనపు 5%తో చాలా వెనుకబడి ఉంది, తర్వాత Cilium 7% వద్ద ఉంది.
వనరుల వినియోగం యొక్క సారాంశం ఇక్కడ ఉంది:
ఫలితాలు
అన్ని ఫలితాలతో పట్టిక:
తీర్మానం
చివరి భాగంలో ఫలితాలపై నా ఆత్మాశ్రయ అభిప్రాయాన్ని తెలియజేస్తాను. ఈ బెంచ్మార్క్ చాలా చిన్న క్లస్టర్లో (3 నోడ్లు) ఒకే కనెక్షన్ యొక్క నిర్గమాంశను మాత్రమే పరీక్షిస్తుందని గుర్తుంచుకోండి. ఇది పెద్ద క్లస్టర్లకు (<50 నోడ్లు) లేదా సమాంతర కనెక్షన్లకు వర్తించదు.
దృష్టాంతాన్ని బట్టి కింది CNIలను ఉపయోగించమని నేను సిఫార్సు చేస్తున్నాను:
- మీరు మీ క్లస్టర్లో ఉన్నారా కొన్ని వనరులతో నోడ్లు (అనేక GB RAM, అనేక కోర్లు) మరియు మీకు భద్రతా లక్షణాలు అవసరం లేదు - ఎంచుకోండి ఒక దినుసు సన్నకంబళి. ఇది అత్యంత ఖర్చుతో కూడుకున్న CNIలలో ఒకటి. మరియు ఇది అనేక రకాల ఆర్కిటెక్చర్లకు (amd64, arm, arm64, మొదలైనవి) అనుకూలంగా ఉంటుంది. అదనంగా, ఇది MTUని స్వయంచాలకంగా నిర్ణయించగల రెండు (మరొకటి Cilium) CNIలో ఒకటి, కాబట్టి మీరు దేనినీ కాన్ఫిగర్ చేయవలసిన అవసరం లేదు. Kube-router కూడా అనుకూలంగా ఉంటుంది, కానీ ఇది ప్రామాణికం కాదు మరియు మీరు MTUని మాన్యువల్గా కాన్ఫిగర్ చేయాలి.
- అవసరమైతే నెట్వర్క్ను గుప్తీకరించండి భద్రత కోసం, తీసుకోండి WeaveNet. మీరు జంబో ఫ్రేమ్లను ఉపయోగిస్తుంటే MTU పరిమాణాన్ని పేర్కొనడం మర్చిపోవద్దు మరియు ఎన్విరాన్మెంట్ వేరియబుల్ ద్వారా పాస్వర్డ్ను పేర్కొనడం ద్వారా ఎన్క్రిప్షన్ను ప్రారంభించండి. కానీ పనితీరు గురించి మరచిపోవడం మంచిది - ఇది గుప్తీకరణ ఖర్చు.
- కోసం సాధారణ ఉపయోగం నేను సలహా ఇస్తున్నాను కాలికో. ఈ CNI వివిధ కుబెర్నెట్స్ విస్తరణ సాధనాల్లో (కోప్స్, కుబెస్ప్రే, రాంచర్, మొదలైనవి) విస్తృతంగా ఉపయోగించబడుతుంది. WeaveNet మాదిరిగా, జంబో ఫ్రేమ్లను ఉపయోగిస్తుంటే, కాన్ఫిగ్మ్యాప్లో MTUని కాన్ఫిగర్ చేయాలని నిర్ధారించుకోండి. ఇది వనరుల వినియోగం, పనితీరు మరియు భద్రత పరంగా సమర్థవంతమైన బహుళ-ఫంక్షనల్ సాధనం.
చివరకు, అభివృద్ధిని అనుసరించమని నేను మీకు సలహా ఇస్తున్నాను సిలియం. ఈ CNI వారి ఉత్పత్తి (ఫీచర్లు, వనరుల పొదుపులు, పనితీరు, భద్రత, క్లస్టరింగ్...)పై చాలా చురుకైన బృందాన్ని కలిగి ఉంది మరియు వారు చాలా ఆసక్తికరమైన ప్రణాళికలను కలిగి ఉన్నారు.
CNI ఎంపిక కోసం దృశ్య రేఖాచిత్రం
మూలం: www.habr.com