په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

موږ به ګیټلاب CI او لارښود GitOps په کبرنیټس کې د کانري ګمارنې پلي کولو او کارولو لپاره وکاروو

په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

د دې لړۍ مقالې:

موږ به د کانري ګمارنه په لاسي ډول د GitOps له لارې ترسره کړو او د اصلي Kubernetes سرچینې رامینځته کول / تعدیل کوو. دا مقاله په اصل کې د پیژندنې لپاره ده په کوبرنیټس کانري کې د ګمارنې څرنګوالي سره ، ځکه چې د اتومات کولو خورا مؤثر میتودونه شتون لري ، کوم چې موږ به په لاندې مقالو کې په پام کې ونیسو.


په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

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

د کانري ګمارل

د کانري ستراتیژۍ سره، تازه معلومات لومړی د کاروونکو یو فرعي برخې ته پلي کیږي. د څارنې، لاګ ډیټا، لاسي ازموینې، یا نورو فیډبیک چینلونو له لارې، خوشې کول مخکې له دې چې ټولو کاروونکو ته خپور شي ازمول کیږي.

د کوبرنیټس ګمارنه (رولینګ تازه کول)

د کوبرنیټس ګمارنې لپاره ډیفالټ ستراتیژي رولینګ تازه کول دي ، چیرې چې یو ټاکلی شمیر پوډونه د عکسونو نوي نسخو سره پیل شوي. که دوی له ستونزو پرته رامینځته شوي وي ، د عکسونو د زړو نسخو سره پوډونه ختم شوي ، او نوي پوډونه په موازي ډول رامینځته کیږي.

GitOps

موږ پدې مثال کې GitOps کاروو ځکه چې موږ:

  • د حقیقت د یوې سرچینې په توګه د Git کارول
  • موږ د جوړولو او پلي کولو لپاره د Git عملیات کاروو (د git ټاګ / ادغام پرته بل کوم قوماندې ته اړتیا نشته)

بېلګه:

راځئ چې یو ښه تمرین وکړو - د غوښتنلیک کوډ لپاره یو ذخیره او یو د زیربنا لپاره.

د غوښتنلیک ذخیره

دا یو خورا ساده Python + Flask API دی چې د JSON په توګه ځواب بیرته راګرځوي. موږ به بسته د GitlabCI له لارې جوړه کړو او پایله به د ګیټلاب راجسټری ته واړوو. په راجسټری کې موږ دوه مختلف خوشې نسخې لرو:

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

د دوی ترمنځ یوازینی توپیر د بیرته راستنیدونکي JSON فایل کې بدلون دی. موږ دا اپلیکیشن د امکان تر حده په اسانۍ سره لیدو لپاره کاروو چې کومه نسخه موږ ورسره اړیکه ونیسو.

د زیربنا ذخیره

پدې شلم کې به موږ د ګیټلاب سی آی له لارې کبرنیټس ته ځای په ځای کړو ، .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 او یو متغیر جوړ کړئ KUBECONFIG په GitlabCI کې، کوم چې به د لاسرسي لپاره ترتیب ولري kubectl ستاسو کلستر ته.

تاسو کولی شئ د کلستر (Gcloud) لپاره د اعتبار ترلاسه کولو څرنګوالي په اړه ولولئ سمه ده.

زیربنا یامل

د زیربنا ذخیره کې موږ خدمت لرو:

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

په یاد ولرئ چې د اپلیکیشن تعیین تر اوسه کوم نقلونه ندي تعریف شوي.

د ابتدايي ګمارنې ترسره کول

د لومړني ګمارنې پیل کولو لپاره ، تاسو کولی شئ په ماسټر برانچ کې د GitlabCI پایپ لاین په لاسي ډول پیل کړئ. وروسته لدې kubectl باید لاندې تولید کړي:

په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

موږ وینو app د 10 نقلونو سره ځای په ځای کول او د 0 سره ایپ کینري. دلته یو LoadBlancer هم شتون لري چې موږ یې له لارې لاسرسی کولی شو curl د بهرني IP له لارې:

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

په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

موږ ګورو چې زموږ د ازموینې غوښتنلیک یوازې "v1" بیرته راګرځي.

د کانري ګمارنې اجرا کول

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 له لارې) او د پایلې په توګه وګورو:

په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

زموږ خدمت به دواړه ګمارنې ته اشاره وکړي ، ځکه چې دواړه د ایپ انتخاب کونکی لري. د Kubernetes د ډیفالټ تصادفي کولو له امله، موږ باید د 10٪ غوښتنو لپاره مختلف ځوابونه وګورو:

په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

زموږ د غوښتنلیک اوسنی حالت (GitOps، د حقیقت د واحد سرچینې په توګه د Git څخه اخیستل شوی) د فعال نقلونو سره د دوه ګومارلو شتون دی، د هرې نسخې لپاره یو.

~ 10٪ کارونکي د نوي نسخې سره آشنا کیږي او په غیر ارادي ډول یې ازموینه کوي. اوس وخت دی چې د ستونزو موندلو لپاره په لاګونو کې د غلطیو او څارنې ډیټا چیک کړئ.

2 ګام: ټولو کاروونکو ته نوې نسخه خوشې کړئ

موږ پریکړه وکړه چې هرڅه سم پرمخ لاړل او اوس موږ اړتیا لرو چې نوې نسخه ټولو کاروونکو ته وړاندې کړو. د دې کولو لپاره موږ په ساده ډول تازه کوو deploy.yaml د عکس نوې نسخه نصب کول او د 10 سره مساوي د عکسونو شمیر deploy-canary.yaml موږ د نقلونو شمیر بیرته 0 ته وټاکو. د ځای پرځای کولو وروسته، پایله به په لاندې ډول وي:

په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI

لنډیز لپاره

زما لپاره، په لاسي ډول د ګومارنې چلول د دې په پوهیدو کې مرسته کوي چې دا د k8s په کارولو سره څومره په اسانۍ سره تنظیم کیدی شي. څرنګه چې کوبرنیټس تاسو ته اجازه درکوي د API له لارې هرڅه تازه کړئ، دا مرحلې د سکریپټونو له لارې اتومات کیدی شي.

بل شی چې پلي کولو ته اړتیا لري د ټیسټر ننوتلو نقطه ده (لوډ بیلانسر یا د انګریس له لارې) چې له لارې یې یوازې نوې نسخه لاسرسی کیدی شي. دا د لاسي لټون کولو لپاره کارول کیدی شي.

په راتلونکو مقالو کې، موږ به نور اتوماتیک حلونه وګورو چې ډیری هغه څه پلي کوي چې موږ یې کړي دي.

زموږ په بلاګ کې نورې مقالې هم ولولئ:

سرچینه: www.habr.com

Add a comment