Tuesday, February 2, 2021

What I learned about Kubernetes - (YAML)

                    ဒီ article မှာတော့ Kubernetes မှာအသုံးပြုတဲ့ YAML အကြောင်းကို အနည်းငယ်ပြောပြချင်ပါတယ်။ ကျွန်တော်တို့ kubernetes ကို ပိုပြီးလေ့လာတာနဲ့အမျှ နောက်ပိုင်းမှာ ဒီ YAML definition file ကိုအသုံးပြုပြီး pod တွေ services တွေကို တည်ဆောက်ကြရမှာဖြစ်ပါတယ်။ 

What is YAML in Kubernetes?


              YAML ဆိုတာက Kubernetes's Pod တွေ Services တွေ စတာတွေကို တည်ဆောက်တဲ့နေရာမှာအသုံးပြုတဲ့ format တစ်ခုဖြစ်ပါတယ်။ Kubernetes က YAML အပြင် JSON format ကိုပါလက်ခံပေမယ့် best practices အနေနဲ့ YAML ကို သုံးဖို့ recommend ပေးထားပါတယ်။



What is the YAML format for Kubernetes?


            YAML format မှာ အဓိကအနေနဲ့  Type (3) မျိုးရှိပါတယ်။ 



1. Key-Value Pair

                Key-Value Pair ကိုသတ်မှတ်ရာမှာ colon (:) နဲ့ သတ်မှတ်ပါတယ်။ Key တစ်ခု အတွက် Value တစ်ခု ပုံစံမျိုး သွားပါတယ်။ မတူညီတဲ့ object တွေ တစ်ခုချင်းစီ ရေးသာရာမှာ အသုံးပြုပါတယ်။ colon (:) နောက်မှာ "Value" မရေးခင် "space" တစ်ချက်ခြားပြီးမှ ရေးရမှာဖြစ်ပါတယ်။ YAML မှာ spacing တွေက အရေးကြီးပါတယ်။ 
 
Key-Value Pair Example

Phone: iPhone
Computer: MacBook
Table: iPad


                                                       
2. Array/Lists

            Array/ Lists type ကို ဖော်ပြရာမှာတော့ dash (-) နဲ့ဖော်ပြပါတယ်။ တူညီတဲ့ Object တစ်ခုအောက်မှာ ကွဲပြားသွားတဲ့ items တွေကို ဖော်ပြရာမှာအသုံးပြုပါတယ်။

Array/Lists Example

Stationary:
    - Pencil
    - Ruler
    - Eraser

3. Dictionary/Map 

            Dictionary Type ကို တော့ object တွေရဲ့ key-value information  တွေကို တစ်စုတစ်စည်းထဲ ဖော်ပြတဲ့နေရာမှာအသုံးပြုပါတယ်။ အောက်က Example မှာ Line Spacing သုံးသွားတာကို သတိထားရမှာဖြစ်ပါတယ်။  Desktop computer သည် Parent ဖြစ်သည့် အလျောက် key-valued information တွေကို Parent ရဲ့ အောက် မှာ ထားပြီး ရေးရမှာဖြစ်ပါတယ်။ Parent object နဲ့ တစ်ပြေးညီ တစ်လိုင်းထဲ ရေးလို့မရပါ။

Dictionary/Map Example

Desktop Computer:
      CPU: 3.5GHz
      RAM: 16GB
      HDD: 1TB

Laptop Computer:
      CPU: 2.5GHz
      RAM: 8GB
      HDD: 512GB



  How to create a POD with YAML?


                အခု ကျွန်တော်တို့ YAML အကြောင်း လေ့လာပီးတဲ့နောက် pod တစ်ခုကို YAML format ဖြင့် ဘယ်လို create လုပ်မလဲ​ဆိုတာ လေ့လာမှာဖြစ်ပါတယ်။ Kubernetes ရဲ့ YAML ကို ရေးသာတဲ့နေရာမှာ အဓိက top level field အနေနဲ့ structure (4) မျိုး ရှိပါတယ်။ အဲ့ဒါတွေကတော့ 
1. apiVersion: 
2. kind:
3. metadata:
4. spec: 

တို့ဖြစ်ပါတယ်။ ဘယ်လို kubernetes YAML deployment မှာပဲ ဖြစ်ဖြစ် ဒီ ၄ မျိုးက အဓိက ပါ၀င်ပါတယ်။ 
 

So, here's the sample pod-definition file written in YAML format


                Ok, ဒီ YAML definition file ကို ရေးသားရာမှာ ကျွန်တော်တို့ kubernetes ရဲ့ official documentation က နေ sample ယူပြီး ရေးလို့ရသလို ကျွန်တော် အခု ပုံထဲမှာ ပြထားသလိုပဲ POD create လုပ်မယ့် YAML file တစ်ခုက generate လုပ်ယူလို့ရပါတယ်။ အခုကတော့ Simple POD definition file ဖြစ်သည့်အတွက် တစ်ခြား ထပ်ပြီး ဖြည့်စွက်စရာမလိုသေးဘူး နောက်ပိုင်း advanced YAML တွေ တည်ဆောက်ရတဲ့အခါမှာတော့ Kubernetes documentation ကို reference sample ယူပြီး တည်ဆောက်ရမှာဖြစ်ပါတယ်။

Figure1: Generate YAML file and see what's inside YAML file



                အပေါ်ကပုံမှာ  Pod YAML definition file တစ်ခုအတွက် အဓိက ဖြည့်ရမယ့် နေရာတွေကတော့
1. apiVersion: v1
2. kind: Pod 

တို့ဖြစ်ပါတယ်။ နောက်ပိုင်း တစ်ခြား deployment type တွေမှာ ဆိုရင် တစ်ခြား deployment type တွေနဲ့ ကိုက်ညီမယ့် apiVersion, kind တို့ကို ဖြည့်ရမှာဖြစ်ပါတယ်။ နောက်တစ်ခုအနေနဲ့က 

3. metadata:

ဖြစ်ပြီး သူကတော့ dictionary type အမျိုးအစား ဖြစ်ပြီး တော့ ဒီ definition file က ဘာလုပ်တဲ့ file လဲ ဘာအတွက် တည်ဆောက်ထားတာလဲ ဆိုတဲ့ information တွေ ဖော်ပြရမည့်နေရာဖြစ်ပါတယ်။ ကြည့်မယ်ဆိုရင် metadata အောက်မှာ name: websvr2 ဆိုပြီး ရှိမယ် နောက် labels တစ်ခုရှိမယ် labels ရဲ့အောက်မှာ ဒီ websvr ရဲ့ အသုံးပြုထားတဲ့ application က nginx, type က webservice run တဲ့ type ပြီးတော့ nginx အတွက်  ဖြစ်တယ်ဆိုတာ ဖော်ပြပေးထားတာဖြစ်ပါတယ်။ နောက်ဆုံးတစ်ခု က 

4. spec: 

ဖြစ်ပြီး အဓိကကျတဲ့နေရာမှာ ပါ၀င်ပါတယ်။ Spec သည် Array/List type ဖြစ်ပါတယ်။ Spec: ရဲ့အောက်မှာတော့  containers child object တစ်ခုပါရှိပြီး သူ့ရဲ့ အောက်မှာ က  pod က ယူသုံးမယ့် image name: nginx နဲ့ pod name တို့ကို ပါ၀င်ပြီး နောက် nginx အတွက် သုံးမယ့် port: 8080 ဆိုပြီးတော့ ဖော်ပြထားတာဖြစ်ပါတယ်။

                        အခု YAML definition file တစ်ခု တည်ဆောက်ပြီးပြီဆိုတော့ ဒီ file နဲ့ pod တစ်ခု create လုပ်ဖို့ရန်အတွက် "kubectl create" ကို အသုံးပြု၍ တည်ဆောက်မှာဖြစ်ပါတယ်။ 

Figure2: Using kubectl create to deploy pod-YAML definition file


How to modify a pod?


                အခုဆိုရင် kubectl create နဲ့ pod တစ်ခု တည်ဆောက်လို့ပြီးသွားပီဖြစ်ပါတယ်။ တည်ဆောက်လို့ပြီးသွားတဲ့ pod ကို modify လုပ်ချင်တယ် ဥပမာ image ကို nginx မဟုတ်ပဲ httpd image သုံးချင်တယ်ဆိုရင် "kubectl edit pod <pod-name>" ဆိုပြီး edit လုပ်လို့ရပါတယ်။ အရင်ဆုံး လက်ရှိ run နေတဲ့ pod ရဲ့ image အမျိုးအစားကို ကြည့်ဖို့အတွက် "kubectl describe pod <pod-name>" ဆိုပြီး အသုံးပြုရပါမယ်။ 




                   ပြီးရင် "kubectl edit pod <pod-name>" နဲ့ ၀င်ပြီး image: nginx နေရာမှာ image: httpd ဆိုပြီး ပြင်

လိုက်မယ် ပြီးရင် vi mode ဖြစ်တဲ့ :wq! နှင့် ထွက်ပြီးတော့ "kubectl describe" ဖြင့် ပြန်ကြည့်တဲ့အခါမှာ image: 

httpd ဖြစ်နေပြီး Event session မှာလဲ image အသစ်တစ်ခု pulling လုပ်သွားတာ တွေ့ရမှာဖြစ်ပါတယ်။  





             Pod ကို edit လုပ်ဖို့ နောက်တစ်နည်းအနေနဲ့ YAML definition file ကို editor တစ်ခုခု နဲ့ဖွင့် (i.e Vi) edit 

လုပ်ပြီးတော့ "kubectl apply -f xxx.yaml" ဆိုပြီး အသုံးပြုနိုင်ပါတယ်။ အခုနည်းကတော့ တိုက်ရိုက် edit လုပ်

တာမဟုတ်ပဲ YAML ကိုပြန်ပြင်ပြီးတော့ pod ကို edit လုပ်တာဖြစ်ပါတယ်။





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