මෙය මගේ යාවත්කාලීනයයි
පළමුවෙන්ම, මට Cilium කණ්ඩායමට ස්තුති කිරීමට අවශ්යයි: ප්රමිතික අධීක්ෂණ ස්ක්රිප්ට් පරීක්ෂා කිරීමට සහ නිවැරදි කිරීමට යාලුවනේ මට උදවු කළා.
2018 නොවැම්බර් සිට වෙනස් වී ඇති දේ
එතැන් සිට වෙනස් වී ඇති දේ මෙන්න (ඔබ කැමති නම්):
Flannel වේගවත්ම සහ සරලම CNI අතුරුමුහුණත ලෙස පවතී, නමුත් තවමත් ජාල ප්රතිපත්ති සහ සංකේතනයට සහය නොදක්වයි.
Romana තවදුරටත් සහාය නොදක්වයි, එබැවින් අපි එය මිණුම් ලකුණෙන් ඉවත් කර ඇත.
WeaveNet දැන් ඇතුල්වීම සහ පිටවීම සඳහා ජාල ප්රතිපත්ති සඳහා සහය දක්වයි! නමුත් ඵලදායිතාව අඩුවෙලා.
Calico හි, ඔබට තවමත් හොඳම කාර්ය සාධනය සඳහා උපරිම පැකට් ප්රමාණය (MTU) අතින් වින්යාස කිරීමට අවශ්ය වේ. Calico CNI ස්ථාපනය සඳහා විකල්ප දෙකක් ඉදිරිපත් කරයි, එබැවින් ඔබට වෙනම ETCD ගබඩාවක් නොමැතිව කළ හැකිය:
- දත්ත ගබඩාවක් ලෙස Kubernetes API හි තත්වය ගබඩා කිරීම (පොකුරු ප්රමාණය < 50 නෝඩ්);
- K8S API මත පැටවීම ලිහිල් කිරීම සඳහා Typha ප්රොක්සියක් සහිත දත්ත ගබඩාවක් ලෙස Kubernetes API තුළ ගබඩා කිරීම (පොකුරු ප්රමාණය > 50 නෝඩ්).
කැලිකෝ සහාය නිවේදනය කළේය
Cilium දැන් සංකේතනයට සහය දක්වයි! Cilium IPSec උමං සමඟ සංකේතනය සපයන අතර සංකේතනය කරන ලද WeaveNet ජාලයට විකල්පයක් ඉදිරිපත් කරයි. නමුත් WeaveNet සංකේතනය සක්රීය කර ඇති Cilium වලට වඩා වේගවත් වේ.
සාදන ලද ETCD ක්රියාකරුට ස්තූතිවන්ත වන පරිදි Cilium දැන් යෙදවීමට පහසු වේ.
Cilium කණ්ඩායම මතක පරිභෝජනය සහ CPU පිරිවැය අඩු කිරීමෙන් CNI වෙතින් යම් බරක් අඩු කිරීමට උත්සාහ කර ඇත, නමුත් එහි තරඟකරුවන් තවමත් සැහැල්ලු ය.
මිණුම් සලකුණු සන්දර්භය
මිණුම් ලකුණ 10 Gb Supermicro ස්විචයක් සහිත අථත්ය නොවන Supermicro සේවාදායක තුනක් මත ධාවනය වේ. සේවාදායකයන් නිෂ්ක්රීය DAC SFP+ කේබල් හරහා ස්විචයට කෙලින්ම සම්බන්ධ කර ඇති අතර ජම්බෝ රාමු (MTU 9000) සමඟ එකම VLAN මත වින්යාස කර ඇත.
Kubernetes 1.14.0 Ubuntu 18.04 LTS මත Docker 18.09.2 සමඟ ස්ථාපනය කර ඇත (මෙම නිකුතුවේ පෙරනිමි ඩොකර් අනුවාදය).
ප්රතිනිෂ්පාදනය වැඩි දියුණු කිරීම සඳහා, අපි සෑම විටම මාස්ටර් පළමු නෝඩයේ වින්යාස කිරීමටත්, මිණුම් ලකුණෙහි සේවාදායක කොටස දෙවන සේවාදායකයේත්, සේවාදායක කොටස තුන්වන ස්ථානයේත් තැබීමට තීරණය කළෙමු. මෙය සිදු කිරීම සඳහා, අපි Kubernetes යෙදවීමේදී NodeSelector භාවිතා කරමු.
අපි මිණුම් සලකුණු ප්රතිඵල පහත පරිමාණයෙන් විස්තර කරන්නෙමු:
මිණුම් ලකුණක් සඳහා CNI තෝරා ගැනීම
මෙම කොටසෙහි ලැයිස්තුවෙන් CNI සඳහා පමණක් මිණුම් ලකුණකි
අපි පහත CNI සංසන්දනය කරන්නෙමු:
- කැලිකෝ v3.6
- Canal v3.6 (අත්යවශ්යයෙන්ම ජාලකරණය සඳහා Flannel + ෆයර්වෝලයක් ලෙස Calico)
- සිලියම් 1.4.2
- ෆ්ලැනෙල් 0.11.0
- Kube-රවුටරය 0.2.5
- WeaveNet 2.5.1
ස්ථාපනය
CNI ස්ථාපනය කිරීම පහසු වන තරමට, අපගේ පළමු හැඟීම වඩා හොඳ වනු ඇත. මිණුම් ලකුණෙන් සියලුම CNI ස්ථාපනය කිරීමට ඉතා පහසු වේ (විධාන එකක් හෝ දෙකක් සමඟ).
අප කී පරිදි, සර්වර් සහ ස්විචය ජම්බෝ රාමු සක්රීය කර වින්යාස කර ඇත (අපි MTU 9000 ලෙස සකසා ඇත). ඇඩැප්ටර වින්යාසය මත පදනම්ව CNI ස්වයංක්රීයව MTU තීරණය කරන්නේ නම් අපි සතුටු වන්නෙමු. කෙසේ වෙතත්, මෙය කළමනාකරණය කළේ Cilium සහ Flannel පමණි. ඉතිරි CNIs හට ස්වයංක්රීය MTU සොයාගැනීම් එක් කිරීමට GitHub මත ඉල්ලීම් ඇත, නමුත් අපි Calico, Canal සහ Kube-router සඳහා ConfigMap වෙනස් කිරීමෙන් හෝ WeaveNet සඳහා පරිසර විචල්යයක් සම්මත කිරීමෙන් එය අතින් වින්යාස කරන්නෙමු.
වැරදි MTU සමඟ ඇති ගැටලුව කුමක්ද? මෙම රූප සටහන පෙරනිමි MTU සහ ජම්බෝ රාමු සබල කර ඇති WeaveNet අතර වෙනස පෙන්වයි:
MTU ප්රතිදානයට බලපාන්නේ කෙසේද?
MTU කාර්ය සාධනය සඳහා කෙතරම් වැදගත් දැයි අපි දැක ඇත්තෙමු, දැන් අපි බලමු අපගේ CNI ස්වයංක්රීයව එය තීරණය කරන්නේ කෙසේදැයි:
CNI ස්වයංක්රීයව MTU හඳුනා ගනී
ප්රශස්ත කාර්ය සාධනය සඳහා ඔබ Calico, Canal, Kube-router සහ WeaveNet සඳහා MTU වින්යාස කිරීමට අවශ්ය බව ප්රස්ථාරය පෙන්වයි. Cilium සහ Flannel හට කිසිදු සැකසුමකින් තොරව MTU නිවැරදිව තීරණය කිරීමට හැකි විය.
Безопасность
අපි CNI ආරක්ෂාව පැති දෙකකින් සංසන්දනය කරන්නෙමු: සම්ප්රේෂණය කළ දත්ත සංකේතනය කිරීමේ හැකියාව සහ Kubernetes ජාල ප්රතිපත්ති ක්රියාත්මක කිරීම (සැබෑ පරීක්ෂණ මත පදනම්ව, ලේඛනගත කිරීම මත නොවේ).
CNIs දෙකක් පමණක් දත්ත සංකේතනය කරයි: Cilium සහ WeaveNet. සංකේතනය WeaveNet CNI පරිසර විචල්යයක් ලෙස සංකේතාංකන මුරපදය සැකසීමෙන් සක්රීය කර ඇත. තුල
ජාල ප්රතිපත්තිය ක්රියාත්මක කිරීම සම්බන්ධයෙන්, ඔවුන් සාර්ථක වී ඇත Calico, Canal, Cilium සහ WeaveNet, ඔබට ඇතුල්වීම සහ පිටවීම නීති වින්යාසගත කළ හැක. සදහා කුබේ-රවුටරය ඇතුල්වීම සඳහා පමණක් නීති ඇත, සහ ෆ්ලැනෙල් කිසිසේත්ම ජාල ප්රතිපත්ති නොමැත.
මෙන්න සමස්ත ප්රතිඵල:
ආරක්ෂිත කාර්ය සාධන මිණුම් ලකුණ ප්රතිඵල
ඵලදායිතාව
මෙම මිණුම් ලකුණ සෑම පරීක්ෂණයකම අවම වශයෙන් ලකුණු තුනකට වඩා සාමාන්ය ප්රතිදානය පෙන්වයි. අපි TCP සහ UDP (iperf3 භාවිතා කරමින්), HTTP (Nginx සහ curl සමඟ) හෝ FTP (vsftpd සහ curl සමඟ) වැනි සැබෑ යෙදුම්වල කාර්ය සාධනය සහ අවසානයේ SCP-පදනම් වූ සංකේතනය භාවිතයෙන් (සේවාදායක සහ සේවාදායකය OpenSSH භාවිතයෙන්) යෙදුම් කාර්ය සාධනය පරීක්ෂා කරමු.
සියලුම පරීක්ෂණ සඳහා, අපි CNI කාර්ය සාධනය දේශීය ජාල කාර්ය සාධනය සමඟ සංසන්දනය කිරීම සඳහා හිස් ලෝහ මිණුම් ලකුණක් (හරිත රේඛාවක්) සිදු කළෙමු. මෙන්න අපි එකම පරිමාණය භාවිතා කරමු, නමුත් වර්ණයෙන්:
- කහ = ඉතා හොඳයි
- තැඹිලි = හොඳයි
- නිල් = එසේ
- රතු = නරක
අපි වැරදි ලෙස වින්යාස කර ඇති CNI ලබා නොගන්නා අතර නිවැරදි MTU සහිත CNI සඳහා පමණක් ප්රතිඵල පෙන්වමු. (සටහන: ඔබ සංකේතනය සක්රීය කරන්නේ නම් Cilium නිවැරදිව MTU ගණනය නොකරයි, එබැවින් ඔබට 8900 අනුවාදයේ MTU 1.4 දක්වා අතින් අඩු කිරීමට සිදුවේ. ඊළඟ අනුවාදය වන 1.5 මෙය ස්වයංක්රීයව සිදු කරයි.)
මෙන්න ප්රතිඵල:
සියලුම CNIs TCP මිණුම් ලකුණෙහි හොඳින් ක්රියාත්මක විය. එන්ක්රිප්ෂන් සමඟ සීඑන්අයි බොහෝ පසුගාමී වන්නේ සංකේතනය මිල අධික බැවිනි.
මෙහිදීද සියලුම CNI හොඳින් ක්රියාත්මක වේ. සංකේතනය සහිත CNI එකම ප්රතිඵලයක් පෙන්නුම් කළේය. Cilium තරඟයට වඩා ටිකක් පිටුපසින් ඇත, නමුත් එය හිස් ලෝහ වලින් 2,3% ක් පමණි, එබැවින් එය නරක ප්රතිඵලය නොවේ. Cilium සහ Flannel පමණක් MTU නිවැරදිව තීරණය කළ බව අමතක නොකරන්න, මේවා කිසිදු අමතර වින්යාසයකින් තොරව ඔවුන්ගේ ප්රතිඵල වේ.
සැබෑ යෙදුමක් ගැන කුමක් කිව හැකිද? ඔබට පෙනෙන පරිදි, HTTP සඳහා සමස්ත කාර්ය සාධනය TCP සඳහා වඩා තරමක් අඩුය. ඔබ TCP සමඟ HTTP භාවිතා කළත්, HTTP මිණුම් ලකුණට බලපාන මන්දගාමී ආරම්භයක් වැළැක්වීම සඳහා අපි TCP මිණුම් ලකුණෙහි iperf3 වින්යාස කළෙමු. හැමෝම මෙතන හොඳ වැඩක් කළා. Kube-router හි පැහැදිලි වාසියක් ඇත, නමුත් WeaveNet හොඳින් ක්රියා කළේ නැත: හිස් ලෝහයට වඩා 20% ක් පමණ නරක ය. සංකේතනය සහිත Cilium සහ WeaveNet ඇත්තෙන්ම කණගාටුදායකයි.
FTP සමඟින්, තවත් TCP මත පදනම් වූ ප්රොටෝකෝලය, ප්රතිඵල වෙනස් වේ. Flannel සහ Kube-router කාර්යය ඉටු කරයි, නමුත් Calico, Canal සහ Cilium ටිකක් පිටුපසින් ඇති අතර හිස් ලෝහයට වඩා 10% ක් පමණ මන්දගාමී වේ. WeaveNet 17%ක් තරම් පසුපසින් ඇත, නමුත් සංකේතනය කළ WeaveNet සංකේතාත්මක Cilium වලට වඩා 40%ක් ඉදිරියෙන් සිටී.
SCP සමඟින් අපට SSH සංකේතනය සඳහා කොපමණ මුදලක් වැය වේද යන්න වහාම දැක ගත හැකිය. සියලුම CNIs පාහේ හොඳින් ක්රියාත්මක වන නමුත් WeaveNet නැවතත් පසුගාමී වේ. සංකේතනය සහිත Cilium සහ WeaveNet ද්විත්ව සංකේතනය (SSH + CNI) හේතුවෙන් නරකම ඒවා වේ.
ප්රතිඵල සහිත සාරාංශ වගුවක් මෙන්න:
සම්පත් පරිභෝජනය
දැන් අපි CNI අධික බරක් යටතේ සම්පත් පරිභෝජනය කරන ආකාරය සංසන්දනය කරමු (TCP මාරු කිරීමේදී, 10 Gbps). කාර්ය සාධන පරීක්ෂණ වලදී අපි CNI හිස් ලෝහ (හරිත රේඛාව) සමඟ සංසන්දනය කරමු. සම්පත් පරිභෝජනය සඳහා, CNI නොමැතිව පිරිසිදු Kubernetes (දම් පැහැති රේඛාව) පෙන්වමු සහ CNI කොපමණ අමතර සම්පත් පරිභෝජනය කරන්නේදැයි බලමු.
අපි මතකයෙන් පටන් ගනිමු. මාරු කිරීමේදී MB හි නෝඩ් වල RAM (බෆර සහ හැඹිලි හැර) සඳහා සාමාන්ය අගය මෙන්න.
Flannel සහ Kube-router විශිෂ්ට ප්රතිඵල පෙන්නුම් කර ඇත - 50 MB පමණි. Calico සහ Canal යන දෙකටම 70ක් ඇත. WeaveNet පැහැදිලිවම අනෙක් ඒවාට වඩා වැඩියෙන් පරිභෝජනය කරයි - 130 MB, සහ Cilium 400 තරම් භාවිතා කරයි.
දැන් අපි CPU කාලය පරිභෝජනය පරීක්ෂා කරමු. සැලකිය යුතු ය: රූප සටහනේ දැක්වෙන්නේ ප්රතිශත නොවේ, නමුත් ppm, එනම් “හිස් යකඩ” සඳහා 38 ppm 3,8% කි. මෙන්න ප්රතිඵල:
Calico, Canal, Flannel සහ Kube-router ඉතා CPU කාර්යක්ෂම වේ - CNI නොමැති Kubernetes වලට වඩා 2% ක් පමණි. WeaveNet අතිරේක 5% සමඟින් බොහෝ පසුපසින් සිටින අතර, Cilium 7% කින් පසුව.
සම්පත් පරිභෝජනය පිළිබඳ සාරාංශයක් මෙන්න:
ප්රතිඵල
සියලුම ප්රතිඵල සහිත වගුව:
නිගමනය
අවසාන කොටසින් මම ප්රතිඵල ගැන මගේ ආත්මීය අදහස ප්රකාශ කරන්නම්. මෙම මිණුම් ලකුණ ඉතා කුඩා පොකුරක් (නෝඩ් 3) මත තනි සම්බන්ධතාවයක ප්රතිදානය පමණක් පරීක්ෂා කරන බව මතක තබා ගන්න. එය විශාල පොකුරු (<50 නෝඩ්) හෝ සමාන්තර සම්බන්ධතා සඳහා අදාළ නොවේ.
තත්වය අනුව පහත CNI භාවිතා කිරීමට මම නිර්දේශ කරමි:
- ඔබේ පොකුරේ තිබේද සම්පත් කිහිපයක් සහිත නෝඩ් (GB RAM කිහිපයක්, හර කිහිපයක්) සහ ඔබට ආරක්ෂක විශේෂාංග අවශ්ය නොවේ - තෝරන්න ෆ්ලැනෙල්. මෙය වඩාත්ම ලාභදායී CNI වලින් එකකි. තවද එය විවිධාකාර ගෘහ නිර්මාණ ශිල්පය (amd64, arm, arm64, ආදිය) සමඟ අනුකූල වේ. මීට අමතරව, මෙය MTU ස්වයංක්රීයව තීරණය කළ හැකි CNI දෙකෙන් එකකි (අනෙක් එක Cilium වේ, එබැවින් ඔබට කිසිවක් වින්යාස කිරීමට අවශ්ය නැත. Kube-router ද සුදුසු ය, නමුත් එය සම්මත තරම් නොවන අතර ඔබට MTU අතින් වින්යාස කිරීමට අවශ්ය වනු ඇත.
- අවශ්ය නම් ජාලය සංකේතනය කරන්න ආරක්ෂාව සඳහා, ගන්න WeaveNet. ඔබ ජම්බෝ රාමු භාවිතා කරන්නේ නම් MTU ප්රමාණය සඳහන් කිරීමට අමතක නොකරන්න, පරිසර විචල්යයක් හරහා මුරපදයක් සඳහන් කිරීමෙන් සංකේතනය සක්රීය කරන්න. නමුත් කාර්ය සාධනය ගැන අමතක කිරීම වඩා හොඳය - එය සංකේතනය කිරීමේ පිරිවැයයි.
- සඳහා සාමාන්ය භාවිතය උපදෙස් දෙන්න කැලිකෝ. මෙම CNI විවිධ Kubernetes යෙදවීමේ මෙවලම්වල (Kops, Kubespray, Rancher, ආදිය) බහුලව භාවිතා වේ. WeaveNet මෙන්ම, ජම්බෝ රාමු භාවිතා කරන්නේ නම්, කන්ෆිග්මැප් තුළ MTU වින්යාස කිරීමට වග බලා ගන්න. එය සම්පත් පරිභෝජනය, කාර්ය සාධනය සහ ආරක්ෂාව සම්බන්ධයෙන් කාර්යක්ෂම වන බහු-ක්රියාකාරී මෙවලමකි.
අවසාන වශයෙන්, සංවර්ධනය අනුගමනය කිරීමට මම ඔබට උපදෙස් දෙමි සිලියම්. මෙම CNI සතුව ඔවුන්ගේ නිෂ්පාදන (විශේෂාංග, සම්පත් ඉතුරුම්, කාර්ය සාධනය, ආරක්ෂාව, පොකුරු...) මත බොහෝ ක්රියා කරන ඉතා ක්රියාකාරී කණ්ඩායමක් සිටින අතර ඔවුන්ට ඉතා රසවත් සැලසුම් ඇත.
CNI තේරීම සඳහා දෘශ්ය රූප සටහන
මූලාශ්රය: www.habr.com