په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

موږ به د k8s - اصلي ارګو رول آوټ ګمارنې کنټرولر او GitlabCI وکاروو ترڅو کوبرنیټس ته د کانري ګمارنې چلولو لپاره

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

https://unsplash.com/photos/V41PulGL1z0

په دې لړ کې مقالې

د کانري ګمارل

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

د ارګو رولونه

ارګو رولاټس د کوبرنیټس اصلي ځای پرځای کولو کنټرولر دی. دا د Kubernetes لپاره CRD (د ګمرک سرچینې تعریف) چمتو کوي. د دې څخه مننه، موږ کولی شو یو نوی اداره وکاروو: Rollout، کوم چې د مختلف ترتیب کولو اختیارونو سره نیلي - شنه او کانري ګمارنې اداره کوي.

د ارګو رول آوټ کنټرولر د دودیز سرچینې لخوا کارول کیږي Rollout, د اضافي ګمارنې ستراتیژیو ته اجازه ورکوي لکه نیلي شنه او کینري د Kubernetes لپاره. سرچینه Rollout فعالیت برابروي Deployment، یوازې د اضافي ګمارنې ستراتیژیو سره.
د منابعو د Deployments د ګمارنې لپاره دوه ستراتیژۍ لري: RollingUpdate и Recreate. که څه هم دا ستراتیژۍ د ډیری قضیو لپاره مناسب دي، په لویه پیمانه سرورونو ته د ګمارلو لپاره، اضافي ستراتیژۍ کارول کیږي، لکه نیلي شنه یا کانري، کوم چې د ډیپلومینټ کنټرولر کې شتون نلري. په Kubernetes کې د دې ستراتیژیو کارولو لپاره، کاروونکي باید د دوی د ځای پرځای کولو په سر کې سکریپټونه ولیکي. د ارګو رول آوټ کنټرولر دا ستراتیژیانې د ساده، اعلاناتي، ترتیب وړ پیرامیټونو په توګه افشا کوي.
https://argoproj.github.io/argo-rollouts

دلته د ارګو CI هم شتون لري ، کوم چې د رول آوټ سره کارولو لپاره یو مناسب ویب انٹرفیس چمتو کوي ، موږ به په راتلونکي مقاله کې ورته نظر واچوو.

د ارګو رول آوټ نصب کول

د سرور اړخ

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

زموږ په زیربناوو شلم کې (لاندې وګورئ) موږ دمخه د i/k8s/argo-rollouts/install.yaml په توګه install.yaml اضافه کړی دی. پدې توګه GitlabCI به دا په کلستر کې نصب کړي.

د پیرودونکي اړخ (کیوبیکیل پلگ ان)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

د غوښتنلیک بیلګه

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

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

Kim Wuestkamp/k8s-deployment-example-app

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

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

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

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

پدې ذخیره کې به موږ ګیټلاب سی آی کوبرنیټس ته د ځای په ځای کولو لپاره وکاروو ، gitlab-ci.yml داسې ښکاري:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy 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: rollout-canary
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

او rollout.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout د ځای پرځای کولو په څیر کار کوي. که موږ د تازه کولو ستراتیژي جوړه نه کړو (لکه کینري دلته) دا به د ډیفالټ رولینګ اپډیټ پلي کولو په څیر چلند وکړي.

موږ د کانري ګمارنې لپاره په یامل کې دوه مرحلې تعریف کوو:

  1. کانري ته د ټرافیک 10٪ (د لارښود سم لپاره انتظار وکړئ)
  2. کانري ته 50٪ ترافیک (2 دقیقې انتظار وکړئ بیا 100٪ ته دوام ورکړئ)

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

د لومړني ګمارنې وروسته، زموږ سرچینې به داسې ښکاري:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

او موږ یوازې د غوښتنلیک له لومړۍ نسخې څخه ځواب ترلاسه کوو:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

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

مرحله 1: 10٪ ترافیک

د کانري ګمارنې پیل کولو لپاره، موږ یوازې د عکس نسخه بدلولو ته اړتیا لرو لکه څنګه چې موږ معمولا د ځای پرځای کولو سره کوو:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

او موږ بدلونونه فشار راوړو، نو د ګیټلاب CI ځای پرځای کوي او موږ بدلونونه ګورو:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

اوس که موږ خدمت ته لاسرسی ومومئ:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

غوره! موږ زموږ د کانري ګمارلو په مینځ کې یو. موږ کولی شو د چلولو له لارې پرمختګ وګورو:

kubectl argo rollouts get rollout rollout-canary

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

مرحله 2: 50٪ ترافیک:

اوس راځئ چې بل ګام ته لاړ شو: د ټرافیک 50٪ بیرته لیږل. موږ دا مرحله په لاسي ډول د چلولو لپاره تنظیم کړه:

kubectl argo rollouts promote rollout-canary # continue to step 2

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

او زموږ غوښتنلیک د نوي نسخو څخه 50٪ ځوابونه بیرته راستانه کړل:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

او د رول آوټ بیاکتنه:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

Прекрасно

مرحله 3: 100٪ ترافیک:

موږ دا ترتیب کړی ترڅو د 2 دقیقو وروسته 50٪ مرحله په اوتومات ډول پای ته ورسیږي او 100٪ مرحله پیل شي:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

او د غوښتنلیک محصول:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

او د رول آوټ بیاکتنه:

په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ

د کانري ګمارل بشپړ شوي دي.

د ارګو رول آوټ سره نور مثالونه

دلته ډیر مثالونه شتون لري، لکه څنګه چې د چاپیریال مخکتنې تنظیم کول او د کانري پراساس پرتله کول:

https://github.com/argoproj/argo-rollouts/tree/master/examples

د ارګو رول اوټس او ارګو CI په اړه ویډیو

زه واقعیا دا ویډیو وړاندیز کوم ، دا ښیې چې څنګه د ارګو رول اوټس او ارګو CI یوځای کار کوي:

نتیجه

زه واقعیا د CRDs کارولو مفکوره خوښوم چې د اضافي ډولونو ګمارلو یا نقلونو رامینځته کولو اداره کوي ، ټرافيکي لارښود کوي ، او داسې نور. د دوی سره کار په اسانۍ سره پرمخ ځي. بل زه غواړم د ارګو CI سره ادغام ازموینه وکړم.

په هرصورت ، داسې بریښي چې د ارګو CI او فلکس CI لوی ادغام راځي ، نو زه ممکن انتظار وکړم تر هغه چې نوې خوشې شي: ارګو فلکس.

ایا تاسو د ارګو رول آؤټس یا ارګو CI سره کومه تجربه لرئ؟

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

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

Add a comment