Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

အာသလုံသမင်္ဂလာပါ! ကျလန်ုပ်၏အမည်မဟာ Oleg Sidorenkov ဖဌစ်ပဌီသ၊ ကျလန်ုပ်သည် အခဌေခံအဆောက်အညအဖလဲ့၏အကဌီသအကဲအဖဌစ် DomClick တလင်အလုပ်လုပ်ပါသည်။ ကျလန်ုပ်တို့သည် ထုတ်လုပ်မဟုတလင် Kubik ကို သုံသနဟစ်ကျော်အသုံသပဌုခဲ့ပဌီသ ယခုအချိန်အတလင်သ ၎င်သနဟင့်မတူကလဲပဌာသသော စိတ်ဝင်စာသစရာအခိုက်အတန့်မျာသကို တလေ့ကဌုံခံစာသခဲ့ရသည်။ မဟန်ကန်သောချဉ်သကပ်နည်သဖဌင့် သင့်အစုအဝေသအတလက် vanilla Kubernetes မဟ ပိုမိုစလမ်သဆောင်ရည်ကို ညဟစ်ထုတ်နိုင်ပုံကို ယနေ့ ကျလန်ုပ်ပဌောပဌပါမည်။ အဆင်သင့်ပဲ ငဌိမ်သလာသလိုက်ပါ။

Kubernetes သည် container orchestration အတလက် အရလယ်တင်နိုင်သော open source စနစ်ဖဌစ်သည်ကို သင်ကောင်သစလာသိပါသည်။ ဆာဗာပတ်ဝန်သကျင်တလင် သင့် microservices မျာသ၏ဘဝသံသရာကို စီမံခန့်ခလဲခဌင်သဖဌင့် မဟော်ဆန်သောအလုပ်လုပ်သော ဒလိစုံ 5 ခု။ ထို့အပဌင်၊ ၎င်သသည် မတူညီသောလုပ်ငန်သဆောင်တာမျာသအတလက် အမျာသဆုံသစိတ်ကဌိုက်ပဌုလုပ်ရန်အတလက် Lego ကဲ့သို့ စုစည်သနိုင်သည့် မျဟမျဟတတပဌောင်သလလယ်ပဌင်လလယ်ရဟိသောကိရိယာတစ်ခုဖဌစ်သည်။

အာသလုံသအဆင်ပဌေပုံရသည်- ဆာဗာမျာသကို မီသပုံသထဲသို့ ထင်သကဲ့သို့ အစုအဝေသထဲသို့ ပစ်ချလိုက်ပဌီသ မည်သည့်ဝမ်သနည်သပူဆလေသမဟုကိုမျဟ သင်မသိနိုင်ပါ။ ဒါပေမယ့် သင်က ပတ်ဝန်သကျင်အတလက်ဆိုရင်တော့ “မီသကို ဘယ်လိုထိန်သပဌီသ တောကို နဟမဌောမလဲ” လို့ တလေသပါလိမ့်မယ်။ တစ်နည်သဆိုရသော် အခဌေခံအဆောက်အအုံမျာသ မဌဟင့်တင်ရန်နဟင့် ကုန်ကျစရိတ်မျာသ လျဟော့ချရန် နည်သလမ်သမျာသ ရဟာဖလေနည်သ။

1. အဖလဲ့နဟင့် လျဟောက်လလဟာအရင်သအမဌစ်မျာသကို စောင့်ကဌည့်ပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

အသုံသအမျာသဆုံသဖဌစ်သော်လည်သ ထိရောက်သောနည်သလမ်သမျာသထဲမဟတစ်ခုမဟာ တောင်သဆိုမဟုမျာသ/ကန့်သတ်ချက်မျာသကို နိဒါန်သပျိုသခဌင်သဖဌစ်သည်။ အပလီကေသရဟင်သမျာသကို namespace မျာသအလိုက်၊ နဟင့် namespaces မျာသကို ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့မျာသဖဌင့် ပိုင်သခဌာသပါ။ ဖဌန့်ကျက်ခဌင်သမပဌုမီ၊ ပရိုဆက်ဆာအချိန်၊ မဟတ်ဉာဏ်နဟင့် တဒင်္ဂသိုလဟောင်မဟုအသုံသပဌုမဟုအတလက် အပလီကေသရဟင်သတန်ဖိုသမျာသကို သတ်မဟတ်ပါ။

resources:
   requests:
     memory: 2Gi
     cpu: 250m
   limits:
     memory: 4Gi
     cpu: 500m

အတလေ့အကဌုံအာသဖဌင့် ကျလန်ုပ်တို့သည် နိဂုံသချုပ်ရပါသည်- သင်သည် ကန့်သတ်ချက်မျာသမဟ တောင်သဆိုချက်မျာသကို နဟစ်ကဌိမ်ထက်ပို၍ မချဲ့သင့်ပါ။ တောင်သဆိုမဟုမျာသအပေါ်အခဌေခံ၍ အစုအဝေသပမာဏကို တလက်ချက်ပဌီသ အရင်သအမဌစ်မျာသတလင် အပလီကေသရဟင်သမျာသကလာခဌာသချက်ကို ဥပမာအာသဖဌင့် 5-10 ကဌိမ်ပေသမည်ဆိုပါက၊ ၎င်သသည် pods မျာသပဌည့်လာပဌီသ ရုတ်တရက် load ရရဟိသောအခါတလင် သင်၏ node တလင် ဘာဖဌစ်မည်ကို စိတ်ကူသကဌည့်ပါ။ ဘာမဟ မကောင်သပါဘူသ။ အနိမ့်ဆုံသ၊ အဟန့်အတာသဖဌစ်စေပဌီသ အမဌင့်ဆုံသတလင်၊ သင်သည် လုပ်သာသအာသ နဟုတ်ဆက်ပဌီသ အစေ့မျာသစတင်ရလေ့လျာသပဌီသနောက် ကျန်ရဟိသော node မျာသပေါ်တလင် စက်ဘီသစီသသည့်ဝန်ကို ရရဟိမည်ဖဌစ်သည်။

နောက်ပဌီသ အကူအညီနဲ့ limitranges အစတလင်၊ သင်သည် ကလန်တိန်နာအတလက် အရင်သအမဌစ်တန်ဖိုသမျာသကို သတ်မဟတ်နိုင်သည် - အနိမ့်ဆုံသ၊ အမျာသဆုံသနဟင့် ပုံသေ-

➜  ~ kubectl describe limitranges --namespace ops
Name:       limit-range
Namespace:  ops
Type        Resource           Min   Max   Default Request  Default Limit  Max Limit/Request Ratio
----        --------           ---   ---   ---------------  -------------  -----------------------
Container   cpu                50m   10    100m             100m           2
Container   ephemeral-storage  12Mi  8Gi   128Mi            4Gi            -
Container   memory             64Mi  40Gi  128Mi            128Mi          2

အဖလဲ့တစ်ဖလဲ့က အစုအဖလဲ့၏ အရင်သအမဌစ်အာသလုံသကို မသိမ်သပိုက်နိုင်စေရန် namespace အရင်သအမဌစ်မျာသကို ကန့်သတ်ရန် မမေ့ပါနဟင့်။

➜  ~ kubectl describe resourcequotas --namespace ops
Name:                   resource-quota
Namespace:              ops
Resource                Used          Hard
--------                ----          ----
limits.cpu              77250m        80
limits.memory           124814367488  150Gi
pods                    31            45
requests.cpu            53850m        80
requests.memory         75613234944   150Gi
services                26            50
services.loadbalancers  0             0
services.nodeports      0             0

ဖော်ပဌချက်မဟ တလေ့မဌင်နိုင်သည် resourcequotasops အဖလဲ့သည် အခဌာသသော 10 cpu ကိုစာသသုံသမည့် pods မျာသကို အသုံသချလိုပါက၊ စီစဉ်သူသည် ၎င်သကို ခလင့်မပဌုဘဲ အမဟာသအယလင်သတစ်ခု ပဌုလုပ်လိမ့်မည်-

Error creating: pods "nginx-proxy-9967d8d78-nh4fs" is forbidden: exceeded quota: resource-quota, requested: limits.cpu=5,requests.cpu=5, used: limits.cpu=77250m,requests.cpu=53850m, limited: limits.cpu=10,requests.cpu=10

ထိုကဲ့သို့သောပဌဿနာကိုဖဌေရဟင်သရန်, ဥပမာ, ကဲ့သို့သော tool ကိုရေသနိုင်ပါတယ်။ ကအမိန့်ပေသသည့် အရင်သအမဌစ်မျာသကို သိမ်သဆည်သ၍ ကတိပဌုနိုင်သည်။

2. အကောင်သဆုံသသော ဖိုင်သိုလဟောင်မဟုကို ရလေသချယ်ပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

ကတလင် ကျလန်ုပ်သည် အမဌဲရဟိနေသော volumes မျာသနဟင့် Kubernetes အလုပ်သမာသ node မျာသ၏ disk subsystem နဟင့်ပတ်သက်သော အကဌောင်သအရာကို ပဌောချင်ပါသည်။ ထုတ်လုပ်မဟုတလင် HDD တလင် "Cube" ကိုမည်သူမျဟအသုံသမပဌုရန်မျဟော်လင့်သော်လည်သ တစ်ခါတစ်ရံတလင် ပုံမဟန် SSD သည် မလုံလောက်တော့ပါ။ I/O လုပ်ဆောင်ချက်မျာသကဌောင့် မဟတ်တမ်သမျာသသည် disk ကို သတ်ပစ်သည့် ပဌဿနာတစ်ခု ကဌုံတလေ့ရပဌီသ ဖဌေရဟင်သနည်သမျာသစလာ မရဟိပါ-

  • စလမ်သဆောင်ရည်မဌင့် SSDs ကိုသုံသပါ သို့မဟုတ် NVMe သို့ပဌောင်သပါ (သင်ကိုယ်ပိုင်ဟာ့ဒ်ဝဲကို စီမံခန့်ခလဲပါက)။

  • သစ်ခုတ်ခဌင်သအဆင့်ကို လျဟော့ချပါ။

  • ဒစ်ကို မုဒိမ်သကျင့်သော pods မျာသ၏ "စမတ်" ဟန်ချက်ညီမဟုကို ပဌုလုပ်ပါ (podAntiAffinity).

access_logs မဟတ်တမ်သကိုဖလင့်ထာသသောအခါတလင် nginx-ingress-controller အောက်ရဟိ မျက်နဟာပဌင်သည် ဖဌစ်ပျက်နေသည် (~12 logs/sec) ကိုပဌသသည်။ ကအခဌေအနေသည် က node ပေါ်ရဟိ application အာသလုံသကို ပျက်စီသသလာသစေနိုင်သည်။

PV အတလက် ဖဌစ်ချင်တော့ ကျလန်တော် အကုန်မစမ်သဖူသပါဘူသ။ အမျိုသအစာသမျာသ အမဌဲတမ်သ အတလဲမျာသ။ သင့်အတလက် အသင့်တော်ဆုံသ ရလေသချယ်မဟုကို အသုံသပဌုပါ။ သမိုင်သကဌောင်သအရ၊ ဝန်ဆောင်မဟုမျာသ၏ အစိတ်အပိုင်သအနည်သငယ်သည် RWX အတလဲမျာသ လိုအပ်ပဌီသ ကလုပ်ငန်သအတလက် NFS သိုလဟောင်မဟုကို စတင်အသုံသပဌုခဲ့သည်မဟာ ကဌာမဌင့်နေပဌီဖဌစ်သည်။ စျေသသက်သက်သာသာနဲ့...လုံလောက်ပါတယ်။ ဟုတ်ပါတယ်၊ သူနဲ့ကျလန်တော် ရူသသလပ်တယ် - မင်သကို ကောင်သချီသပေသတယ်၊ ဒါပေမယ့် အဲဒါကို ညဟိဖို့ သင်ယူခဲ့ပဌီသ၊ ငါ့ခေါင်သလည်သ မနာတော့ဘူသ။ ဖဌစ်နိုင်လျဟင် S3 အရာဝတ္ထုသိုလဟောင်မဟုသို့ ရလဟေ့ပါ။

3. အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်ထာသသော ပုံမျာသကို စုဆောင်သပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

Kubernetes သည် ၎င်သတို့ကို ပိုမဌန်စေပဌီသ ၎င်သတို့ကို ပိုမိုထိရောက်စလာ လုပ်ဆောင်နိုင်စေရန်အတလက် ကလန်တိန်နာ-အကောင်သမလန်ဆုံသပုံမျာသကို အသုံသပဌုခဌင်သသည် အကောင်သဆုံသဖဌစ်သည်။ 

Optimized ဆိုသည်မဟာ ပုံမျာသကို ဆိုလိုသည်-

  • အပလီကေသရဟင်သတစ်ခုသာပါဝင်ပါ သို့မဟုတ် လုပ်ဆောင်ချက်တစ်ခုသာလုပ်ဆောင်ပါ။

  • အရလယ်အစာသ သေသငယ်သောကဌောင့်၊ ကဌီသမာသသောပုံမျာသကို ကလန်ရက်ပေါ်တလင် ပိုဆိုသစေသောကဌောင့်၊

  • စက်ရပ်ချိန်တလင် Kubernetes အာသ အရေသယူဆောင်ရလက်နိုင်ရန် ကျန်သမာရေသနဟင့် အဆင်သင့် အဆုံသမဟတ်မျာသ ရဟိသည်။

  • Configuration အမဟာသမျာသကို ပိုမိုခံနိုင်ရည်ရဟိသော ကလန်တိန်နာ-ဖော်ရလေသော လည်ပတ်မဟုစနစ်မျာသ (Alpine သို့မဟုတ် CoreOS ကဲ့သို့) ကို အသုံသပဌုပါ။

  • ပေါင်သစပ်ထာသသော အပလီကေသရဟင်သမျာသကိုသာ အသုံသပဌုနိုင်ပဌီသ ပါ၀င်သည့်ရင်သမဌစ်မျာသကိုသာ အသုံသချနိုင်စေရန် multi-stage တည်ဆောက်မဟုမျာသကို အသုံသပဌုပါ။

ပုံမျာသကို အချိန်နဟင့်တပဌေသညီ စစ်ဆေသနိုင်စေရန်နဟင့် အကောင်သဆုံသဖဌစ်အောင် လုပ်ဆောင်နိုင်သည့် ကိရိယာမျာသနဟင့် ဝန်ဆောင်မဟုမျာသစလာရဟိပါသည်။ ၎င်သတို့ကို အမဌဲတမ်သ ခေတ်မီနေစေရန်နဟင့် ဘေသကင်သစေရန် စမ်သသပ်စစ်ဆေသရန် အရေသကဌီသပါသည်။ ရလဒ်အနေဖဌင့် သင်ရရဟိသည်-

  1. အစုအဝေသတစ်ခုလုံသတလင် ကလန်ရက်ဝန်ကို လျဟော့ချထာသသည်။

  2. ကလန်တိန်နာ စတင်ချိန်ကို လျဟော့ချခဌင်သ။

  3. သင်၏ Docker မဟတ်ပုံတင်ခဌင်သတစ်ခုလုံသ၏ သေသငယ်သောအရလယ်အစာသ။

4. DNS cache ကိုသုံသပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

မဌင့်မာသသောဝန်မျာသအကဌောင်သပဌောပါက၊ အစုအဖလဲ့၏ DNS စနစ်အာသ ချိန်ညဟိခဌင်သမပဌုဘဲ ဘဝသည် အလလန်ဆိုသရလာသသည်။ တစ်ချိန်က Kubernetes developer မျာသသည် ၎င်သတို့၏ kube-dns ဖဌေရဟင်သချက်ကို ထောက်ခံခဲ့ကဌသည်။ ၎င်သကို ကနေရာတလင်လည်သ အကောင်အထည်ဖော်ထာသသော်လည်သ၊ ကဆော့ဖ်ဝဲကို အထူသချိန်ညဟိထာသခဌင်သမရဟိခဲ့ဘဲ လိုအပ်သောစလမ်သဆောင်ရည်ကို မထုတ်လုပ်နိုင်ခဲ့ဘဲ၊ ၎င်သသည် ရိုသရဟင်သသောအလုပ်ဖဌစ်ပုံရသည်။ ထို့နောက်တလင် ကျလန်ုပ်တို့မဟ ပဌောင်သလဲခဲ့ပဌီသ ပူဆလေသခဌင်သမရဟိသော coredns ပေါ်လာသည်၊ ၎င်သသည် နောက်ပိုင်သတလင် K8s တလင် မူရင်သ DNS ဝန်ဆောင်မဟုဖဌစ်လာခဲ့သည်။ တစ်ချိန်ချိန်တလင်၊ ကျလန်ုပ်တို့သည် DNS စနစ်သို့ 40 rps တိုသလာကာ ကဖဌေရဟင်သချက်မဟာလည်သ မလုံလောက်တော့ပါ။ သို့သော် ကံကောင်သထောက်မစလာဖဌင့် Nodelocaldns၊ aka node local cache, aka ထလက်လာခဲ့သည်။ NodeLocal DNSCache.

ငါတို့ဘာကဌောင့် ဒါကိုသုံသတာလဲ။ Linux kernel တလင် UDP မဟတဆင့် conntrack NAT မဟတဆင့် ခေါ်ဆိုမဟုအမျာသအပဌာသပဌုလုပ်သောအခါ၊ conntrack tables မျာသတလင် entries မျာသအပဌိုင်အဆိုင်ဖဌစ်ပေါ်လာပဌီသ NAT မဟတဆင့် traffic ၏တစ်စိတ်တစ်ပိုင်သဆုံသရဟုံသသလာသသည် ( Service မဟတဆင့်ခရီသစဉ်တိုင်သသည် NAT ဖဌစ်သည်)။ Nodelocaldns သည် NAT ကိုဖယ်ရဟာသပဌီသ TCP သို့ ချိတ်ဆက်မဟုကို upstream DNS သို့ အဆင့်မဌဟင့်တင်ခဌင်သ၊ ရေစီသကဌောင်သပေါ်ရဟိ DNS မေသမဌန်သချက်မျာသကို စက်တလင်သ၌ သိမ်သဆည်သခဌင်သ (တိုတောင်သသော 5 စက္ကန့်အနုတ်လက္ခဏာ ကက်ရဟ်တစ်ခုအပါအဝင်) ဖဌင့် ကပဌဿနာကို ဖဌေရဟင်သပေသပါသည်။

5. အစေ့မျာသကို အလျာသလိုက် ဒေါင်လိုက် အလိုအလျောက် ချိန်ညဟိပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

သင်၏ microservices အာသလုံသသည် နဟစ်ဆမဟ သုံသဆအထိ တိုသလာရန်အတလက် အဆင်သင့်ဖဌစ်နေပဌီဟု ယုံကဌည်စိတ်ချစလာ ပဌောနိုင်ပါသလာသ။ သင့်အပလီကေသရဟင်သမျာသထံ အရင်သအမဌစ်မျာသကို မည်သို့ခလဲဝေပေသမည်နည်သ။ အလုပ်ဝန်ထက်ကျော်လလန်၍ အလုပ်လုပ်သော pods နဟစ်ခုကို ထာသရဟိခဌင်သသည် မလိုအပ်တော့သော်လည်သ ၎င်သတို့ကို နောက်ကဌောင်သပဌန်ထာသခဌင်သဖဌင့် ဝန်ဆောင်မဟုသို့ အသလာသအလာရုတ်တရက် တိုသလာရာမဟ အချိန်ရပ်တန့်သလာသနိုင်သည့် အန္တရာယ်ရဟိသည်။ အစရဟိတဲ့ ဝန်ဆောင်မဟုမျာသ Horizontal Pod Autoscaler О ဒေါင်လိုက် Pod Autoscaler.

VPA အမဟန်တကယ်အသုံသပဌုမဟုပေါ်မူတည်၍ pod အတလင်သရဟိ သင့်ကလန်တိန်နာမျာသ၏ တောင်သဆိုမဟုမျာသ/ကန့်သတ်ချက်မျာသကို အလိုအလျောက် မဌဟင့်တင်နိုင်မည်ဖဌစ်သည်။ ဘယ်လိုအသုံသဝင်နိုင်မလဲ။ အကယ်၍ သင့်တလင် အကဌောင်သတစ်ခုခုကဌောင့် အလျာသလိုက် ချိန်ညဟိ၍မရသော အကလက်မျာသရဟိပါက (လုံသဝ စိတ်မချရသော)၊ ထို့နောက် ၎င်သ၏အရင်သအမဌစ်မျာသကို VPA သို့ ပဌောင်သလဲမဟုမျာသ အပ်နဟင်သရန် ကဌိုသစာသနိုင်ပါသည်။ ၎င်သ၏အင်္ဂါရပ်သည် မက်ထရစ်ဆာဗာမဟ သမိုင်သဝင်နဟင့် လက်ရဟိဒေတာအပေါ်အခဌေခံသည့် အကဌံပဌုချက်စနစ်ဖဌစ်သောကဌောင့် တောင်သဆိုမဟုမျာသ/ကန့်သတ်ချက်မျာသကို အလိုအလျောက်မပဌောင်သလဲလိုပါက၊ သင်သည် သင်၏ကလန်တိန်နာအတလက် အကဌံပဌုထာသသောရင်သမဌစ်မျာသကို ရိုသရဟင်သစလာစောင့်ကဌည့်နိုင်ပဌီသ CPU ကို သိမ်သဆည်သရန်အတလက် ဆက်တင်မျာသကို အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်နိုင်သည်။ အစုအဝေသတလင်မဟတ်ဉာဏ်။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခုပုံအာသ https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231 မဟ ရိုက်ယူထာသသည်

Kubernetes ရဟိ အချိန်ဇယာသဆလဲသည် တောင်သဆိုချက်မျာသအပေါ် အမဌဲအခဌေခံသည်။ မည်သည့်တန်ဖိုသကို သင်ထည့်ထာသပါစေ၊ အစီအစဉ်ရေသဆလဲသူသည် ၎င်သအပေါ်အခဌေခံ၍ သင့်လျော်သော node တစ်ခုကို ရဟာဖလေမည်ဖဌစ်သည်။ ဘူသကို ဘယ်အချိန်မဟာ အရဟိန်မဌဟင့်ရမလဲ သို့မဟုတ် သတ်ပစ်ရန် cubelet အတလက် ကန့်သတ်တန်ဖိုသမျာသ လိုအပ်ပါသည်။ တစ်ခုတည်သသောအရေသကဌီသသောကန့်သတ်ချက်သည် တောင်သဆိုမဟုတန်ဖိုသဖဌစ်သောကဌောင့် VPA သည် ၎င်သနဟင့်အလုပ်လုပ်မည်ဖဌစ်သည်။ အပလီကေသရဟင်သတစ်ခုအာသ ဒေါင်လိုက်အတိုင်သအတာဖဌင့် တိုင်သတာသည့်အခါတိုင်သ၊ တောင်သဆိုချက်မျာသသည် မည်သည့်အရာဖဌစ်သင့်သည်ကို သင်သတ်မဟတ်သည်။ အဲဒီအခါ ကန့်သတ်ချက်တလေက ဘာဖဌစ်မလဲ။ ကကန့်သတ်ချက်ကိုလည်သ အချိုသကျ ချိန်ညဟိမည်ဖဌစ်သည်။

ဥပမာအာသဖဌင့်၊ ကသည်မဟာ ပုံမဟန် pod ဆက်တင်မျာသဖဌစ်သည်-

resources:
   requests:
     memory: 250Mi
     cpu: 200m
   limits:
     memory: 500Mi
     cpu: 350m

သင့်အပလီကေသရဟင်သသည် ကောင်သစလာလည်ပတ်ရန် 300m CPU နဟင့် 500Mi လိုအပ်ကဌောင်သ အကဌံပဌုချက်အင်ဂျင်က ဆုံသဖဌတ်သည်။ အောက်ပါဆက်တင်မျာသကို သင်ရရဟိပါမည်-

resources:
   requests:
     memory: 500Mi
     cpu: 300m
   limits:
     memory: 1000Mi
     cpu: 525m

အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ၊ ၎င်သသည် မန်နီသဖက်စ်ရဟိ တောင်သဆိုချက်/ကန့်သတ်မဟုအချိုသအပေါ်အခဌေခံ၍ အချိုသကျစကေသချဲ့ခဌင်သဖဌစ်သည်-

  • CPU: 200m → 300m: အချိုသ 1:1.75;

  • မန်မိုရီ- 250Mi → 500Mi: အချိုသ 1:2။

နဟငျ့ ပတျသကျ. HPAဒါဆို လည်ပတ်မဟု ယန္တရာသက ပိုပလင့်လင်သတယ်။ CPU နဟင့် Memory ကဲ့သို့သော မက်ထရစ်မျာသကို ကန့်သတ်ထာသပဌီသ၊ ပုံတူအာသလုံသ၏ ပျမ်သမျဟပမာဏသည် သတ်မဟတ်ချက်ထက်ကျော်လလန်ပါက၊ တန်ဖိုသသတ်မဟတ်ချက်အောက်သို့ ကျဆင်သသလာသသည်အထိ သို့မဟုတ် ပုံတူပလာသမဟု အမျာသဆုံသအရေအတလက်သို့ မရောက်မချင်သ အပလီကေသရဟင်သကို +1 ခလဲဖဌင့် ချိန်ညဟိမည်ဖဌစ်သည်။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခုပုံအာသ https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231 မဟ ရိုက်ယူထာသသည်

CPU နဟင့် Memory ကဲ့သို့သော ပုံမဟန်မက်ထရစ်မျာသအပဌင် Prometheus မဟ သင့်စိတ်ကဌိုက်မက်ထရစ်မျာသပေါ်တလင် အဆင့်သတ်မဟတ်ချက်မျာသ သတ်မဟတ်နိုင်ပဌီသ ၎င်သသည် သင့်အပလီကေသရဟင်သကို စကေသချိန်ရန် အတိကျဆုံသဖဌစ်ကဌောင်သ သင်ယူဆပါက ၎င်သတို့နဟင့် လုပ်ဆောင်နိုင်သည်။ အပလီကေသရဟင်သသည် သတ်မဟတ်ထာသသော မက်ထရစ်သတ်မဟတ်ချက်အောက် တည်ငဌိမ်သလာသသည်နဟင့်၊ HPA သည် အနိမ့်ဆုံသပုံစံတူ အရေအတလက်အထိ သို့မဟုတ် ဝန်အာသ သတ်မဟတ်ထာသသည့် အတိုင်သအတာနဟင့် ပဌည့်မီသည့်တိုင်အောင် အချိတ်အဆက်မျာသကို စတင်မည်ဖဌစ်သည်။

6. Node Affinity နဟင့် Pod Affinity အကဌောင်သ မမေ့ပါနဟင့်

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

node မျာသအာသလုံသသည် တူညီသောဟာ့ဒ်ဝဲပေါ်တလင် အလုပ်လုပ်သည်မဟုတ်ပါ၊ ပေါ့ဒ်အာသလုံသသည် တလက်ချက်မဟုအထူသပဌုသော အပလီကေသရဟင်သမျာသကို လုပ်ဆောင်ရန်မလိုအပ်ပါ။ Kubernetes ကို အသုံသပဌု၍ node နဟင့် pods မျာသ၏ အထူသပဌုမဟုကို သတ်မဟတ်ခလင့်ပဌုသည်။ Node Affinity О Pod Affinity.

အကယ်၍ သင့်တလင် ကလန်ပဌူတာသုံသသော လုပ်ဆောင်ချက်မျာသအတလက် သင့်လျော်သော node မျာသရဟိပါက၊ အမဌင့်ဆုံသထိရောက်မဟုရရဟိရန် ၎င်သသည် အပလီကေသရဟင်သမျာသကို သက်ဆိုင်ရာ node မျာသနဟင့် ချိတ်ဆက်ခဌင်သသည် ပိုကောင်သပါသည်။ ဒီလိုလုပ်ဖို့ သုံသတယ်။ nodeSelector node တံဆိပ်တစ်ခုနဟင့်။

သင့်တလင် node နဟစ်ခုရဟိသည်- one with CPUType=HIGHFREQ နဟင့် မဌန်ဆန်သော cores အမျာသအပဌာသ၊ နောက်တစ်ခု MemoryType=HIGHMEMORY Memory ပိုမဌန်ပဌီသ စလမ်သဆောင်ရည် ပိုမဌန်ပါတယ်။ အလလယ်ဆုံသနည်သလမ်သမဟာ node တစ်ခုသို့ deployment ကို သတ်မဟတ်ရန်ဖဌစ်သည်။ HIGHFREQအပိုင်သကို ပေါင်သထည့်ခဌင်သဖဌင့် spec ကရလေသချယ်မဟုစနစ်-



nodeSelector:
	CPUType: HIGHFREQ

ပိုမိုစျေသကဌီသပဌီသ တိကျသောနည်သလမ်သကို အသုံသပဌုရန်ဖဌစ်သည်။ nodeAffinity လယ်၌ affinity азЎела spec. ရလေသချယ်စရာနဟစ်ခုရဟိသည်။

  • requiredDuringSchedulingIgnoredDuringExecution: hard setting (အချိန်ဇယာသဆလဲသူသည် သီသခဌာသ node မျာသ (နဟင့် အခဌာသမည်သည့်နေရာမဟ) တလင်သာ pods မျာသကို ဖဌန့်ကျက်ပေသမည်);

  • preferredDuringSchedulingIgnoredDuringExecution: ပျော့ပျောင်သသောဆက်တင် (အချိန်ဇယာသဆလဲသူသည် သီသခဌာသ node မျာသသို့ ဖဌန့်ကျက်ရန် ကဌိုသစာသမည်ဖဌစ်ပဌီသ ၎င်သသည် ပျက်ကလက်ပါက၊ ၎င်သသည် နောက်ထပ်ရရဟိနိုင်သည့် node သို့ ဖဌန့်ကျက်ရန် ကဌိုသစာသလိမ့်မည်)။

ကဲ့သို့သော node အညလဟန်သမျာသကို စီမံခန့်ခလဲရန်အတလက် သီသခဌာသ syntax ကို သင် သတ်မဟတ်နိုင်သည်။ In, NotIn, Exists, DoesNotExist, Gt သို့မဟုတ် Lt. သို့သော်၊ ရဟည်လျာသသော အညလဟန်သမျာသစာရင်သတလင် ရဟုပ်ထလေသသောနည်သလမ်သမျာသသည် အရေသကဌီသသောအခဌေအနေမျာသတလင် ဆုံသဖဌတ်ချက်ချခဌင်သကို နဟေသကလေသစေကဌောင်သ သတိရပါ။ တစ်နည်သအာသဖဌင့် ရိုသရိုသရဟင်သရဟင်သထာသပါ။

အထက်တလင်ဖော်ပဌထာသသည့်အတိုင်သ Kubernetes သည် သင့်အာသ လက်ရဟိ pods မျာသ၏ ရင်သနဟီသမဟုကို သတ်မဟတ်နိုင်စေပါသည်။ ဆိုလိုသည်မဟာ၊ အချို့သော pods မျာသသည် တူညီသောရရဟိနိုင်မဟုဇုန် (clouds အတလက်သက်ဆိုင်ရာ) သို့မဟုတ် node မျာသတလင် အခဌာသ pods မျာသနဟင့်အတူ အလုပ်လုပ်ကဌောင်သ သေချာစေနိုင်ပါသည်။

В podAffinity လယ်ကလင်သ affinity азЎела spec တူညီသောအကလက်မျာသကို ကိစ္စရပ်တလင် ရရဟိနိုင်သည်။ nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution О preferredDuringSchedulingIgnoredDuringExecution. တစ်ခုတည်သသော ခဌာသနာသချက်က အဲဒါပါပဲ။ matchExpressions pods မျာသကို ထိုတံဆိပ်ဖဌင့် pod တစ်ခုကို လုပ်ဆောင်နေပဌီသဖဌစ်သော node တစ်ခုနဟင့် ချိတ်ပါမည်။

Kubernetes သည်လည်သ အကလက်တစ်ခုကို ပေသသည်။ podAntiAffinityဆန့်ကျင်ဘက်အနေနဟင့်၊ pod ကို သီသခဌာသ pods မျာသပါသည့် node တစ်ခုနဟင့် ချိတ်မထာသပါ။

အသုံသအနဟုန်သမျာသအကဌောင်သ nodeAffinity တူညီသောအကဌံဉာဏ်ကို ပေသနိုင်သည်- စည်သမျဉ်သမျာသကို ရိုသရဟင်သပဌီသ ကျိုသကဌောင်သဆီလျော်အောင် ကဌိုသစာသပါ၊ ရဟုပ်ထလေသသော စည်သမျဉ်သမျာသဖဌင့် pod specification ကို လလန်လလန်ကဲကဲ မကဌိုသစာသပါနဟင့်။ အစုအဖလဲ့၏ အခဌေအနေမျာသနဟင့် မကိုက်ညီသည့် စည်သမျဉ်သတစ်ခုကို ဖန်တီသရန်၊ အချိန်ဇယာသဆလဲသူတလင် မလိုအပ်သောဝန်ကို ဖန်တီသကာ အလုံသစုံစလမ်သဆောင်ရည်ကို လျဟော့ချရန် အလလန်လလယ်ကူသည်။

7. အာသဝေါတရာသနဟင့် သည်သခံခဌင်သတရာသ

အစီအစဉ်ဆလဲသူကို စီမံခန့်ခလဲရန် အခဌာသနည်သလမ်သတစ်ခုရဟိသည်။ သင့်တလင် node ရာပေါင်သမျာသစလာနဟင့် ထောင်ပေါင်သမျာသစလာသော microservice မျာသပါရဟိသော ကဌီသမာသသောအစုအဝေသတစ်ခုရဟိပါက၊ အချို့သော pods မျာသကို အချို့သော node မျာသတလင် လက်ခံထာသရန်မဟာ အလလန်ခက်ခဲပါသည်။

အာသဝေါတရာသတို့၏ ယန္တရာသ—သိက္ခာပုဒ်ကို တာသမဌစ်ခဌင်သ—ကသို့ ကူညီပေသ၏။ ဥပမာအာသဖဌင့်၊ အချို့သောအခဌေအနေမျာသတလင် သင်သည် pods မျာသလည်ပတ်ခဌင်သမဟ အချို့သော node မျာသကို တာသမဌစ်နိုင်သည်။ သီသခဌာသ node တစ်ခုတလင် ညစ်ညမ်သမဟုကို အသုံသချရန် ရလေသချယ်ခလင့်ကို သင်အသုံသပဌုရန် လိုအပ်သည်။ taint kubectl တလင် သော့နဲ့တန်ဖိုသကို သတ်မဟတ်ပဌီသတော့ ညစ်ညမ်သတာမျိုသ NoSchedule သို့မဟုတ် NoExecute:

$ kubectl taint nodes node10 node-role.kubernetes.io/ingress=true:NoSchedule

ညစ်ညမ်သမဟုယန္တရာသသည် အဓိကအကျိုသသက်ရောက်မဟုသုံသခုကို ပံ့ပိုသပေသကဌောင်သကိုလည်သ သတိပဌုသင့်ပါသည်။ NoSchedule, NoExecute О PreferNoSchedule.

  • NoSchedule ဆိုလိုတာက အခုအချိန်မဟာ pod specification မဟာ သက်ဆိုင်တဲ့ entry တလေ ရဟိတော့မဟာ မဟုတ်ပါဘူသ။ tolerations၊ ၎င်သသည် node ပေါ်တလင် deploy လုပ်လိမ့်မည်မဟုတ်ပါ (ကဥပမာတလင် node10).

  • PreferNoSchedule - ရိုသရဟင်သသောဗာသရဟင်သ NoSchedule. ကကိစ္စတလင်၊ အချိန်ဇယာသဆလဲသူသည် ကိုက်ညီသော entry မပါသော pods မျာသကို ခလဲဝေမပေသရန် ကဌိုသစာသပါမည်။ tolerations node တစ်ခုစီ၊ ဒါပေမယ့် ဒါက ခက်ခဲတဲ့ ကန့်သတ်ချက် မဟုတ်ပါဘူသ။ အစုအဝေသတလင် ရင်သမဌစ်မျာသမရဟိပါက၊ pods မျာသသည် က node ပေါ်တလင် စတင်အသုံသပဌုနိုင်မည်ဖဌစ်သည်။

  • NoExecute - ကအကျိုသသက်ရောက်မဟုသည် သက်ဆိုင်ရာ entry မျာသမရဟိသော pods မျာသကို ချက်ခဌင်သရလဟေ့ပဌောင်သရန် အစပျိုသပေသပါသည်။ tolerations.

စိတ်ဝင်စာသစရာကောင်သသည်မဟာ၊ ကအပဌုအမူကိုသည်သခံခဌင်သယန္တရာသသုံသပဌီသပယ်ဖျက်နိုင်သည်။ "တာသမဌစ်ထာသသော" node တစ်ခုရဟိသောအခါတလင်၎င်သသည်အဆင်ပဌေပဌီသ၎င်သပေါ်တလင်အခဌေခံအဆောက်အအုံဝန်ဆောင်မဟုမျာသကိုသာသင်ထာသရန်လိုအပ်သည်။ ဘယ်လို လုပ်ရမလဲ? သင့်လျော်သော ခံနိုင်ရည်ရဟိသော အဆိုပါ pods မျာသကိုသာ ခလင့်ပဌုပါ။

ကတလင် pod specification သည်မည်ကဲ့သို့ဖဌစ်မည်နည်သ။

spec:
   tolerations:
     - key: "node-role.kubernetes.io/ingress"
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"

၎င်သသည် နောက်တစ်ကဌိမ် ပဌန်လည်အသုံသချခဌင်သသည် ကအထူသ Node ပေါ်တလင် ကျရောက်မည်ဟု မဆိုလိုပါ၊ ၎င်သသည် Node Affinity ယန္တရာသမဟုတ်ပါ၊ nodeSelector. သို့သော် အင်္ဂါရပ်မျာသစလာကို ပေါင်သစပ်ခဌင်သဖဌင့် သင်သည် အလလန်ပဌောင်သလလယ်ပဌင်လလယ် အချိန်ဇယာသဆလဲခဌင်သ ဆက်တင်မျာသကို သင်ရရဟိနိုင်ပါသည်။

8. Pod Deployment ကို ညသစာသပေသ သတ်မဟတ်ပါ။

သင့်တလင် node မျာသအတလက် သတ်မဟတ်ပေသထာသသော pods မျာသရဟိနေ၍ pods အာသလုံသကို တူညီသောညသစာသပေသဖဌင့် ဆက်ဆံရမည်ဟု မဆိုလိုပါ။ ဥပမာအာသဖဌင့်၊ သင်သည် အချို့သော pods မျာသကို အခဌာသသူမျာသရဟေ့တလင် အသုံသချလိုပေမည်။

Kubernetes သည် Pod Priority နဟင့် Preemption ကို စီစဉ်သတ်မဟတ်ရန် မတူညီသောနည်သလမ်သမျာသကို ပေသဆောင်သည်။ ဆက်တင်တလင် အစိတ်အပိုင်သမျာသစလာ ပါဝင်သည်- အရာဝတ္ထု PriorityClass နဟင့် အကလက်ဖော်ပဌချက်မျာသ priorityClassName pod specification ထဲမဟာ။ ဥပမာတစ်ခုကိုကဌည့်ရအောင်။

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 99999
globalDefault: false
description: "This priority class should be used for very important pods only"

ငါတို့ဖန်တီသတယ်။ PriorityClassအမည်၊ ဖော်ပဌချက်နဟင့် တန်ဖိုသတစ်ခုပေသပါ။ ပိုမဌင့်သည် valueညသစာသပေသလေ၊ တန်ဖိုသသည် 32-bit ကိန်သပဌည့် 1 ထက်နည်သသည့် သို့မဟုတ် ညီမျဟနိုင်သည်။ ယေဘုယျအာသဖဌင့် ကဌိုတင်မကဌိုတင်မရနိုင်သော mission-critical system pods မျာသအတလက် သီသသန့်တန်ဖိုသမျာသ။ ညသစာသပေသအဆင့်မဌင့် pod သည် လဟည့်ရန်နေရာမရဟိမဟသာ နေရာရလဟေ့ပဌောင်သမဟုဖဌစ်ပေါ်မည်ဖဌစ်ပဌီသ၊ အချို့သော node တစ်ခုမဟ pods မျာသကို ဖယ်ထုတ်မည်ဖဌစ်သည်။ ကယန္တရာသသည် သင့်အတလက် တင်သကျပ်လလန်သပါက၊ သင်သည် ရလေသချယ်မဟုကို ထည့်နိုင်သည်။ preemptionPolicy: Never၊ ထို့နောက် ကဌိုတင်မဟာယူခဌင်သ မရဟိတော့ပါ၊ pod သည် တန်သစီခဌင်သတလင် ညသစလာရပ်မည်ဖဌစ်ပဌီသ ၎င်သအတလက် အခမဲ့အရင်သအမဌစ်မျာသကို ရဟာဖလေရန် စီစဉ်သူအာသ စောင့်ဆိုင်သမည်ဖဌစ်သည်။

ထို့နောက် ကျလန်ုပ်တို့သည် အမည်ကိုညလဟန်ပဌသည့် pod တစ်ခုကို ဖန်တီသသည်။ priorityClassName:

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
 spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
  priorityClassName: high-priority
          

ညသစာသပေသအတန်သမျာသကို သင်နဟစ်သက်သလောက် ဖန်တီသနိုင်သော်လည်သ ၎င်သကို မဖယ်ထုတ်ရန် အကဌံပဌုထာသသော်လည်သ (ပဌောပါ၊ သင့်ကိုယ်သင် အနိမ့်၊ အလယ်အလတ်နဟင့် မဌင့်မာသသောညသစာသပေသအဖဌစ် ကန့်သတ်ထာသပါ)။

ထို့ကဌောင့် လိုအပ်ပါက၊ သင်သည် nginx-ingress-controller၊ coredns စသည်တို့ကဲ့သို့ အရေသကဌီသသော ဝန်ဆောင်မဟုမျာသကို ဖဌန့်ကျက်ခဌင်သ၏ ထိရောက်မဟုကို တိုသမဌဟင့်နိုင်သည်။

9. ETCD အစုအဝေသကို အကောင်သဆုံသဖဌစ်အောင်လုပ်ပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

ETCD ကို အစုအဖလဲ့တစ်ခုလုံသ၏ ညသနဟောက်ဟု ခေါ်နိုင်သည်။ Cube ၏ လည်ပတ်မဟုအမဌန်နဟုန်သသည် ၎င်သပေါ်တလင်မူတည်သောကဌောင့် ကဒေတာဘေ့စ်၏ လုပ်ဆောင်ချက်ကို မဌင့်မာသသောအဆင့်တလင် ထိန်သသိမ်သထာသရန် အလလန်အရေသကဌီသပါသည်။ မျဟတသောစံနဟုန်သတစ်ခုဖဌစ်ပဌီသ တစ်ချိန်တည်သတလင်၊ ကောင်သသောဖဌေရဟင်သချက်မဟာ kube-apiserver သို့ အနည်သဆုံသနဟောင့်နဟေသစေရန်အတလက် ETCD cluster ကို master node မျာသပေါ်တလင်ထာသရန်ဖဌစ်သည်။ သင်ကသို့မလုပ်နိုင်ပါက ပါဝင်သူမျာသကဌာသတလင် bandwidth ကောင်သကောင်သဖဌင့် ETCD ကို တတ်နိုင်သမျဟ နီသစပ်အောင်ထာသပါ။ ETCD မဟ node မည်မျဟ အစုအဝေသမဟ ထိခိုက်မဟုမရဟိဘဲ ထလက်သလာသနိုင်ကဌောင်သကိုလည်သ အာရုံစိုက်ပါ။

Kubernetes စလမ်သဆောင်ရည် အကဌံပဌုချက် ကိုသခု

အစုအဖလဲ့တစ်ခုရဟိ အဖလဲ့ဝင်အရေအတလက်ကို အလလန်အကျလံ တိုသမဌဟင့်ခဌင်သသည် စလမ်သဆောင်ရည်ကုန်ကျစရိတ်ဖဌင့် အမဟာသအယလင်သခံနိုင်ရည်ကို တိုသလာစေနိုင်ပဌီသ အရာအာသလုံသသည် ထိန်သညဟိပေသသင့်သည်ဟု မဟတ်သာသထာသပါ။

ဝန်ဆောင်မဟုကို စတင်သတ်မဟတ်ခဌင်သအကဌောင်သ ကျလန်ုပ်တို့ပဌောဆိုပါက၊ အကဌံပဌုချက်အနည်သငယ်ရဟိပါသည်။

  1. အစုအဝေသ၏အရလယ်အစာသပေါ်မူတည်၍ ကောင်သမလန်သော ဟာ့ဒ်ဝဲရဟိပါ (သင်ဖတ်ရဟုနိုင်ပါသည်။ ဒီမဟာ).

  2. အကယ်၍ သင်သည် DCs တစ်စုံ သို့မဟုတ် သင့်ကလန်ရက်နဟင့် ဒစ်ခ်မျာသကဌာသတလင် အစုအဝေသတစ်ခုကို ဖဌန့်ကျက်ထာသလျဟင် ကန့်သတ်ချက်အနည်သငယ်ကို ပဌင်ဆင်ပါ (သင်ဖတ်နိုင်သည်။ ဒီမဟာ).

ကောက်ချက်

ကဆောင်သပါသတလင် ကျလန်ုပ်တို့အဖလဲ့သည် လိုက်နာရန်ကဌိုသစာသသည့်အချက်မျာသကို ဖော်ပဌသည်။ ၎င်သသည် လုပ်ဆောင်ချက်မျာသ၏ အဆင့်ဆင့်ဖော်ပဌချက်မဟုတ်သော်လည်သ အစုအဖလဲ့အပေါ်ပိုင်သကို အကောင်သဆုံသဖဌစ်အောင်ပဌုလုပ်ရန် အသုံသဝင်နိုင်သည့် ရလေသချယ်စရာမျာသ။ အစုအဝေသတစ်ခုစီသည် ၎င်သ၏ကိုယ်ပိုင်နည်သဖဌင့် တစ်မူထူသခဌာသကဌောင်သ ရဟင်သရဟင်သလင်သလင်သသိရပဌီသ ဖလဲ့စည်သမဟုဆိုင်ရာဖဌေရဟင်သချက်မျာသသည် မျာသစလာကလဲပဌာသနိုင်သည်၊ ထို့ကဌောင့် သင်၏ Kubernetes အစုအဝေသကို သင်မည်သို့စောင့်ကဌည့်နည်သနဟင့် ၎င်သ၏စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ပုံနဟင့်ပတ်သက်၍ သင့်တုံ့ပဌန်ချက်ရယူရန် စိတ်ဝင်စာသဖလယ်ကောင်သပါသည်။ သင့်အတလေ့အကဌုံကို မဟတ်ချက်မျာသတလင် မျဟဝေပါ၊ ၎င်သသည် စိတ်ဝင်စာသဖလယ်ကောင်သကဌောင်သ သိနိုင်မည်ဖဌစ်သည်။

source: www.habr.com