සටහන. පරිවර්තනය.: LinkedIn වෙතින් SRE ඉංජිනේරුවෙකු විසින් ලියන ලද මෙම ලිපිය, Kubernetes හි අභ්යන්තර මායාව - වඩාත් නිවැරදිව, CRI, CNI සහ kube-apiserver හි අන්තර්ක්රියා - එය සිදු වන්නේ ඊළඟ පොඩ් එකට IP ලිපිනයක් පැවරීමට අවශ්ය වූ විටය.
මූලික අවශ්යතා වලින් එකක්
මම මුලින්ම Kubernetes සමඟ වැඩ කිරීමට පටන් ගත් විට, Pods ඔවුන්ගේ IP ලිපින හරියටම ලබා ගන්නේ කෙසේද යන්න මට සම්පූර්ණයෙන්ම පැහැදිලි නැත. එක් එක් සංරචක ක්රියා කරන ආකාරය පිළිබඳ අවබෝධයක් තිබියදීත්, ඒවා එකට වැඩ කිරීම සිතීම දුෂ්කර විය. උදාහරණයක් ලෙස, CNI ප්ලගීන යනු කුමක්දැයි මම දැන සිටියෙමි, නමුත් ඒවා හරියටම හඳුන්වන්නේ කෙසේදැයි මම නොදනිමි. එමනිසා, විවිධ ජාල සංරචක සහ ඒවා Kubernetes පොකුරක් තුළ එකට ක්රියා කරන ආකාරය පිළිබඳ දැනුම බෙදා ගැනීමට මෙම ලිපිය ලිවීමට මම තීරණය කළෙමි, එමඟින් සෑම පොඩ් එකකටම තමන්ගේම IP ලිපිනය ලබා ගත හැකිය.
බහාලුම් සඳහා විවිධ ධාවන කාල විකල්ප ඇති ආකාරයටම, Kubernetes හි ජාලකරණය සංවිධානය කිරීමට විවිධ ක්රම තිබේ. මෙම ප්රකාශනය භාවිතා කරනු ඇත
සමහර මූලික සංකල්ප
බහාලුම් සහ ජාලය: කෙටි දළ විශ්ලේෂණයක්
ජාලය හරහා බහාලුම් එකිනෙකා සමඟ සන්නිවේදනය කරන ආකාරය පැහැදිලි කරන විශිෂ්ට ප්රකාශන අන්තර්ජාලයේ ඕනෑ තරම් තිබේ. එබැවින්, මම මූලික සංකල්ප පිළිබඳ සාමාන්ය දළ විශ්ලේෂණයක් පමණක් ලබා දෙන අතර ලිනක්ස් පාලමක් නිර්මාණය කිරීම සහ පැකේජ ඇතුළත් කිරීම ඇතුළත් වන එක් ප්රවේශයකට සීමා කරමි. බහාලුම් ජාලකරණය පිළිබඳ මාතෘකාවම වෙනම ලිපියක් ලැබිය යුතු බැවින් විස්තර මඟ හරිනු ලැබේ. විශේෂයෙන් තීක්ෂ්ණ බුද්ධිය සහ අධ්යාපනික ප්රකාශන සඳහා සබැඳි පහතින් සපයනු ලැබේ.
එක් සත්කාරකයක් මත බහාලුම්
එකම ධාරකයක ක්රියාත්මක වන බහාලුම් අතර IP ලිපින හරහා සන්නිවේදනය සංවිධානය කිරීමේ එක් ක්රමයක් වන්නේ Linux පාලමක් නිර්මාණය කිරීමයි. මෙම කාර්යය සඳහා, Kubernetes (සහ Docker) හි අතථ්ය උපාංග නිර්මාණය කර ඇත.
එකම ධාරකයේ ඇති සියලුම බහාලුම්වල IP ලිපින හරහා එකිනෙකා සමඟ සන්නිවේදනය කළ හැකි පාලමකට සම්බන්ධ වී ඇති එක් කෙළවරක් ඇත. ලිනක්ස් පාලමට IP ලිපිනයක් ද ඇති අතර අනෙකුත් නෝඩ් සඳහා නියම කර ඇති කරල් වලින් පිටවන ගමනාගමනය සඳහා දොරටුවක් ලෙස ක්රියා කරයි.
විවිධ ධාරක මත බහාලුම්
Packet encapsulation යනු විවිධ නෝඩ් වල ඇති බහාලුම්වලට IP ලිපින භාවිතයෙන් එකිනෙකා සමඟ සන්නිවේදනය කිරීමට ඉඩ සලසන එක් ක්රමයකි. Flannel හි, මෙම අවස්ථාව සඳහා තාක්ෂණය වගකිව යුතුය.
Kubernetes පොකුරක් තුළ, Flannel vxlan උපාංගයක් නිර්මාණය කර ඒ අනුව එක් එක් නෝඩයේ මාර්ග වගුව යාවත්කාලීන කරයි. වෙනස් ධාරකයක බහාලුමක් සඳහා නියම කර ඇති සෑම පැකට්ටුවක්ම vxlan උපාංගය හරහා ගමන් කරන අතර UDP පැකට්ටුවක කොටු කර ඇත. ගමනාන්තයේදී, කූඩු පැකට්ටුව නිස්සාරණය කර අපේක්ෂිත පොඩ් වෙත යවනු ලැබේ.
සටහන: මෙය බහාලුම් අතර ජාල සන්නිවේදනය සංවිධානය කිරීමට එක් මාර්ගයක් පමණි.
CRI යනු කුමක්ද?
CNI යනු කුමක්ද?
Pods වලට IP ලිපින ලබා දීම සඳහා නෝඩ් වලට අනුජාල වෙන් කිරීම
පොකුරක ඇති සෑම පොඩ් එකකටම IP ලිපිනයක් තිබිය යුතු බැවින්, මෙම ලිපිනය අද්විතීය බව සහතික කිරීම වැදගත් වේ. මෙය සාක්ෂාත් කරගනු ලබන්නේ සෑම නෝඩයකටම අනන්ය උපජාලයක් පැවරීමෙනි, එයින් එම නෝඩයේ ඇති පොඩ් වලට IP ලිපින පවරනු ලැබේ.
සත්කාරක IPAM පාලකය
කවදාද? nodeipam
ධජ පරාමිතියක් ලෙස සම්මත විය --controllers
Kubernetes node එකක් මුලින් පොකුර සමඟ ලියාපදිංචි වූ විට එය podCIDR පවරනු ලැබේ. නෝඩ් වල podCIDR වෙනස් කිරීමට, ඔබ ඒවා ලියාපදිංචි කිරීම ඉවත් කර නැවත ලියාපදිංචි කළ යුතු අතර, ඒ අතර ඇති Kubernetes පාලන ස්ථර වින්යාසයට සුදුසු වෙනස්කම් සිදු කළ යුතුය. පහත දැක්වෙන විධානය භාවිතයෙන් ඔබට නෝඩයක podCIDR පෙන්විය හැක:
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubelet, බහාලුම් ධාවන කාලය සහ CNI ප්ලගීන: ඒ සියල්ල ක්රියා කරන ආකාරය
නෝඩයකට පොඩ් එකක් උපලේඛනගත කිරීම සඳහා සූදානම් වීමේ පියවර රාශියක් ඇතුළත් වේ. මෙම කොටසේදී, මම අවධානය යොමු කරන්නේ පොඩ් ජාලයක් සැකසීමට සෘජුවම සම්බන්ධ ඒවා පමණි.
යම් නෝඩයකට පොඩ් එකක් උපලේඛනගත කිරීම පහත සිදුවීම් දාමය අවුලුවයි:
උදවු:
බහාලුම් ධාවන කාලය සහ CNI ප්ලගීන අතර අන්තර්ක්රියා
සෑම ජාල සැපයුම්කරුවෙකුටම තමන්ගේම CNI ප්ලගිනයක් ඇත. කන්ටේනරයේ ධාවන කාලය එය ආරම්භ වන විට පොඩ් සඳහා ජාලය වින්යාස කිරීමට එය ක්රියාත්මක කරයි. බහාලුම් සම්බන්ධයෙන්, CNI ප්ලගිනය ප්ලගිනය මගින් දියත් කෙරේ
එපමණක් නොව, සෑම සැපයුම්කරුවෙකුටම තමන්ගේම නියෝජිතයෙකු සිටී. එය සියලුම Kubernetes නෝඩ් මත ස්ථාපනය කර ඇති අතර කරල් වල ජාල වින්යාසය සඳහා වගකිව යුතුය. මෙම නියෝජිතයා CNI වින්යාසය සමඟ ඇතුළත් කර ඇත, නැතහොත් ස්වාධීනව එය නෝඩය මත නිර්මාණය කරයි. CRI ප්ලගිනය ඇමතීමට කුමන CNI ප්ලගිනයටද වින්යාසය උදවු කරයි.
CNI වින්යාසයේ පිහිටීම අභිරුචිකරණය කළ හැකිය; පෙරනිමියෙන් එය ඇත /etc/cni/net.d/<config-file>
. එක් එක් පොකුරු නෝඩය මත CNI ප්ලගීන ස්ථාපනය කිරීම සඳහා පොකුරු පරිපාලකයින් ද වගකිව යුතුය. ඔවුන්ගේ පිහිටීම ද අභිරුචිකරණය කළ හැකිය; පෙරනිමි නාමාවලිය - /opt/cni/bin
.
බහාලුම් භාවිතා කරන විට, ප්ලගින වින්යාසය සහ ද්විමය සඳහා මාර්ග කොටසෙහි සැකසිය හැක [plugins.«io.containerd.grpc.v1.cri».cni]
в
අපි අපගේ ජාල සැපයුම්කරු ලෙස Flannel භාවිතා කරන බැවින්, එය පිහිටුවීම ගැන ටිකක් කතා කරමු:
- Flanneld (Flannel's daemon) සාමාන්යයෙන් පොකුරක් තුළ DaemonSet ලෙස ස්ථාපනය කර ඇත.
install-cni
ලෙසinit කන්ටේනරය . Install-cni
නිර්මාණය කරයිCNI වින්යාස ගොනුව (/etc/cni/net.d/10-flannel.conflist
) එක් එක් නෝඩය මත.- Flanneld vxlan උපාංගයක් නිර්මාණය කරයි, API සේවාදායකයෙන් ජාල පාරදත්ත ලබා ගනී, සහ පොඩ් යාවත්කාලීන නිරීක්ෂණය කරයි. ඒවා නිර්මාණය කරන විට, එය පොකුර පුරා ඇති සියලුම කරල් සඳහා මාර්ග බෙදා හරිනු ලැබේ.
- මෙම මාර්ග IP ලිපින හරහා පොඩ්ඩට එකිනෙකා සමඟ සන්නිවේදනය කිරීමට ඉඩ සලසයි.
Flannel හි වැඩ පිළිබඳ වඩාත් සවිස්තරාත්මක තොරතුරු සඳහා, ලිපියේ අවසානයේ ඇති සබැඳි භාවිතා කිරීමට මම නිර්දේශ කරමි.
Containerd CRI ප්ලගිනය සහ CNI ප්ලගීන අතර අන්තර්ක්රියා පිළිබඳ රූප සටහනක් මෙන්න:
ඔබට ඉහත දැකිය හැකි පරිදි, kubelet විසින් Pod එක නිර්මාණය කිරීම සඳහා Containerd CRI ප්ලගිනය අමතයි, පසුව එය CNI ප්ලගිනය අමතා පොඩ් ජාලය වින්යාස කරයි. එසේ කිරීමේදී, ජාල සැපයුම්කරුගේ CNI ප්ලගිනය ජාලයේ විවිධ පැතිකඩයන් වින්යාස කිරීම සඳහා අනෙකුත් මූලික CNI ප්ලගීන අමතයි.
CNI ප්ලගීන අතර අන්තර්ක්රියා
විවිධ CNI ප්ලගීන ඇත, එහි කාර්යය වන්නේ සත්කාරකයේ ඇති බහාලුම් අතර ජාල සන්නිවේදනය සැකසීමට උපකාර කිරීමයි. මෙම ලිපියෙන් ඒවායින් තුනක් සාකච්ඡා කරනු ඇත.
CNI ප්ලගිනය Flannel
ජාල සපයන්නෙකු ලෙස Flannel භාවිතා කරන විට, Containerd CRI සංරචකය අමතන්න /etc/cni/net.d/10-flannel.conflist
.
$ cat /etc/cni/net.d/10-flannel.conflist
{
"name": "cni0",
"plugins": [
{
"type": "flannel",
"delegate": {
"ipMasq": false,
"hairpinMode": true,
"isDefaultGateway": true
}
}
]
}
Flannel CNI ප්ලගිනය Flanneld සමඟ එක්ව ක්රියා කරයි. ආරම්භයේදී, Flanneld API සේවාදායකයෙන් podCIDR සහ අනෙකුත් ජාල සම්බන්ධ තොරතුරු ලබාගෙන ඒවා ගොනුවකට සුරකියි. /run/flannel/subnet.env
.
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=false
Flannel CNI ප්ලගිනය දත්ත භාවිතා කරයි /run/flannel/subnet.env
CNI පාලම ප්ලගිනය වින්යාස කිරීමට සහ ඇමතීමට.
CNI ප්ලගින පාලම
මෙම ප්ලගිනය පහත වින්යාසය සමඟ හැඳින්වේ:
{
"name": "cni0",
"type": "bridge",
"mtu": 1450,
"ipMasq": false,
"isGateway": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24"
}
}
පළමු වරට ඇමතූ විට, එය සමඟ ලිනක්ස් පාලමක් නිර්මාණය කරයි «name»: «cni0»
, එය වින්යාසයෙහි දක්වා ඇත. එවිට සෑම පොඩ් එකකටම වෙත් යුගලයක් නිර්මාණය වේ. එහි එක් කෙළවරක් බහාලුම් ජාල නාම අවකාශයට සම්බන්ධ කර ඇත, අනෙක සත්කාරක ජාලයේ ලිනක්ස් පාලමෙහි ඇතුළත් වේ.
veth යුගලය පිහිටුවීම අවසන් වූ පසු, Bridge ප්ලගිනය සත්කාරක-දේශීය IPAM CNI ප්ලගිනය අමතයි. IPAM ප්ලගින වර්ගය Flannel CNI ප්ලගිනය ඇමතීමට CRI ප්ලගිනය භාවිතා කරන CNI වින්යාසය තුළ වින්යාසගත කළ හැක.
සත්කාරක-දේශීය IPAM CNI ප්ලගීන
පාලම CNI ඇමතුම්
{
"name": "cni0",
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24",
"dataDir": "/var/lib/cni/networks"
}
}
සත්කාරක-දේශීය IPAM ප්ලගිනය (IP Aඇඳුම් පැළඳුම් Mකළමනාකරණය - IP ලිපින කළමනාකරණය) උපජාලයෙන් කන්ටේනරය සඳහා IP ලිපිනය ආපසු ලබා දෙන අතර කොටසෙහි සඳහන් කර ඇති නාමාවලියෙහි ධාරකයෙහි වෙන් කළ IP ගබඩා කරයි dataDir
- /var/lib/cni/networks/<network-name=cni0>/<ip>
. මෙම ගොනුවේ මෙම IP ලිපිනය පවරන ලද බහාලුම් ID අඩංගු වේ.
සත්කාරක-දේශීය IPAM ප්ලගිනය ඇමතීමේදී, එය පහත දත්ත ලබා දෙයි:
{
"ip4": {
"ip": "10.244.4.2",
"gateway": "10.244.4.3"
},
"dns": {}
}
සාරාංශය
Kube-controller-manager විසින් එක් එක් node එකට podCIDR එකක් පවරයි. එක් එක් නෝඩයේ කරල් වලට වෙන් කර ඇති podCIDR පරාසයේ ලිපින අවකාශයෙන් IP ලිපින ලැබේ. නෝඩ් වල podCIDR අතිච්ඡාදනය නොවන බැවින්, සියලුම කරල් වලට අනන්ය IP ලිපින ලැබේ.
Kubernetes පොකුරු පරිපාලක විසින් kubelet, බහාලුම් ධාවන කාලය, ජාල සැපයුම් නියෝජිතයා වින්යාස කර ස්ථාපනය කරයි, සහ CNI ප්ලගීන එක් එක් නෝඩයට පිටපත් කරයි. ආරම්භයේදී, ජාල සැපයුම් නියෝජිතයා CNI වින්යාසයක් ජනනය කරයි. පොඩ් එකක් නෝඩයකට සැලසුම් කර ඇති විට, එය සෑදීමට kubelet CRI ප්ලගිනය අමතයි. මීළඟට, කන්ටේනර්ඩ් භාවිතා කරන්නේ නම්, Containerd CRI ප්ලගිනය CNI වින්යාසයෙහි දක්වා ඇති CNI ප්ලගිනයට පොඩ් ජාලය වින්යාස කිරීමට අමතයි. එහි ප්රතිඵලයක් ලෙස පොඩ් එකට IP ලිපිනයක් ලැබේ.
මෙම සියලු අන්තර්ක්රියාවල සියුම් හා සූක්ෂ්මතා තේරුම් ගැනීමට මට යම් කාලයක් ගත විය. Kubernetes ක්රියා කරන ආකාරය වඩාත් හොඳින් තේරුම් ගැනීමට මෙම අත්දැකීම ඔබට උපකාර වනු ඇතැයි මම බලාපොරොත්තු වෙමි. මම යමක් වැරදියි නම්, කරුණාකර මාව සම්බන්ධ කරගන්න
යොමු
බහාලුම් සහ ජාලය
Flannel වැඩ කරන්නේ කෙසේද?
CRI සහ CNI
පරිවර්තකගෙන් PS
අපගේ බ්ලොග් අඩවියේ ද කියවන්න:
- «
Kubernetes හි ජාලකරණය සඳහා Calico: හැඳින්වීම සහ කුඩා අත්දැකීමක් »; - "Kubernetes හි ජාලකරණය සඳහා නිදර්ශන මාර්ගෝපදේශයක්":
කොටස් 1 සහ 2 (ජාල ආකෘතිය, ආවරණ ජාල) ,3 කොටස (සේවා සහ රථවාහන සැකසීම) ; - «
බහාලුම් ජාලකරණ අතුරුමුහුණත (CNI) - ජාල අතුරුමුහුණත සහ ලිනක්ස් බහාලුම් සඳහා සම්මත ".
මූලාශ්රය: www.habr.com