Tuesday, February 2, 2021

What I learned about Kubernetes - (Services)

                                    ဒီ article ကတော့ Kubernetes ရဲ့ Services အကြောင်းပဲဖြစ်ပါတယ်။ အရင် Episodes တွေမှာ ကျွန်တော်တို့ ReplicaSet, Deployment တို့ကို အသုံးပြုပြီး Pod တွေကို ဘယ်လိုတည်ဆောက်လဲ လေ့လာပြီးသွားပြီ အခု ဒီ Services ရဲ့ အကြောင်းကိုဆက်ပြီး လေ့လာရအောင်။ 

What is the Kubernetes Service?


                    Service ဆိုတာက အဓိက ဒီ Pod တွေ internally externally communication ကို အဆင်ပြေစွာလုပ်ဆောင်ပေးဖို့အတွက် တာဝန်ယူပေးပါတယ်။ ပြောချင်တာက အခု ကျွန်တော်တို့ Pod တွေ တည်ဆောက်ခဲ့တယ် ဒီ Pod တွေကို access လုပ်ဖို့အတွက် လိုလာပြီ access လုပ်တယ်လို့ ပြောရာမှာ outside က users တွေ ပါမယ် နောက်ပြီး Pod တွေအချင်းချင်း inside မှာလဲ access လုပ်ဖို့ လိုမယ် ဥပမာ front-end application နဲ့ back-end က database application တို့ ဆက်သွယ်ဖို့ စတာတွေကို kubernetes service က လုပ်ဆောင်ပေးပါတယ်။

How many types of services in Kubernetes?


                Service type ဘယ်နှစ်မျိုးရှိလဲဆိုတော့
1.  NodePort Service
2. ClusterIP Service
3. LoadBalancer Service

ဆိုပြီး ၃မျိုးရှိပါတယ်။

Let's figure out the first one called NodePort Service...........


What is NodePort Service and What does it do???


                NodePort ရဲ့ အဓိကတာ၀န်က outside က users ကနေ Pod ကို access လုပ်ချင်တဲ့အခါ ပြောချင်တာက outside network ဖြစ်တဲ့ မတူညီတဲ့ network တစ်ခုက users က Kubernetes internal network ထဲမှာရှိတဲ့ Pod ကို လှမ်းပြီး access လုပ်ချင်တဲ့အခါ NodePort service ကိုအသုံးပြုရပါတယ်။ သူက ဘယ်လိုလုပ်ပေးလဲဆိုတော့ လက်ရှိ Pod run နေတဲ့ underlying Node က "Port" နဲ့ Pod ရဲ့ Port, "Pod" ရဲ့ "Port" ဆိုတာက ဥပမာ Web Application run နေတဲ့ Pod (Nginx/Apache) ဆိုရင် Port-80 ကိုချိတ်ဆက်ပြီး access ရအောင် ပြုလုပ်ပေးတာဖြစ်ပါတယ်။

                အဲ့တော့ အခုပြောခဲ့တဲ့ Port on Node, Port on Pod တွေကို Kubernetes terms အရ ဘယ်လိုခေါ်လဲဆိုတော့
1. Port on Node = "NodePort"
2. Port on POD = "TargetPort"

and

3. Service Port = Service Port ဆိုတာက NodePort နဲ့ TargetPort ရဲ့ ကြားခံအနေနဲ့ အပြန်အလှန်ဆက်သွယ်လို့ရအောင်လုပ်ဆောင်ပေးပါတယ်။

Does the NodePort have a port-range?


                NodePort မှာ သတ်မှတ်ထားတဲ့ Port Range ရှိပါတယ်။ Port range between 30000 - 32767 ကြား ဖြစ်ပါတယ်။ 

NodePort Definition File (YAML) Design

apiVersion: v1
kind: Service
metadata:
      name: Nginx-Service
spec:
    type: NodePort
    ports:
        - targetPort: 80
          port: 80
          nodePort: 30000
    selector:
           app: nginx
            

     
            အကယ်၍ definition file မှာ NodePort ကို define မလုပ်ထားရင် သူ့ရဲ့ သတ်မှတ်ထားတဲ့ Range အတွင်းကနေ port တစ်ခု ကို random ယူသွားမှာဖြစ်ပါတယ်။ TargetPort ကို မသတ်မှတ်ထားခဲ့ရင်လည်း Service Port (port:) မှာသတ်မှတ်ထားတာကို TargetPort အနေနဲ့ အသုံးပြုမှာဖြစ်ပါတယ်။

             နောက်ထပ်တစ်ခုက NodePort Service သည် Pods တွေက Multiple nodes တွေပေါ်မှာ run နေသည့်တိုင်အောင် ပြောချင်တာက Single Node တစ်ခုထဲမှာ မရှိပဲ distributed across multiple nodes ဆိုသည်တောင်မှ Pods တွေကို NodePort service က support ပေးနိုင်ပါတယ်။ Multiple nodes တွေပေါ်မှာ run နေလို့ဆိုပြီး NodePort Service definition file ကို nodes တိုင်းပေါ်မှာ create လုပ်ပေးစရာမလိုပါဘူး။ 

Let's create NodePort Service for Nginx-Pod


            အခု ကျွန်တော်တို့ Nginx-Pod အတွက် NodePort Service တစ်ခု create လုပ်မယ်။ အရင်ဆုံး ကျွန်တော် Nginx-Pod with replicas:3 ဆိုပြီး deployment type ကို အသုံးပြုပြီး တည်ဆောက်လိုက်မယ်။ ပြီးရင် NodePort Service တစ်ခု တည်ဆောက်ပြီး Nginx web service ကို အပြင် network ကနေလှမ်းခေါ်ကြည့်မှာဖြစ်ပါတယ်။
Deployment ရော Service NodePort ရောကို $kubectl create -f command ဖြင့် create လုပ်သွားမှာဖြစ်ပါတယ်။
 အခု ကျွန်တော့် env မှာ minikube သုံးထားတဲ့အတွက် minikube ရဲ့ default ip ကို  loadbalancer ip အနေနဲ့အသုံးပြုမှာဖြစ်ပါတယ်။ Minikube နဲ့မဟုတ်ပဲ Master node, Worker nodes ဆိုပြီး customတည်ဆောက်ထားတဲ့ Kubernetes cluster suite တစ်ခုဆိုရင်တော့ loadbalancer ip အပြင် worker-node တစ်ခု ချင်းစီရဲ့ http://<worker-node-ipaddress>:30010 ဆိုပြီး တော့လဲ အသုံးပြုလို့ရပါတယ်။ 


Nginx-Deployment & Nginx-NodePortService Definition (YAML) file



Using $kubectl get service to list services


                       

NodePort Created and URL is given to access Nginx Web Server




Accessing the Nginx Web Server

    

                        အကယ်၍ အခု set up ကို cloud provider တစ်ခုခု ပေါ်မှာ deploy လုပ်ခဲ့ပါက ဒီ load balancer service အတွက် cloud provider ဖက်ခြမ်းကနေ users တွေ access လုပ်ဖို့အတွက် Public-IP တစ်ခု auto-assign ချပေးမှာဖြစ်ပါတယ်။ အခုကတော့ Loadbalancer definition file တစ်ခု တည်ဆောက်ပေးရမှာဖြစ်ပါတယ်။ 

Sample LoadBalancer definition file





So, What is the last one called ClusterIP Service?


                ClusterIP Service ကို တော့ Pods တွေအချင်းချင်း ဆက်သွယ်ရာမှာအသုံးပြုပါတယ်။ သူ့ပုံစံက ဘယ်လိုလဲဆိုတော့ ဒီ Nginx-Pod တွေ အတွက် back-end မှာ database service run နေတဲ့ pods တွေနဲ ဆက်သွယ်ဖို့ လိုအပ်သလို db pods တွေကလဲ front-end မှာ run နေတဲ့ nginx pods တွေနဲ့ internally ဆက်သွယ်ဖို့လိုအပ်ပါတယ် အဲ့လိုမျိုး Pods တွေအချင်းချင်း ဆက်သွယ်ရန်အတွက် ClusterIP Service ကို အသုံးပြုတာဖြစ်ပါတယ်။ အောက်ပုံမှာဆိုရင် i.e db-pods တွေ ကို လှမ်းခေါ်အသုံးပြုဖို့အတွက် db ကို access လုပ်ဖို့ ClusterIP service တစ်ခု တည်ဆောက်ပေးတဲ့ ပုံစံဖြစ်ပါတယ်။

Using $kubectl get svc (service) to view the new ClusterIP Service




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