මෑත කාලීනව අඛණ්ඩව
හැඳින්වීම
ඇයි මේ?
Yandex.Cloud සඳහා CCM සංවර්ධනය කිරීමට අපව පෙලඹවූ චේතනාවන් දැනටමත් විස්තර කර ඇති ඒවා සමඟ සම්පුර්ණයෙන්ම සමපාත වේ.
ඇත්තටම CCM යනු කුමක්ද?
සාමාන්යයෙන්, අපි පොකුර සඳහා අප අවට පරිසරය සකස් කරමු පිටතින් - උදාහරණයක් ලෙස, Terraform භාවිතා කිරීම. නමුත් සමහර අවස්ථාවලදී අප අවට ඇති වලාකුළු පරිසරය කළමනාකරණය කිරීමට අවශ්ය වේ පොකුරෙන්. මෙම හැකියාව ලබා දී ඇති අතර, එය ක්රියාත්මක කරනු ලබන්නේ එයයි
විශේෂයෙන්, Cloud Controller Manager ප්රධාන අන්තර්ක්රියා වර්ග පහක් සපයයි:
- උදාහරණ - Kubernetes හි නෝඩ් වස්තුවක් අතර 1:1 සම්බන්ධතාවයක් ක්රියාත්මක කරයි (
Node
) සහ වලාකුළු සපයන්නා තුළ අථත්ය යන්ත්රයක්. මේ සඳහා අපි:- ක්ෂේත්රයේ පුරවන්න
spec.providerID
වස්තුව තුළNode
. උදාහරණයක් ලෙස, OpenStack CCM සඳහා මෙම ක්ෂේත්රයට පහත ආකෘතිය ඇත:openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0
. ඔබට වලාකුළු සපයන්නාගේ නම සහ වස්තුවේ සේවාදායකයේ (OpenStack හි අථත්ය යන්ත්රය) අද්විතීය UUID දැකිය හැක; - අනුපූරකය
nodeInfo
වස්තුව තුළNode
අතථ්ය යන්ත්රය පිළිබඳ තොරතුරු. උදාහරණයක් ලෙස, අපි AWS හි උදාහරණ වර්ගය සඳහන් කරමු; - වලාකුළෙහි අථත්ය යන්ත්රයක් තිබේදැයි අපි පරීක්ෂා කරමු. උදාහරණයක් ලෙස, වස්තුවක් නම්
Node
තත්ත්වයකට ගියාNotReady
, වලාකුළු සපයන්නා තුළ අතථ්ය යන්ත්රය කිසිසේත්ම පවතින්නේ දැයි ඔබට පරීක්ෂා කළ හැකproviderID
. එය නොමැති නම්, වස්තුව මකා දමන්නNode
, වෙනත් ආකාරයකින් පොකුරේ සදහටම පවතිනු ඇත;
- ක්ෂේත්රයේ පුරවන්න
- කලාප - වස්තුව සඳහා අසාර්ථක වසම සකසයි
Node
, වලාකුළු සපයන්නා තුළ ඇති කලාප සහ කලාප අනුව උපලේඛකයාට Pod සඳහා නෝඩයක් තෝරා ගත හැකි වන පරිදි; - LoadBalancer - වස්තුවක් නිර්මාණය කිරීමේදී
Service
වර්ගය සමඟLoadBalancer
පිටත සිට පොකුරු නෝඩ් වෙත ගමනාගමනය යොමු කරන සමතුලිත වර්ගයක් නිර්මාණය කරයි. උදාහරණයක් ලෙස, Yandex.Cloud හි ඔබට භාවිතා කළ හැකියNetworkLoadBalancer
иTargetGroup
මෙම අරමුණු සඳහා; - මාර්ග - නෝඩ් අතර ජාලයක් ගොඩනඟයි, මන්ද Kubernetes අවශ්යතා අනුව, සෑම පොඩ් එකකටම තමන්ගේම IP ලිපිනයක් තිබිය යුතු අතර වෙනත් ඕනෑම පොඩ් එකක් වෙත ළඟා වීමට හැකි විය යුතුය. මෙම අරමුණු සඳහා, ඔබට උඩැතිරි ජාලයක් (VXLAN, GENEVE) භාවිතා කළ හැකිය හෝ වලාකුළු සපයන්නාගේ අතථ්ය ජාලය තුළ සෘජුවම මාර්ගගත කිරීමේ වගුවක් සකසන්න:
- පරිමාව - PVC සහ SC භාවිතා කරමින් PV ගතික ඇණවුම් කිරීමට ඉඩ දෙයි. මුලදී, මෙම ක්රියාකාරිත්වය CCM හි කොටසක් වූ නමුත් එහි විශාල සංකීර්ණත්වය හේතුවෙන් එය වෙනම ව්යාපෘතියක් වන බහාලුම් ගබඩා අතුරුමුහුණත (CSI) වෙත ගෙන යන ලදී. අපි CSI ගැන කිහිප වතාවක්ම කතා කර ඇත්තෙමු
ලියා සහ, දැනටමත් සඳහන් කර ඇති පරිදි, පවානිදහස් CSI ධාවකය.
මීට පෙර, වලාකුළ සමඟ අන්තර්ක්රියා කරන සියලුම කේත කුබර්නෙට්ස් ව්යාපෘතියේ ප්රධාන Git ගබඩාවේ පිහිටා තිබුණි. k8s.io/kubernetes/pkg/cloudprovider/providers
, නමුත් විශාල කේත පදනමක් සමඟ වැඩ කිරීමේ අපහසුතාවය නිසා ඔවුන් මෙය අත්හැරීමට තීරණය කළා. සියලුම පැරණි ක්රියාත්මක කිරීම් වෙත ගෙන ගොස් ඇත
CSI මෙන්ම, බොහෝ විශාල වලාකුළු සපයන්නන් දැනටමත් Kubernetes මත වලාකුළු උත්තේජනය කිරීමට ඔවුන්ගේ CCM නිර්මාණය කර ඇත. සැපයුම්කරුට CCM නොමැති නම්, නමුත් අවශ්ය සියලුම කාර්යයන් API හරහා තිබේ නම්, ඔබට CCM ක්රියාත්මක කළ හැකිය.
CCM හි ඔබගේම ක්රියාත්මක කිරීම ලිවීමට, එය ක්රියාත්මක කිරීමට ප්රමාණවත් වේ
Реализация
ඔයා කොහොමද මේකට ආවේ
අපි සංවර්ධනය ආරම්භ කළෙමු (හෝ ඒ වෙනුවට, භාවිතා කිරීමට පවා).
කෙසේ වෙතත්, මෙම ක්රියාත්මක කිරීමේදී අපට මග හැරී ඇත:
- JWT IAM ටෝකනය හරහා සත්යාපනය;
- සේවා පාලක සහාය.
කතුවරයා සමඟ එකඟතාවයකින් (dlisin) ටෙලිග්රාම් හි, අපි yandex-Cloud-controller-manager forked සහ නැතිවූ කාර්යයන් එකතු කළෙමු.
ප්රධාන ලක්ෂණ
දැනට, CCM පහත අතුරුමුහුණත් සඳහා සහය දක්වයි:
- උදාහරණ;
- කලාප;
- LoadBalancer.
අනාගතයේදී, Yandex.Cloud උසස් VPC හැකියාවන් සමඟ වැඩ කිරීමට පටන් ගන්නා විට, අපි අතුරු මුහුණතක් එක් කරන්නෙමු. මාර්ග.
ප්රධාන අභියෝගය ලෙස LoadBalanacer
මුලදී, අපි අනෙකුත් CCM ක්රියාත්මක කිරීම් මෙන්, යුගලයක් නිර්මාණය කිරීමට උත්සාහ කළෙමු LoadBalancer
и TargetGroup
එකිනෙකා සඳහා Service
වර්ගය සමඟ LoadBalancer
. කෙසේ වෙතත්, Yandex.Cloud එක් සිත්ගන්නා සීමාවක් සොයා ගත්තේය: ඔබට භාවිතා කළ නොහැක TargetGroups
ඡේදනය වීමත් සමඟ Targets
(යුගල SubnetID
- IpAddress
).
එබැවින්, සාදන ලද CCM තුළ, පාලකයක් දියත් කරනු ලැබේ, එය වස්තූන් වෙනස් වන විට Node
එක් එක් අතථ්ය යන්ත්රයක ඇති සියලුම අතුරුමුහුණත් පිළිබඳ තොරතුරු රැස් කරයි, ඒවා නිශ්චිත ඒවා අනුව කාණ්ඩ කරයි NetworkID
, විසින් නිර්මාණය කරයි TargetGroup
මත NetworkID
, සහ අදාළත්වය ද නිරීක්ෂණය කරයි. පසුව, වස්තුවක් නිර්මාණය කිරීමේදී Service
වර්ගය සමඟ LoadBalanacer
අපි සරලව පෙර-සාදන ලද එකක් අමුණන්නෙමු TargetGroup
නව වෙත NetworkLoadBalanacer
'am.
භාවිතා කිරීම ආරම්භ කරන්නේ කෙසේද?
CCM Kubernetes අනුවාදය 1.15 සහ ඉහළ අනුවාද සඳහා සහය දක්වයි. පොකුරක් තුළ, එය වැඩ කිරීමට, එය ධජය අවශ්ය වේ --cloud-provider=external
ලෙස සකස් කරන ලදී true
kube-apiserver, kube-controller-manager, kube-scheduler සහ සියලුම kubelets සඳහා.
ස්ථාපනය සඳහා අවශ්ය සියලු පියවර විස්තර කර ඇත
CCM භාවිතා කිරීමට ඔබට ද අවශ්ය වනු ඇත:
-
දක්වන්න මැනිෆෙස්ටයේ ඩිරෙක්ටරි හැඳුනුම්කාරකය (folder-id
) Yandex.Cloud; - Yandex.Cloud API සමඟ අන්තර් ක්රියා කිරීම සඳහා සේවා ගිණුම. ප්රතිපත්ති ප්රකාශනයේ
Secret
අවශ්යයිබලයලත් යතුරු මාරු කරන්න සේවා ගිණුමෙන්. ලේඛනවලවිස්තර කර ඇත , සේවා ගිණුමක් සාදා යතුරු ලබා ගන්නේ කෙසේද.
ඔබගේ ප්රතිපෝෂණ ලැබීමට අපි සතුටු වන්නෙමු
ප්රතිඵල
අපි ක්රියාත්මක කළ CCM පසුගිය සති දෙක තුළ Kubernetes පොකුරු පහක භාවිත කර ඇති අතර ඉදිරි මාසය තුළ ඔවුන්ගේ සංඛ්යාව 20 දක්වා පුළුල් කිරීමට සැලසුම් කරමු. අපි දැනට විශාල සහ තීරණාත්මක K8s ස්ථාපනයන් සඳහා CCM භාවිතා කිරීම නිර්දේශ නොකරමු.
CSI හි මෙන්ම, Yandex සංවර්ධකයින් මෙම ව්යාපෘතියේ සංවර්ධනය සහ සහාය ලබා ගන්නේ නම් අපි සතුටු වන්නෙමු - අපට වඩාත් අදාළ කාර්යයන් සමඟ කටයුතු කිරීම සඳහා ඔවුන්ගේ ඉල්ලීම පරිදි ගබඩාව මාරු කිරීමට අපි සූදානම්.
ප්රාදේශීය සභා
අපගේ බ්ලොග් අඩවියේ ද කියවන්න:
- «
Yandex.Cloud සඳහා Kubernetes හි CSI ධාවකයක් සංවර්ධනය කිරීමේ අපගේ අත්දැකීම් »; - «
Kubernetes පොකුරක් සකස් කිරීම පහසු සහ පහසු ද? addon-operator නිවේදනය කරමින් »; - «
Kubernetes පුළුල් කිරීම සහ අතිරේක කිරීම (දළ විශ්ලේෂණය සහ වීඩියෝ වාර්තාව) ".
මූලාශ්රය: www.habr.com