Thuta Learning
ရှာဖွေရန်
IntermediateDevOpsintermediate

Deployments

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Deployments ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် kubectl command/YAML ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Deployment က Pod ကို တိုက်ရိုက် မဟုတ်ဘဲ 'ReplicaSet' ကနေတစ်ဆင့် စီမံပေးပါတယ် — 'ဒီ image ကနေ pod ၃ ခု အမြဲရှိစေချင်တယ်' လို့ desired state ကို ပြောလိုက်ရင် Deployment က အဲဒီ state ကို အမြဲထိန်းပေးပါတယ်။ Pod တစ်ခု crash သွားရင် Deployment က ချက်ချင်း pod အသစ်တစ်ခု ပြန်ဖန်တီးပေးပါတယ် (ကျန် pod ၂ ခု ၃ ခုပြည့်အောင်)။ Deployment ကို update လုပ်ရင် (image version အသစ်) rolling update (နောက် chapter) ကိုပါ automatic လုပ်ပေးပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Deployment YAML ထဲမှာ `replicas: 3` လို့ ရေးလိုက်ရင် pod ၃ ခု အမြဲရှိအောင် ထိန်းပေးပါတယ်။ Pod တစ်ခုကို manual `kubectl delete pod` နဲ့ ဖျက်ကြည့်ရင်တောင် Deployment က ချက်ချင်း pod အသစ်ပြန်ဖန်တီးလာတာ တွေ့ရမှာပါ — ဒါက Deployment ရဲ့ self-healing power ကို ကိုယ်တိုင် သက်သေပြတဲ့ demo ပါ။

အတူတူ ကြည့်မယ်

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:latest
          ports:
            - containerPort: 80
You should see
$ kubectl apply -f deployment.yaml
deployment.apps/web-deployment created

$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
web-deployment-7d9f8c6b5-abc12    1/1     Running   0          5s
web-deployment-7d9f8c6b5-def34    1/1     Running   0          5s
web-deployment-7d9f8c6b5-ghi56    1/1     Running   0          5s

၅ မိနစ် စမ်းကြည့်

အထက်က Deployment ကို apply လုပ်ပြီး pod ၃ ခု run နေတာ ကြည့်ပါ — pod တစ်ခုကို `kubectl delete pod <name>` နဲ့ ဖျက်ကြည့်ပြီး ပြန်ပေါ်လာတာ (self-healing) ကို သက်သေပြကြည့်ပါ။

သတိလေးတစ်ချက်

Deployment ကို ဖျက်ရင် (`kubectl delete deployment`) ချုပ်ချယ်ထားတဲ့ pod အားလုံးပါ ပါသွားပါတယ် — pod တစ်ခုတည်းပဲ ဖျက်ချင်ရင် pod ကို တိုက်ရိုက် target လုပ်ပါ (Deployment မဟုတ်ပါ)။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Deployment metadata.labels နဲ့ selector.matchLabels ကို မကိုက်အောင် ရေးမိခြင်း — ကိုက်မှ Deployment က ကိုယ့် pod ဘယ်ဟာလဲ သိပါတယ်
  • replicas အရေအတွက်ကို production traffic နဲ့ မကိုက်ညီအောင် ချထားခြင်း (နည်းလွန်း/များလွန်း)

အခု ကိုယ်တိုင် စမ်းကြည့်

အထက်က Deployment ကို apply လုပ်ပြီး pod ၃ ခု run နေတာ ကြည့်ပါ — pod တစ်ခုကို `kubectl delete pod <name>` နဲ့ ဖျက်ကြည့်ပြီး ပြန်ပေါ်လာတာ (self-healing) ကို သက်သေပြကြည့်ပါ။

You'll know it worked when: $ kubectl apply -f deployment.yaml deployment.apps/web-deployment created $ kubectl get pods NAME READY STATUS RESTARTS AGE web-deployment-7d9f8c6b5-abc12 1/1 Running 0 5s web-deployment-7d9f8c6b5-def34 1/1 Running 0 5s web-deployment-7d9f8c6b5-ghi56 1/1 Running 0 5s

Deployments | Thuta Learning