Creating a cluster with kubeadm - Part 1

ဒီနေ့ Sharing လုပ်ပေးမယ့် အကြောင်းကတော့ Kubeadm နဲ့ Kubernetes Cluster Setup လုပ်တယ့် အကြောင်းကိုပြောပြပေးသွားမှာပဲဖြစ်ပါတယ်။ အရင်ဆုံးအနေနဲ့ Cluster Setup မလုပ်ခင်မှာ Kubernetes ဆိုတာဘာလဲရယ် Kubernetes Distribution အကြောင်းလေးတွေရယ်ကို အနည်းငယ်ရှင်းပြပေးသွားမှာပဲ ဖြစ်ပါတယ်။
What is Kubernetes?
Kubernetes ကတော့ Open Source Container Orchestration Platform တစ်ခုဖြစ်ပြီး Google ကနေ Developed လုပ်ခဲ့တာပဲဖြစ်ပါတယ်။ အခုလက်ရှိမှာတော့ Kubernetes ကို Cloud Native Computer Foundation က နေ ကြီးကြပ်နေတာပဲဖြစ်ပါတယ်။ Kubernetes ကတော့ container orchestration tool တစ်ခုဖြစ်တယ့်အတွက် Orchestration Platform အနေနဲ့ပဲ အခြေခံပြီး ထွက်လာတာပေါ့နော်။ Container တွေကို manage လုပ်ဖို့အတွက်ကျတော့ သူ့ထဲမှာမပါဘူး။ ဒါကြောင့် Container Runtime နဲ့ပတ်သက်ပြီးတော့ Container Runtime ဖြစ်တယ့် Docker ပေါ်ကို Relies လုပ်ရတယ်ပေါ့နော်။ နောက်ပိုင်းမှာတော့ ဘာတွေဖြစ်လာလဲဆိုတော့ Kubernetes က Dockershim ကိုဖြုတ်ပြီးတော့ Containerd ကို သူရဲ့ Container Runtime အဖြစ်သုံးလာခဲ့ပါတယ်။ Kubernetes က Support လုပ်တဲ့ Container Engine မှာဆိုရင် Containerd အပြင် CRI-O ဆိုတာလဲရှိသေးတယ်။ Docker Engine ကိုပဲဆက်ပြီးအသုံးပြုချင်တယ်ဆိုရင်လဲ cri-dockerd ဆိုတယ့် tool ကို ကြားခံအသုံးပြုလို့ရပေမယ့် Containerd focus ဖြစ်တယ့်အတွက် တခြားဟာတွေတော့အများကြီးမပြောတော့ပါဘူး။
CRI-O ကိုတော့ Redhat က Develop လုပ်ထားတဲ့ container runtime ဖြစ်ပြီးတော့ သူကကျ containerd လိုမဟုတ်ပဲ low-level ဖြစ်တယ့် runc ကို တန်းပြီးတော့ manage လုပ်နိုင်တယ်။ ပိုပြီးတော့ lightweight ဖြစ်တယ့် runtime အနေနဲ့ ရှိနေတယ်ပေါ့နော်။ Containerd မှာဆိုရင် low-level ဖြစ်တယ့် runc ကို တိုက်ရိုက် manage မလုပ်နိုင်ပဲ containerd-shim ကနေမှတစ်ဆင့် runc ကို manage လုပ်တယ်။ runc ကနေမှ container တွေဖန်တီးတဲ့ ကိစ္စမျိုးတွေကို လုပ်ဆောင်ပေးတာပေါ့နော်။ CRI-O ကတော့ Redhat ရဲ့ Openshift မှာပဲ အဓိကသုံးတာဖြစ်တယ်။ ဒါမယ့် ကျွန်တော်တို့ Kubernetes Community Version မှာလဲ Containerd အစား CRI-O ကိုလဲ သုံးချင်ရင် သုံးလို့ရတယ်ပေါ့နော်။ ဒီမှာတော့ ကျွန်တော်တို့က Containerd ကိုပဲ သုံးသွားမှာဖြစ်တယ့်အတွက် Containerd နဲ့ပတ်သက်တာတွေပဲ ပြောပါမယ်။
ကျွန်တော်တို့ Environment မှာ Containerd ကိုအသုံးပြုထားတယ်ဆိုရင် containerd တွေကို manage လုပ်ဖို့အတွက် ctr ဆိုတယ့် tool ကိုအသုံးပြုပြီး manage လုပ်ရတယ်။ ctr ကတော့ containerd နဲ့ တွဲပြီးအလုပ်လုပ်တဲ့ cli tool ဖြစ်တယ်။ ဒါမယ့် သူက Docker မှာအသုံးပြုခဲ့တယ့် Command တွေနဲ့ နည်းနည်းကွဲတယ်။ Docker မှာလို manage လုပ်တဲ့ပုံစံအတိုင်းကို ctr မှာသွားပြီးတော့ သုံးလို့မရဘူး။ ဒါကြောင့် docker လိုပဲ manage လုပ်ချင်တယ်ဆိုရင်တော့ nerdctl ဆိုတယ့် tool ကိုအသုံးပြုလို့ရတယ်။ Nerdctl က Containerd ကို manage လုပ်တဲ့ docker compactible cli tool တစ်ခုဖြစ်တယ်။ အောက်မှာတော့ Nerdctl ရဲ့ github repo လေးထည့်ပေးထားပါတယ်။ အသေးစိတ်လေ့လာချင်ရင် လေ့လာလို့ရပါတယ်။
Kubernetes Distribution
Kubernetes Distribution တွေကတော့ အများကြီးရှိကြပါတယ်။ Enterprise မှာဆိုရင် Redhat OpenShift, Mirantis Kubernetes Engine, VMware မှာဆိုရင်လဲ Tanzu စသဖြင့်ပေါ့နော်။ Cloud မှာဆိုရင်လဲ သူ့ရဲ့ Cloud Provider ပေါ်မူတည်ပြီး Google မှာဆိုရင် GKE, AWS မှာဆိုရင် EKS, Azure မှာဆိုရင် AKS စသဖြင့်ရှိကြတယ်။ ဒါတွေကတော့ Managed Kubernetes Platform တွေပဲဖြစ်ပါတယ်။ Community Version မှာဆိုရင်တော့ ကျွန်တော်တို့ အခုအသုံးပြုမယ့် Open Source Kubernetes ပေါ့။ သူ့ကိုတော့ တစ်နည်းအားဖြင့် Vanilla Kubernetes လို့လဲခေါ်ကြတယ်။ ကျွန်တော်တို့ရဲ့ Organization မှာ Container နဲ့ပတ်သက်တဲ့ application တွေကို develop လုပ်ပြီးအသုံးပြုတော့မယ်ပေါ့နော်။ အရင်ဆုံးအနေနဲ့ စတင်ပြီးစဥ်းစားရမှာကတော့ ကျွန်တော်တို့ ဘယ် Kubernetes Distribution ကိုသုံးသင့်လဲဆိုတာမျိုးပေါ့။ ထားပါတော့ ကျွန်တော်တို့ Infrastructure မှာ Existing အနေနဲ့ VMware vSphere လိုမျိုးရှိတယ်ဆိုရင် နောက်ထပ် VMware Tanzu ကိုပဲ Add on Subscription ထပ်ဝယ်ပြီးသုံးမလားပေါ့။ ဒါမှမဟုတ် ကျွန်တော်တို့ အသုံးပြုနေတယ့် Product တွေက Redhat နဲ့ပတ်သက်ပြီး Redhat JBoss တို့ တခြား Red Hat 3scale API Management လိုဟာမျိုးတွေ သုံးထားတာမျိုးတွေရှိရင်တော့ ကျွန်တော်တို့အနေနဲ့ စဥ်းစားသင့်တာက Redhat OpenShift Container Platform လိုဟာမျိုးကို စဥ်းစားရမှာပေါ့နော်။ ဒီလိုပဲ ကျွန်တော်တို့ Product တွေက AWS မှာ သုံးထားတယ်ဆိုရင်တော့ EKS လိုမျိုး Elastic Kubernetes Service လိုဟာမျိုးကိုအသုံးပြုသင့်တယ်ပေါ့နော်။ ဒါတွေကတော့ ကိုယ့်ရဲ့ Organization nature ပေါ်မူတည်ပြီးတော့ ရွေးချယ်ရမယ့် ကိစ္စဖြစ်ပါတယ်။ ဒီလောက်ဆိုရင်တော့ Kubernetes Distribution ရွေးချယ်တာနဲ့ ပတ်သက်ပြီးသိမယ်လို့ထင်ပါတယ်။
ကျွန်တော်တို့က Open Source ဖြစ်တယ့် Kubernetes ကိုပဲ အသုံးပြုမှာဆိုတော့ Open Source နဲ့ပတ်သက်တာကိုပဲဆက်ပြီးတော့ သွားကြပါမယ်။ Local Kubernetes Cluster ကို Setup လုပ်ဖို့အတွက် Tool တွေကတော့ မျိုးစုံရှိတယ်ပေါ့နော်။ Minikube ဆိုတာကိုပဲသုံးမလား။ Kind ဆိုတယ့် tool ကိုပဲသုံးမလားပေါ့နော်။ Kind ကတော့ Kubernetes In Docker ပေါ့ Kubernetes Cluster Setup လုပ်တဲ့အခါမှာ Node တွေလိုတယ်။ အဲ့ဒါကိုမှ အဲ့ဒီ Node တွေကို Docker Container အနေနဲ့ ပြန်ပြီး run တဲ့ပုံစံမျိုးအနေနဲ့သုံးပါတယ်။ ကျွန်တော်တို့ အသုံးပြုမှာကတော့ Production အတွက် ready ဖြစ်တယ့် kubeadm ဆိုတယ့် tool ကိုပဲ အသုံးပြုသွားမှာပဲဖြစ်ပါတယ်။ လောလောဆယ်တော့ စာအရမ်းရှည်သွားမှာဆိုးတဲ့အတွက် ဒီလောက်နဲ့ပဲ ခဏရပ်ထားပါမယ်။ Part -2 မှာတော့ Kubeadm နဲ့ Cluster Setup လုပ်တယ့် အကြောင်းကို ထပ်ပြောပြသွားမှာပဲဖြစ်ပါတယ်။
အချိန်ပေးပြီးဖတ်ရှုသည့်အတွက်ကျေးဇူးတင်ပါတယ်။




