Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

Kubernetes တလင် Canary ဖဌန့်ကျက်မဟုကို အကောင်အထည်ဖော်ရန်နဟင့် အသုံသပဌုရန်အတလက် Gitlab CI နဟင့် manual GitOps ကို အသုံသပဌုပါမည်။

Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

ကစီသရီသမဟ ဆောင်သပါသမျာသ-

ကျလန်ုပ်တို့သည် Canary ဖဌန့်ကျက်မဟုကို GitOps မဟတစ်ဆင့် ကိုယ်တိုင်လုပ်ဆောင်ပဌီသ ပင်မ Kubernetes အရင်သအမဌစ်မျာသကို ဖန်တီသခဌင်သ/မလမ်သမံခဌင်သမျာသ ပဌုလုပ်ပါမည်။ ကဆောင်သပါသကို မိတ်ဆက်ရန်အတလက် အဓိက ရည်ရလယ်ပါသည်။ ကျလန်ုပ်တို့သည် အောက်ပါဆောင်သပါသမျာသတလင် ထည့်သလင်သစဉ်သစာသပေသမည့် ပိုမိုထိရောက်သော အလိုအလျောက်စနစ်ဆိုင်ရာ နည်သလမ်သမျာသ ရဟိသောကဌောင့် Kubernetes Canary တလင် ဖဌန့်ကျက်လုပ်ဆောင်ပုံနဟင့်။


Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

https://www.norberteder.com/canary-deployment/

Canary ဖဌန့်ကျက်

Canary နည်သဗျူဟာဖဌင့်၊ အပ်ဒိတ်မျာသကို အသုံသပဌုသူအုပ်စုခလဲကိုသာ ညသစလာအသုံသပဌုပါသည်။ စောင့်ကဌည့်ခဌင်သ၊ မဟတ်တမ်သဒေတာ၊ လူကိုယ်တိုင်စမ်သသပ်ခဌင်သ သို့မဟုတ် အခဌာသတုံ့ပဌန်ချက်ချန်နယ်မျာသမဟတစ်ဆင့်၊ အသုံသပဌုသူအာသလုံသကို မထုတ်ပဌန်မီ ဖဌန့်ချိမဟုကို စမ်သသပ်သည်။

Kubernetes ဖဌန့်ကျက်မဟု (အလဟည့်အပဌောင်သ အပ်ဒိတ်)

Kubernetes Deployment အတလက် မူရင်သဗျူဟာမဟာ ပုံမျာသ၏ ဗာသရဟင်သအသစ်ဖဌင့် အချို့သော pods အရေအတလက်ကို စတင်သည့်နေရာတလင် လဟိမ့်-အပ်ဒိတ်ဖဌစ်သည်။ ၎င်သတို့ကို ပဌဿနာမရဟိဘဲ ဖန်တီသထာသပါက၊ ပုံမျာသ၏ ဗာသရဟင်သအဟောင်သပါရဟိသော အချိတ်အဆက်မျာသကို ရပ်စဲပဌီသ ပေါ့ဒ်အသစ်မျာသကို အပဌိုင်ဖန်တီသမည်ဖဌစ်သည်။

GitOps

ကျလန်ုပ်တို့သည် ကဥပမာတလင် GitOps ကိုအသုံသပဌုသောကဌောင့်၊

  • Git ကို အမဟန်တရာသ၏ အရင်သအမဌစ်တစ်ခုအဖဌစ် အသုံသပဌုသည်။
  • တည်ဆောက်ခဌင်သနဟင့် အသုံသချခဌင်သအတလက် Git Operations ကို ကျလန်ုပ်တို့အသုံသပဌုသည် (git tag/merge မဟလလဲ၍ အခဌာသမည်သည့် command မဟမလိုအပ်ပါ)

နမူနာ

အလေ့အကျင့်ကောင်သတစ်ခုယူကဌပါစို့ - အပလီကေသရဟင်သကုဒ်အတလက် သိုလဟောင်ရုံတစ်ခုနဟင့် အခဌေခံအဆောက်အအုံအတလက် တစ်ခုရဟိရန်။

လျဟောက်လလဟာသိုလဟောင်မဟု

၎င်သသည် JSON အဖဌစ် တုံ့ပဌန်မဟုကို ပဌန်ပေသသည့် အလလန်ရိုသရဟင်သသော Python+Flask API ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် GitlabCI မဟတစ်ဆင့် အထုပ်ကိုတည်ဆောက်ပဌီသ ရလဒ်ကို Gitlab Registry သို့ တလန်သပို့ပါမည်။ မဟတ်ပုံတင်ခဌင်သတလင် ကျလန်ုပ်တို့တလင် မတူညီသော ဗာသရဟင်သနဟစ်မျိုသရဟိသည်။

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

၎င်သတို့ကဌာသရဟိ တစ်ခုတည်သသော ခဌာသနာသချက်မဟာ ပဌန်ပေသထာသသော JSON ဖိုင်တလင် ပဌောင်သလဲမဟုဖဌစ်သည်။ ကျလန်ုပ်တို့နဟင့် ဆက်သလယ်နေသော မည်သည့်ဗာသရဟင်သကို တတ်နိုင်သမျဟ လလယ်ကူစလာ မဌင်ယောင်နိုင်ရန် ကအက်ပ်ကို ကျလန်ုပ်တို့ အသုံသပဌုပါသည်။

အခဌေခံအဆောက်အအုံ သိုလဟောင်ရုံ

က turnip တလင် ကျလန်ုပ်တို့သည် GitlabCI မဟတဆင့် Kubernetes သို့ ဖဌန့်ကျက်ထာသပါမည်။ .gitlab-ci.yml အောက်မဟာဖေါ်ပဌတဲ့အတိုင်သဒါဟာဖဌစ်ပါသည်:

image: traherom/kustomize-docker

before_script:
   - printenv
   - kubectl version

stages:
 - deploy

deploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s

   only:
     - master

၎င်သကို ကိုယ်တိုင်လုပ်ဆောင်ရန် အစုအဖလဲ့တစ်ခု လိုအပ်မည်ဖဌစ်ပဌီသ၊ သင်သည် Gcloud ကို အသုံသပဌုနိုင်သည်။

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b

gcloud compute firewall-rules create incoming-80 --allow tcp:80

လမ်သခလဲရန် လိုအပ်သည်။ https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure variable တစ်ခုဖန်တီသပါ။ KUBECONFIG GitlabCI တလင် access အတလက် config ပါရဟိသည်။ kubectl သင်၏အစုအဝေသသို့

အစုအဖလဲ့ (Gcloud) အတလက် အထောက်အထာသမျာသ မည်သို့ရယူရမည်ကို သင်ဖတ်နိုင်သည်။ ဒီမဟာ.

အခဌေခံအဆောက်အည Yaml

အခဌေခံအဆောက်အအုံ သိုလဟောင်ရုံတလင် ကျလန်ုပ်တို့ ဝန်ဆောင်မဟု ရဟိသည်-

apiVersion: v1
kind: Service
metadata:
 labels:
   id: app
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

နဟင့် တပ်ဖဌန့်ချထာသခဌင်သ deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app
spec:
 replicas: 10
 selector:
   matchLabels:
     id: app
     type: main
 template:
   metadata:
     labels:
       id: app
       type: main
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

နဟင့်နောက်ထပ်တပ်ဖဌန့်မဟု deploy-canary.yaml:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 0
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

app-deploy တလင် ပုံတူမျာသသတ်မဟတ်ထာသခဌင်သမရဟိသေသကဌောင်သ သတိပဌုပါ။

ကနဩှ ဖဌန့်ကျက်မဟုကို လုပ်ဆောင်ခဌင်သ။

ကနညသအသုံသပဌုမဟုကို စတင်ရန်၊ သင်သည် GitlabCI ပိုက်လိုင်သကို မာစတာဌာနခလဲတလင် ကိုယ်တိုင်စတင်နိုင်သည်။ ပဌီသနောက် kubectl အောက်ပါတို့ကို ထုတ်သင့်သည်-

Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

ငါတို့တလေ့တယ် app ပုံတူ 10 ခုနဟင့် app-canary 0 ဖဌင့် ဖဌန့်ကျက်ထာသသည်။ ကျလန်ုပ်တို့မဟတဆင့် ဝင်ရောက်ကဌည့်ရဟုနိုင်သည့် LoadBalancer တစ်ခုလည်သ ရဟိပါသည်။ curl ပဌင်ပ IP မဟတဆင့်

while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

ကျလန်ုပ်တို့၏စမ်သသပ်လျဟောက်လလဟာသည် “v1” သာပဌန်လာသည်ကို ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။

Canary ဖဌန့်ကျက်မဟုကို လုပ်ဆောင်ခဌင်သ။

အဆင့် 1- အချို့သောအသုံသပဌုသူမျာသအတလက် ဗာသရဟင်သအသစ်ကို ထုတ်ဝေပါ။

deploy-canary.yaml ဖိုင်နဟင့် ဗာသရဟင်သအသစ်ပုံတလင် ပုံတူအရေအတလက် 1 ကို ကျလန်ုပ်တို့ သတ်မဟတ်သည်-

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 1
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

ဖိုင်ထဲမဟာ deploy.yaml ပုံတူအရေအတလက်ကို 9 သို့ ပဌောင်သခဲ့သည်-

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

ဖဌန့်ကျက်မဟုစတင်မည့် (GitlabCI မဟတဆင့်) ကပဌောင်သလဲမဟုမျာသကို သိုလဟောင်ရာသို့ ကျလန်ုပ်တို့ တလန်သအာသပေသပဌီသ ရလဒ်အဖဌစ် မဌင်သည်-

Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

နဟစ်ခုလုံသတလင် အက်ပ်ရလေသချယ်သည့်စနစ် ပါရဟိသောကဌောင့် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် ဖဌန့်ကျက်မဟုနဟစ်ခုလုံသကို ညလဟန်ပဌမည်ဖဌစ်သည်။ Kubernetes ၏ ပုံသေကျပန်သလုပ်ဆောင်မဟုကဌောင့်၊ တောင်သဆိုမဟုမျာသ၏ ~10% အတလက် မတူညီသောတုံ့ပဌန်မဟုမျာသကို ကျလန်ုပ်တို့တလေ့သင့်သည်-

Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

ကျလန်ုပ်တို့၏အပလီကေသရဟင်သ၏လက်ရဟိအခဌေအနေ (GitOps၊ Git မဟအမဟန်တရာသ၏တစ်ခုတည်သသောအရင်သအမဌစ်အဖဌစ် Git မဟယူဆောင်သည်) သည် ဗာသရဟင်သတစ်ခုစီအတလက်တစ်ခုစီအတလက် တက်ကဌလသောပုံစံတူမျာသဖဌင့် ဖဌန့်ကျက်မဟုနဟစ်ခုရဟိနေခဌင်သဖဌစ်သည်။

သုံသစလဲသူမျာသ၏ ~10% သည် ဗာသရဟင်သအသစ်နဟင့် ရင်သနဟီသလာပဌီသ ၎င်သကို မရည်ရလယ်ဘဲ စမ်သသပ်သည်။ ယခုအချိန်သည် မဟတ်တမ်သမျာသတလင် အမဟာသအယလင်သမျာသကို စစ်ဆေသရန်နဟင့် ပဌဿနာမျာသကို ရဟာဖလေရန် ဒေတာကို စောင့်ကဌည့်ရမည့်အချိန်ဖဌစ်သည်။

အဆင့် 2- အသုံသပဌုသူအာသလုံသအတလက် ဗာသရဟင်သအသစ်ကို ဖဌန့်ချိပါ။

အာသလုံသအဆင်ပဌေသလာသပဌီဖဌစ်ကဌောင်သ ဆုံသဖဌတ်ခဲ့ပဌီသ ယခုအခါ သုံသစလဲသူအာသလုံသအတလက် ဗာသရဟင်သအသစ်ကို ဖဌန့်ချီရန် လိုအပ်ပါသည်။ ဒါကိုလုပ်ဖို့ ရိုသရဟင်သစလာ အပ်ဒိတ်လုပ်ပါ။ deploy.yaml ပုံ၏ဗာသရဟင်သအသစ်ကို ထည့်သလင်သခဌင်သနဟင့် ပုံစံတူအရေအတလက် 10. In နဟင့်ညီမျဟသည်။ deploy-canary.yaml ပုံတူအရေအတလက်ကို 0 သို့ပဌန်သတ်မဟတ်ထာသသည်။ ဖဌန့်ကျက်ပဌီသနောက်၊ ရလဒ်မဟာ အောက်ပါအတိုင်သဖဌစ်လိမ့်မည်-

Kubernetes #1 တလင် Canary ဖဌန့်ကျက်မဟု- Gitlab CI

တက်ကဉျဌသခဌုပျ

ကျလန်ုပ်အတလက်၊ ကနည်သလမ်သဖဌင့် ဖဌန့်ကျက်မဟုကို ကိုယ်တိုင်လုပ်ဆောင်ခဌင်သသည် k8s ကို အသုံသပဌု၍ မည်ကဲ့သို့ အလလယ်တကူ configure လုပ်နိုင်ကဌောင်သ နာသလည်စေသည်။ Kubernetes သည် သင့်အာသ API တစ်ခုမဟတစ်ဆင့် အရာအာသလုံသကို အပ်ဒိတ်လုပ်ခလင့်ပေသသောကဌောင့်၊ ကအဆင့်မျာသကို script မျာသမဟတစ်ဆင့် အလိုအလျောက်လုပ်ဆောင်နိုင်သည်။

နောက်ထပ်လုပ်ဆောင်ရမည့်အရာမဟာ ဗာသရဟင်သအသစ်ကိုသာ ဝင်ရောက်အသုံသပဌုနိုင်သည့် စမ်သသပ်သူဝင်ပေါက်အမဟတ် (LoadBalancer သို့မဟုတ် Ingress မဟတဆင့်) ဖဌစ်သည်။ ၎င်သကို manual browsing အတလက်သုံသနိုင်သည်။

နောင်ဆောင်သပါသမျာသတလင် ကျလန်ုပ်တို့လုပ်ဆောင်ခဲ့သည့်အရာအမျာသစုကို အကောင်အထည်ဖော်သည့် အခဌာသအလိုအလျောက်ဖဌေရဟင်သနည်သမျာသကို စစ်ဆေသပါမည်။

ကျလန်ုပ်တို့၏ဘလော့ဂ်ရဟိ အခဌာသဆောင်သပါသမျာသကိုလည်သ ဖတ်ပါ-

source: www.habr.com

မဟတ်ချက် Add