Wednesday, February 3, 2021

What I learned about Kubernetes - (Scheduling - Manual Scheduling, Labels and Selectors)

                        ဒီ article ကတော့ Kubernetes ရဲ့ Scheduling အကြောင်းပဲဖြစ်ပါတယ်။ ဒီ Schduling အပိုင်းမှာ ပြောရမည့် အကြောင်းအရာတွေ များတဲ့အတွက် Episode 9 အပိုင်းတွေနဲ့ ခွဲပြီး ပြောတာပိုကောင်းပါမယ်။ အခု 
EP-9 အစမှာ တော့ Manual Schduling အကြောင်း နဲ့ Labels and Selectors အကြောင်းကို ပြောပါမယ်။

What is manual scheduling?

                        
                       ပုံမှန် အားဖြင့် Pod တွေကို node ပေါ် assign ချတဲ့နေရာမှာ manually လုပ်ပေးစရာမလိုပါဘူး။ Kubernetes ရဲ့ kube-scheduler က လုပ်ဆောင်ပေးပါတယ်။ Kube-scheduler က Pod assign ချတဲ့နေရာမှာ Pod တွေမှာ node name ကို သတ်မှတ်ထားတာ ရှိမရှိ ကြည့်တယ် Node name နဲ့ manually label မတက်ထားတဲ့ Pods တွေကိုပဲ auto-assign ချပေးပါတယ်။ အကယ်၍ Pod definition file မှာလဲ ဘယ် node မှာ  assing ချမလဲ ဆိုပြီး မသတ်မှတ်ထားဘူး auto scheduler service လဲ မရှိဘူးဆိုရင် Pod သည် "pending state" မှာ ရပ်နေမှာ ဖြစ်ပါတယ်။

Sample Pod Definition File with Node Name Assign for Pod Scheduling





 What are labels and selectors?


                    Label and Selector က ပြောမယ်ဆိုရင် key=value အတွဲပဲ ဖြစ်ပါတယ်။ ဒီ Key နဲ့ ရှာရင် ဒီ key နဲ့ ပတ်သတ်တဲ့ value တွေ့ ပြပေးမှာဖြစ်ပါတယ်။ Pods တွေ ကို သူ့ group နဲ ့ သူ ပြောချင်တာက Front-end pods တွေလား back-end pods တွေလား နောက် web-service pod လား database-service run နေတဲ့ pod တွေလား စသည်ဖြင့် label သတ်မှတ် ပြီး organized ဖြစ်အောင် ပြုလုပ်ထားခြင်းဖြစ်ပါတယ်။

                  Label ကို ဘာမှာထားပြီး အသုံးပြုလဲဆိုတော့ metadata: အောက်မှာ ထားပြီး သတ်မှတ်ပါတယ်။ Label သတ်မှတ်ထားခြင်း ဖြင့် စောနက ပြောသလိုပဲ ဒီ  Pod သည် ဘာအတွက် run သလဲ ဘာအမျိုးအစား Pod ဖြစ်သလဲ ဆိုတာ သိစေပါတယ်။

                Selector ကိုတော့ ကြားခံ ဆက်သွယ်ရေး တစ်ခု အနေနဲ့ ထားရှိပြီး အသုံးပြုပါတယ်။ ဥပမာ Selector ကို Pod နဲ့  ReplicaSet တို့ ကြား Replicaset က ဘယ် application run နေတဲ့ Pods တွေကို control လုပ်ရမလဲ ဆိုတာကို Selector ကို ကြည့်ပြီး ဆုံးဖြတ်ရပါတယ်။ တစ်နည်းအားဖြင့် Selector သည် ကိုယ်ယူကြည့်ချင် Pods တွေကို filtering function လုပ်ပေးတဲ့ သဘောမျိုးဖြစ်ပါတယ်။ 


  How to define a Label inside a YAML file?


                ပုံမှန်အတိုင်းပဲ ကျွန်တော်တို့ definition file ရဲ့ metadata အောက် label session မှာ define လုပ်ပေးရမှာဖြစ်ပါတယ်။ အောက်ပုံမှာ ကျွန်တော် nginx-pod and redis-pod ကို create လုပ်ပြမယ် သူတို့ ဆီမှာ ကိုယ်ပိုင် label တွေ define လုပ်ထားပါတယ်။



                        Pod တည်ဆောက်လို့အပြီးမှာ $kubectl describe pod ဖြင့် ကြည့်ရင် Labels session မှာ ကျွန်တော်တို့ သတ်မှတ်ခဲ့တဲ့ label အတိုင်းပြနေမှာဖြစ်ပါတယ်။



                         အခု အောက်ပုံမှာဆိုရင် "--selector" ကို အသုံးပြုပြီး Pod နှစ်ခုရဲ့ မတူညီတဲ့ function ပိုင်းကို filter လုပ်ပြီး ခေါ်ကြည့်တာဖြစ်ပါတယ်။                         



                        အောက်ပုံမှာဆိုရင်တော့ ထပ်ပြီး  multi-label define လုပ်ထားတာကို "selector" ကို အသုံးပြုပြီး filter လုပ်ပြထားတာဖြစ်ပါတယ်။ Labels မျိုးစုံသတ်မှတ်လို့ရတယ်, တစ်ခုထက်ပိုတဲ့ ပုံစံမျိုးနဲ့လဲ သတ်မှတ်နိုင်ပါတယ်။ 



                                                                                    

That's it 😊


Pls Like and Subscribe Our Root Of Info FB Page and Youtube Channel


https://www.facebook.com/rootofinfo


https://www.youtube.com/channel/UCkOi7WxhUBKONv3uD0CvuWw?view_as=subscriber


Thank you!!!






Share:

0 comments:

Post a Comment