Sunday, September 26, 2021

What I learned about Kubernetes - (Scheduling - Multiple Scheduler)

                 ဒီ article မှာတော့ Scheduling အဆက်ဖြစ်တဲ့ multiple scheduler အကြောင်းကိုရှင်းပြသွားပါမယ်။ ဒီ article က draft ထဲမှာ ရှိနေတာ ကြာပြီ ဖြစ်ပါတယ်။ မေ့လဲမေ့နေပါပြီ ရေးမယ်ဆိုပြီး မရေးဖြစ်တာပါ။ kubernetes article တွေကတော့ kubernetes docs "https://kubernetes.io/docs/home/"  and kodecloud "https://kodekloud.com/" ကနေ ref ယူရေးပါတယ်။ ဆိုတော့ Multiple scheduler သည် လက်ရှိ kubernetes cluster တစ်ခုမှာ default ပါ၀င်လာပြီးသားဖြစ်တဲ့ scheduler ကို မသုံးချင်ဘူး တစ်ချို့ PODS တွေကို customize scheduler နဲ့ manage လုပ်ချင်တယ်ဆိုရင် အသုံးပြုနိုင်ပါတယ်။  အောက်ပုံကတော့ kubernetes default scheduler pod running ဖြစ်နေတာဖြစ်ပါတယ်။



So, how can we deploy multiple scheduler?

                Multiple scheduler ကို deploy လုပ်ဖို့အတွက် လက်ရှိ ရှိနေတဲ ့default scheduler ရဲ့ manifest file (yaml) ကို ယူသုံးလို့ရတယ်။ kubernetes ရဲ့ manifest files တွေက /etc/kubernetes/manifest directory အောက်မှာ ရှိပါတယ်။ ယူသုံးဖို့အတွက် default manifest file ကို  custom name တစ်ခုနဲ့ other location တစ်ခုဆီ copy ကူးလိုက်မယ် ပြီးရင် file ကို edit လုပ်မှာဖြစ်ပါတယ်။ "/etc/kubernetes/manifests" အောက်မှာ create လုပ်လိုက်ရင် static pod အနေနဲ့ auto create သွားမှာ မို့လို location ပြောင်းပေးတာဖြစ်ပါတယ်။ အဓိက ဘာကို edit ၀င်လုပ်ပေးရမလဲဆိုတော့ custom-scheduler လုပ်ဖို့အတွက် custom name (my-scheduler) ပြောင်းမယ် အဓိက လိုအပ်တဲ့ "leader-elect" နဲ့ "scheduler-name" options တွေကို ထည့်သွင်းပေးရပါမယ်။ နောက် တစ်ချက် အနေနဲ့  multiple scheduler အသုံးပြုတော့မယ်ဆိုရင် multiple scheduler တွေအတွက် custom port တစ်ခု လိုအပ်ပါမယ်။ default kube-scheduler ရဲ့ port က "10259" ဖြစ်ပါတယ်။




What is leader elect?

            Leader elect ဆိုတာက kubernetes cluster တစ်ခုအတွင်းမှာ multiple master node တွေရှိခဲ့ရင် ဘယ် master က scheduling job ကို တာ၀န်ယူမလဲဆိုတာ သတ်မှတ်တဲ့ option ဖြစ်ပါတယ်။ အကယ်၍ master node တစ်ခုထဲ ရှိခဲ့ ရင်တော့ leader-elect ကို "false" ထားပေးရမှာပါ။ multiple master nodes ရှိခဲ့ရင်တော့ leader-elect မှာ "true" ထားပေးပြီး နောက်ထပ် option တစ်ခု ဖြစ်တဲ့ "lock-object-name" ကိုပါ သတ်မှတ်ပေးရပါမယ်။ "lock-object-name" ဆိုတာက နားလည်သလိုပြောရရင် multile master node တွေ scheduling job ကို လုပ်ဖို့ election ရွေးတဲ့အခါ မပါ၀င်စေချင်ရင် ထားသုံးပါတယ်။ default အနေနဲ့ lock-object က kube-scheduler ဖြစ်ပြီး lock-object-namespace ကို "kube-system" ထားပါတယ်။

ref: https://kubernetes.io/docs/tasks/extend-kubernetes/configure-multiple-schedulers/

 

Let's edit the custom-scheduler file

                အောက်ပုံမှာ ဆိုရင် multiple scheduler တစ်ခု run ဖို့အတွက် edit လုပ်ပြထားတယ်။ master node တစ်ခုထဲ​ရှိတဲ့အတွက် leader-elect မှာ false ထားပေးထားတယ်။ နောက်ပြီး custom scheduler name ကို သတ်မှတ်ပေးထားပါတယ်။ ပြီးရင်တော့ kubectl create command ဖြင့် custom scheduler တစ်ခု တည်ဆောက်မယ်။

 








After that, let's deploy a new multiple-scheduler

                လိုအပ်တဲ့ options တွေ edit လုပ်ပြီးပြီ ဆိုရင်တော့ multiple-scheduler definition (yaml) file ကို kubectl create command ဖြင့် deploy လုပ်မယ်။ အောက်ပုံမှာ ဆိုရင် create လုပ်ပြီးတဲ့ နောက် my-scheduler ဆိုပြီး running ဖြစ်နေတာကိုတွေ့ရမှာပါ။





Assign a new scheduler to a pod

            အခုဆို အသစ် တည်ဆောက်ထားတဲ့ scheduler ကနေ manage လုပ်ချင်တဲ့ pod တွေမှာ new scheduler name ကို သတ်မှတ်ပေးရမှာဖြစ်ပါတယ်။ အောက်ပုံမှာဆိုရင် nginx pod တစ်ခုက custom scheduler နဲ့ manage လုပ်မယ်လို့ သတ်မှတ်ပေးထားပါတယ်။ kubectl describe နဲ့ ကြည့်တဲ့အခါ nginx pod ရဲ့ scheduling ကို custom scheduler (my-scheduler) က manage လုပ်နေတာကို တွေ့ရမှာဖြစ်ပါတယ်။


Another way to check which scheduler is being used?

            kubectl get events command ဖြင့် recent events တွေကိုကြည့်တဲ့ အခါမှာ ဘယ် pod က ဘယ် scheduler နဲ့ အသုံးပြုနေတယ်ဆိုတာကိုတွေ့ နိုင် ပါတယ်။



How to check your scheduler logs?


               Scheduler logs ကို ကြည့်ချင်တယ်ဆိုရင်တော့ kubectl logs command ကို အသုံးပြု ပြီး ကြည့်နိုင် ပါတယ်။ 



            အခု article မှာဆိုရင်တော့ multiple scheduler တစ်ခုကို default scheduler နဲ့ အတူထားပြီး တည်ဆောက်ပြသွားတာဖြစ်ပါတယ်။ 
ref: 

That's it 😊

Thank you!!!        


Share:

0 comments:

Post a Comment