ඉහළම 10 Kubernetes උපක්‍රම සහ ඉඟි

ඉහළම 10 Kubernetes උපක්‍රම සහ ඉඟි

අන්තර්ජාලයේ බොහෝ යොමු සාහිත්‍ය ඇත, නමුත් සමහර විට සරලම උපදෙස් වඩාත්ම වටිනවා. කණ්ඩායම Mail.ru වෙතින් Kubernetes aaS පරිවර්තනය කර ඇත උපක්‍රම සහ ඉඟි දහයක තේරීමක්, ලිපියේ කතුවරයා Kubernetes සමඟ වැඩ කිරීමෙන් වසරකට පසුව එකතු කරන ලදී. ඉඟි වැදගත්කම අනුව වර්ග කර නැත, නමුත් සෑම කෙනෙකුම තමන්ටම ප්‍රයෝජනවත් යමක් සොයා ගනු ඇතැයි අපි සිතමු.

Kubernetes සමඟ වැඩ කිරීමට සරලම විධානය

ආරම්භ කිරීමට, සමහර විට Kubernetes සමඟ වැඩ කිරීමේදී සරලම හා වඩාත්ම ප්රයෝජනවත් ක්රියාව. පහත විධානය මඟින් විධානය සම්පූර්ණ කිරීම සක්‍රීය කරයි kubectl bash shell තුළ:

echo "source <(kubectl completion bash)" >> ~/.bashrc

ස්වයංක්‍රීයව පුරවන්න kubectl .bashrc ගොනුවට ලියා ඇති අතර කවචය ආරම්භ කරන සෑම අවස්ථාවකම ස්වයංක්‍රීයව සක්‍රිය වනු ඇත. මෙය දිගු විධාන සහ පරාමිති ටයිප් කිරීම වේගවත් කරයි all-namespaces. තව කියවන්න Kubernetes bash උදව්.

නාම අවකාශයක පෙරනිමි මතකය සහ CPU සීමාවන්

යෙදුම වැරදි ලෙස ලියා ඇත්නම්, උදාහරණයක් ලෙස, එය සෑම තත්පරයකම දත්ත සමුදායට නව සම්බන්ධතාවයක් විවෘත කරයි, නමුත් එය කිසි විටෙකත් වසා නොගනියි, එවිට පොකුරට මතක කාන්දුවක් ඇත. යෙදවීමේදී යෙදුමට මතක සීමාවක් නොමැති නම්, මෙය නෝඩය අසාර්ථක වීමට හේතු විය හැක.

මෙය වලක්වා ගැනීම සඳහා, Kubernetes ඔබට එක් නාම අවකාශයක් මත පෙරනිමි සීමා සැකසීමට ඉඩ දෙයි. ඒවා නිශ්චිත නාම අවකාශයක් සඳහා yaml ගොනුවේ ලියා ඇත. එවැනි ගොනුවක උදාහරණයක් මෙන්න:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

එවැනි අලයක් සාදා ඕනෑම නාම අවකාශයකට යොදන්න. උදාහරණයක් ලෙස, නාම අවකාශයට limit-example. දැන් මෙම නාම අවකාශයේ යොදවා ඇති ඕනෑම බහාලුමක් 512Mi සීමාවක් ඇත, මෙම බහාලුම සඳහා වෙනත් තනි සීමාවක් අතිරේකව සකසා නොමැති නම්.

Kubernetes හි පැරණි අනුවාදවල කසළ එකතු කිරීම

පෙරනිමියෙන් Kubelet කුණු එකතු කිරීම ආරම්භ කරයි var/lib/docker පවතින තැටි ඉඩෙන් 90% ක් අල්ලා ගනී. කෙසේ වෙතත්, මෙය විශිෂ්ටයි, කෙසේ වෙතත්, Kubernetes 1.7 තෙක් ගොනු පද්ධතියේ ගොනු ගණනට අනුරූප වන භාවිතා කරන ලද inode ගණනට පෙරනිමි සීමාවක් නොතිබුණි.

ඔබේ කන්ටේනරය විය හැකිය var/lib/docker තැටි ඉඩෙන් 50%ක් පමණක් භාවිතා කළ හැක, නමුත් inodes අවසන් විය හැක, එය කම්කරුවන්ට ගැටළු ඇති කරයි.

1.4 සිට 1.6 දක්වා වූ kubelet හි පැරණි අනුවාද වල ඔබට මෙම ධජය එක් කිරීමට සිදුවේ.

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

1.7 සහ පසු අනුවාද වල මෙම ධජය පෙරනිමියෙන් සකසා ඇත. කෙසේ වෙතත්, පෙර අනුවාදයන් inode සීමාව නිරීක්ෂණය නොකරයි.

Minikube... කුඩා නමුත් බලවත් දේශීය Kubernetes

Minikube යනු දේශීය Kubernetes පොකුරක් පවත්වාගෙන යාමට පහසුම ක්‍රමයයි. එය සරල විධානයකින් දියත් කර ඇත:

minikube start

මෙම විධානය ක්‍රියාත්මක කිරීමෙන් ඔබේ පරිගණකයේ සැබෑ Kubernetes පොකුරක් ක්‍රියාත්මක වේ.

ඉහළම 10 Kubernetes උපක්‍රම සහ ඉඟි
නිදර්ශන මූලාශ්රය

උපක්‍රමය නම් යෙදුම ගොඩනඟා එය එම පොකුරේ දේශීයව ධාවනය කරන්නේ කෙසේද යන්නයි. නිශ්චිතව උපදෙස් දී නොමැති නම්, ඩොකර් රූපය ගොඩනගනු ලබන්නේ ඔබේ පරිගණකයේ මිස පොකුරේ නොවේ.

රූපය දේශීය කුබර්නෙටස් පොකුරට තල්ලු කිරීමට ඩොකර්ට බල කිරීමට, ඩොකර් යන්ත්‍රයට පහත විධානය ලබා දේ:

eval $(minikube docker-env)

දැන් අපට දේශීය Kubernetes පොකුරක් මත යෙදුම් ගොඩනගා ගත හැක.

හැමෝටම kubectl ප්‍රවේශය දෙන්න එපා

මෙය පැහැදිලිව පෙනේ, නමුත් කණ්ඩායම් කිහිපයක් ඔවුන්ගේ යෙදුම් සඳහා එකම පොකුරක් භාවිතා කරන්නේ නම් (කුබර්නෙටස් නිර්මාණය කරන ලද්දේ එයයි), ඔබ සැමට පමණක් ලබා නොදිය යුතුය. kubectl. විධාන වෙන් කිරීම වඩා හොඳය, ඒ සෑම එකක්ම තමන්ගේම නාම අවකාශයක් ලබා දීම සහ RBAC ප්‍රතිපත්ති භාවිතයෙන් ප්‍රවේශය සීමා කිරීම.

එක් එක් පොඩ් සඳහා ප්‍රවේශ වීම, කියවීම, නිර්මාණය කිරීම, මකා දැමීම සහ අනෙකුත් මෙහෙයුම් සඳහා හිමිකම් පැවරීමෙන් ඔබට ව්‍යාකූල විය හැක. නමුත් ප්රධාන දෙය නම් රහස් වලට ප්රවේශය සීමා කිරීම, පරිපාලකයින්ට පමණක් ඉඩ ලබා දීමයි. මේ ආකාරයට අපි පොකුර පරිපාලනය කළ හැකි අය සහ සරලව යෙදිය හැකි අය අතර වෙනස හඳුනා ගනිමු.

Pod Budgets කළමනාකරණය කරන්න

Kubernetes පොකුරක් තුළ යෙදුමක් සඳහා අක්‍රීය කාලයක් නොමැති බව සහතික කරන්නේ කෙසේද? PodDisruptionBudget සහ නැවතත් PodDisruptionBudget.

පොකුරු වරින් වර යාවත්කාලීන වන අතර නෝඩ් හිස් කරනු ලැබේ. කිසිවක් නිශ්චල නොවේ, යථාර්ථය එයයි. එක් අවස්ථාවකට වඩා ඇති සෑම යෙදවීමකටම PDB (PodDisruptionBudget) ඇතුළත් විය යුතුය. එය පොකුරට යොදන සරල yaml ගොනුවක් තුළ නිර්මාණය කර ඇත. විශේෂිත PDB හි ආවරණ කලාපය තීරණය කරනු ලබන්නේ ලේබල් තේරීම්කරුවන් විසිනි.

සටහන: PDB අයවැය සැලකිල්ලට ගනු ලබන්නේ අයවැය උල්ලංඝනය ආපසු හැරවිය හැකි විට පමණි (ස්වේච්ඡා බාධාව) දෘඩාංග අසාර්ථක වීම වැනි අවස්ථා වලදී, PDB ක්‍රියා නොකරනු ඇත.

උදාහරණ PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

ප්රධාන පරාමිතීන් දෙක වේ matchLabels и minAvailable. පළමු පරාමිතිය අයවැය අදාළ වන්නේ කුමන යෙදුම් සඳහාද යන්න සඳහන් කරයි. උදාහරණයක් ලෙස, මට ලේබල් සහිත යෙදවීම් තිබේ නම් app: app-a и app: app-b, එවිට මෙම PDB පළමු එකට පමණක් අදාළ වේ.

පරාමිතිය minAvailable නෝඩය හිස් කිරීමේදී (පිරිසිදු කිරීම) සැලකිල්ලට ගනී. උදාහරණයක් ලෙස, අපගේ උදාහරණයේ, හිස් කිරීමේදී, සියලු අවස්ථාවන් ඉවත් කරනු ලැබේ app: app-a, දෙකක් හැර.

මෙමගින් ඔබට ඕනෑම අවස්ථාවක යෙදුමේ අවස්ථා කීයක් ක්‍රියාත්මක විය යුතුද යන්න පාලනය කිරීමට ඉඩ සලසයි.

යෙදුම් සෞඛ්ය අධීක්ෂණය

එවැනි නිරීක්ෂණයක් ආකාර දෙකකින් කළ හැකිය: සූදානම හෝ සජීවී පරීක්ෂණ භාවිතා කිරීම.

පළමු පරීක්ෂණය (සූදානම) ගමනාගමනය ලබා ගැනීමට කන්ටේනරයේ සූදානම තීරණය කරයි.

දෙවන (සජීවී බව) කන්ටේනරය සෞඛ්ය සම්පන්නද නැතහොත් නැවත ආරම්භ කළ යුතුද යන්න පෙන්වයි.

අදාළ වින්‍යාසයන් යෙදවීම සඳහා yaml වෙත සරලව එකතු කරනු ලැබේ. එහිදී ඔබට කල් ඉකුත්වීම්, ප්‍රමාද වන වේලාවන් සහ නැවත අත්හදා බැලීම් ගණන නියම කළ හැක. ඔවුන් ගැන වැඩි විස්තර බලන්න Kubernetes ලියකියවිලි.

ටැග් සෑම තැනකම ඇත

Labels යනු Kubernetes හි මූලික සංකල්පවලින් එකකි. ඔවුන් වස්තූන් එකිනෙකා සමඟ නිදහසේ සන්නිවේදනය කිරීමට ඉඩ සලසයි, එසේම ලේබල මත පදනම්ව විමසුම් නිර්මාණය කරයි. Kubernetes හි, ඔබට සේවාදායකයා වෙත ගොස් විශේෂිත ටැග් සඳහා සිදුවීම් නැරඹීමට පවා හැකිය.

ඔබට ටැග් සමඟ ඕනෑම දෙයක් පාහේ කළ හැකිය, නමුත් හොඳ උදාහරණයක් වන්නේ එකම පොකුරේ වැඩසටහන් ක්‍රියාත්මක කිරීමට බහු පරිසරයන් නිර්මාණය කිරීමයි.

අපි හිතමු ඔබ ඒ සඳහා එකම පොකුර භාවිතා කරන බව dev и qa. මෙයින් අදහස් කරන්නේ ඔබට යෙදුමක් තිබිය හැකි බවයි app-a, පරිසර දෙකෙහිම එකවර වැඩ කිරීම qa и dev. මෙම අවස්ථාවෙහිදී, සුදුසු පරාමිතිය නියම කිරීමෙන් අපට විශේෂිත පරිසරයක යෙදුම් අවස්ථාවට වෙන වෙනම ප්‍රවේශ විය හැක. environment. උදාහරණයක් ලෙස app: app-a и environment: dev එක් පරිසරයක් සඳහා, සහ app: app-a и environment: qa දෙවෙනි එක සඳහා.

මෙය ඔබට යෙදුමේ අවස්ථා දෙකටම ප්‍රවේශ වීමට ඉඩ සලසයි, උදාහරණයක් ලෙස, එකවර පරීක්ෂණ පැවැත්වීම.

සංවිධානය වෙන්න

Kubernetes යනු ඉතා බලගතු පද්ධතියකි, නමුත් ඕනෑම පද්ධතියක් අවසානයේ බොහෝ ක්‍රියාවලීන් සමඟ අවුල් විය හැක. Kubelet ඔබ සඳහන් කරන සියලුම ක්‍රියාවලි සහ චෙක්පත් මෙන්ම එහිම ක්‍රියා කරයි.

ඇත්ත වශයෙන්ම, එක් අනාථ සේවාවක් පද්ධතිය මන්දගාමී නොකරනු ඇත, සහ Kubernetes නිර්මාණය කර ඇත්තේ බිම් මට්ටමේ සිට පරිමාණය කිරීමට ය. නමුත් එක් සේවාවක් වෙනුවට මිලියනයක් පෙනී සිටියහොත්, කුබෙල්ට් හුස්ම හිරවීමට පටන් ගනී.

කිසියම් හේතුවක් නිසා ඔබ යෙදවීමක් මකා දැමුවහොත් (කන්ටේනරය, රූපය, ඕනෑම දෙයක්), සම්පූර්ණ පිරිසිදු කිරීමක් කිරීමට වග බලා ගන්න.

ගෝ හමුවන්න

අපි අවසාන වශයෙන් ප්‍රධාන උපදෙස සුරැකුවෙමු. Go ක්‍රමලේඛන භාෂාව ඉගෙන ගන්න.

Kubernetes Go හි සංවර්ධනය කර ඇත, සියලුම දිගු Go හි ලියා ඇත, සහ client-go සේවාදායක පුස්තකාලය ද නිල වශයෙන් සහාය දක්වයි.

එය විවිධ හා රසවත් දේවල් සඳහා භාවිතා කළ හැකිය. උදාහරණයක් ලෙස, Kubernetes පද්ධතිය ඔබේ රසය සඳහා පුළුල් කිරීමට. එබැවින්, ඔබට දත්ත රැස් කිරීමට, යෙදුම් යෙදවීමට හෝ බහාලුම් පිරිසිදු කිරීමට ඔබේම වැඩසටහන් භාවිතා කළ හැකිය.

Go ක්‍රමලේඛන භාෂාව ඉගෙනීම සහ client-go ප්‍රගුණ කිරීම ඔබට නව Kubernetes පරිශීලකයින්ට දිය හැකි වැදගත්ම උපදෙස විය හැක.

Mail.ru Cloud Solutions හි සහාය ඇතිව පරිවර්තනය කර ඇත

වෙන මොනවද කියවන්න:

  1. Kubernetes හි ස්වයං පරිමාණය කිරීමේ මට්ටම් තුනක් සහ ඒවා ඵලදායී ලෙස භාවිතා කරන්නේ කෙසේද.
  2. Kubernetes සේවක නෝඩ්: බොහෝ කුඩා හෝ විශාල කිහිපයක්?
  3. 25 Kubernetes යෙදවීම සහ කළමනාකරණය සඳහා ප්රයෝජනවත් මෙවලම්.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න