Tuesday, February 2, 2021

What I learned about Kubernetes - (POD)

                                  ဒီ article လေးကတော့ Kubernetes ရဲ့ Pod အကြောင်းလေးပဲဖြစ်ပါတယ်။ အရင် article ကပြောခဲ့တဲ့ kube-scheduler က Pod တွေကို Kubernetes ရဲ့ worker node မှာ assign ချပြီး အသုံးပြုကြပါတယ်။

What is  Pod in Kubernetes?


                Pod ဆိုတာက Kubernetes terms အရ container တွေ  create လုပ်တဲ့အခါ ထားရှိတဲ့ နေရာဖြစ်ပါတယ်။ ပြောရရင် container တွေရဲ့ အပြင်ကအုပ်ထားတဲ့ cover တစ်ခုလိုပါပဲ။ Pod နဲ့ Container နဲ့က one to one relationship မျိုး ဖြစ်ပါတယ်။ ဆိုလိုချင်တာက container တစ်ခု create လုပ်လိုက်ရင် ၎င်း container အတွက် pod တစ်ခု create လုပ်ပြီးသားဖြစ်ပါတယ်။ Container ကို ပြန် ဖျက်လိုက်ရင် ၎င်း container နဲ့ သက်ဆိုင်တဲ့ pod ပါ delete ဖြစ်သွားမှာဖြစ်ပါတယ်။ အဲ့တော့ သိထားရမှာက နောက်ပိုင်း pod လို့ပဲ သုံးနှုန်းတဲ့အခါ a container is running inside the pod လို့မှတ်ယူထားလို့ရပါတယ်။

Pod on a node


Can multiple containers run inside one pod?


                 Default အရတော့ container တစ်ခု အတွက် pod တစ်ခုပဲဖြစ်ပါတယ်။ ချွင်းချက်အနေနဲ့ "Helper container" လို့ခေါ်တဲ့ Main container ကို support ပေးရတဲ့ အခြေနေမျိုးမှာဆိုရင်တော့ Pod တစ်ခုအတွင်းမှာ multi-container တွေ ထားပြီး အသုံးပြုလို့ရပါတယ်။

What if your's containerized app becomes too big?

   
                အကယ်၍ မိမိတို့ရဲ့ containerized application က enterprise-level app တစ်ခုဖြစ်လာပီဆိုရင် node တစ်ခုထဲပေါ်မှာပဲ handle လုပ်ဖို့ မရတော့တဲ့အခါ Pod အသစ်တစ်ခုကို နောက်ထပ် cluster node တစ်ခု ပေါ်မှာ deploy လုပ်ပီး အသုံးပြုလို့ရပါတယ်။ ဒီနေရာမှာ မတူညီတဲ့ node တွေပေါ်မှာ Pod တွေ အချင်းချင်း ဆက်သွယ်ဖို့အတွက် Kube-Proxy ကိုအသုံးပြုကြပါတယ်။



Let's find out how to deploy pods in Kubernetes?


             Okay, ဒီတော့ Pod အကြောင်းလေး theory နားလည်ပြီးနောက်မှာ hands-on ပိုင်းလေ့လာကြည့်ရအောင်ပါ။ အခုရေးနေတဲ့အချိန်မှာ ကျွန်တော်ရဲ့ စက်မှာ mini-kube တင်ထားပါတယ်။ Mini-kube installation ကိုတော့ https://kubernetes.io/docs/tasks/tools/install-minikube/ ဒီလင့်မှာ ကြည့်နိုင်ပါတယ်။

How to deploy a pod?


        "kubectl run" command ကိုအသုံးပြုပြီး pod တစ်ခု create လုပ်မှာဖြစ်ပါတယ်။ အောက်ပုံမှာပြထားသည့်အတိုင်း kubectl run websvr --image=nginx ဆိုပြီး အသုံးပြုလျှင် nginx pod တစ်ခု create လုပ်သွားမှာဖြစ်ပါတယ်။ ဒီနေရာမှာ websvr က Pod name ဖြစ်ပြီး image=nginx ကတော့ container image ဖြစ်တဲ့ nginx ကို download ဆွဲပြီး တည်ဆောက်သွားတာဖြစ်ပါတယ်။


Figure1: Use kubectl run --help to see the usage


Figure2: Use kubectl run to create a pod

       


How to list running pods?


            လက်ရှိ node ပေါ်မှာ running ဖြစ်နေတဲ့ pods တွေကို ကြည့်ချင်ရင် "kubectl get" command ကို အသုံးပြုပီး ကြည့်လို့ရပါတယ်။  "kubectl get pods -o wide" ဆိုပြီး ကြည့်ရင် လက်ရှိ pod ကို တင် run ထားတဲ့ node, pod ip address ကိုပါပြပေးပါတယ်။

        Figure3: Use kubectl get pods && kubecl get pods -o wide 



How to see Pod's detailed information?


              Pod တစ်ခုရဲ့ detail information ကိုကြည့်ချင်ရင် "kubectl describe pod <pod-name> ကို အသုံးပြုပြီး ကြည့်ပါတယ်။ detail information ထဲမှာ ဒီ pod က ဘယ် image ကို အသုံးပြုထားလဲ Pod ရဲ့ condition နောက်ပြီး Pod တစ်ခု စ create လုပ်သွားတဲ့ process တွေကိုလဲ Event session အောက်မှာ ကြည့်လို့ရပါတယ်။ Event session ကနေပြီးတော့ Pod create လုပ်တဲ့အခါ errors တွေ တက်ခဲ့ရင်လဲ troublehshoot လုပ်ဖို့အတွက် အသုံးပြုနိုင်ပါတယ်။

Figure4: Use kubectl describe to see pod's detail


How to access ssh inside a pod?


        Pod တစ်ခုထဲကို ssh access ဖြင့် လှမ်း၀င်ဖို့အတွက် ကိုတော့ "kubectl exec --stdin --tty <pod-name> -- /bin/bash" command ကို အသုံးပြုပြီး ၀င်လို့ရပါတယ်။

Figure5: Using kubectl exec for ssh access to the pod



How to delete a pod?


          Pod ကို delete ဖို့အတွက်ကတော့ "kubectl delete pod <pod-name>" ကိုအသုံးပြုပါတယ်။

Figure6: Using kubectl delete to delete a pod



That's it 😊

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



Thank you!!!

Share:

0 comments:

Post a Comment