ڪبرنيٽس #2 ۾ ڪينري جي تعیناتي: آرگو رول آئوٽ

اسان ڪبرنيٽس تائين ڪينري ڊيپلائيمينٽ کي هلائڻ لاءِ k8s-native Argo Rollouts deployment ڪنٽرولر ۽ GitlabCI استعمال ڪنداسين.

ڪبرنيٽس #2 ۾ ڪينري جي تعیناتي: آرگو رول آئوٽ

https://unsplash.com/photos/V41PulGL1z0

هن سلسلي ۾ آرٽيڪل

ڪينري لڳائڻ

اسان کي اميد آهي ته توهان پڙهيو پهريون حصو، جتي اسان مختصر طور تي وضاحت ڪئي ته ڪينري ڊيپلائيمينٽ ڇا آهن. اسان اهو پڻ ڏيکاريو ته ان کي ڪيئن لاڳو ڪجي معياري ڪبرنيٽس وسيلن کي استعمال ڪندي.

آرگو رول آئوٽ

Argo Rollouts هڪ Kubernetes ڏيهي مقرري ڪنٽرولر آهي. اهو مهيا ڪري ٿو CRD (ڪسٽم ريسورس ڊيفينيشن) Kubernetes لاءِ. ان جي مهرباني، اسان هڪ نئون ادارو استعمال ڪري سگهون ٿا: Rollout، جيڪو مختلف ترتيبن جي اختيارن سان نيري-سائي ۽ ڪينري جي ترتيبن کي منظم ڪري ٿو.

Argo Rollouts ڪنٽرولر استعمال ٿيل ڪسٽم وسيلن طرفان Rollout, اضافي ترتيب ڏيڻ واري حڪمت عملي جي اجازت ڏئي ٿي جهڙوڪ نيرو-سائي ۽ ڪنري ڪبرنيٽس لاءِ. وسيلو Rollout ڪارڪردگي جي برابر مهيا ڪري ٿي Deployment، صرف اضافي لڳائڻ واري حڪمت عملي سان.
وسيلن جي Deployments تعیناتي لاءِ ٻه حڪمت عمليون آهن: RollingUpdate и Recreate. جيتوڻيڪ اهي حڪمت عمليون اڪثر ڪيسن لاءِ موزون آهن، تمام وڏي پيماني تي سرورز تي لڳائڻ لاءِ، اضافي حڪمت عمليون استعمال ڪيون وينديون آهن، جهڙوڪ نيرو-سائي يا ڪينري، جيڪي ڊيپلائيمينٽ ڪنٽرولر ۾ موجود نه هونديون آهن. ڪبرنيٽس ۾ انهن حڪمت عملين کي استعمال ڪرڻ لاءِ، صارفين کي انهن جي ڊيپلائيمينٽس جي مٿان اسڪرپٽ لکڻو پوندو هو. Argo Rollouts Controller انهن حڪمت عملين کي ظاهر ڪري ٿو سادو، بيان ڪندڙ، ترتيب ڏيڻ وارو پيٽرول.
https://argoproj.github.io/argo-rollouts

هتي پڻ آهي Argo CI، جيڪو رول آئوٽ سان استعمال ڪرڻ لاءِ هڪ آسان ويب انٽرفيس مهيا ڪري ٿو، اسان ان تي هڪ نظر وجهنداسين ايندڙ مضمون ۾.

آرگو رول آئوٽ کي انسٽال ڪرڻ

سرور طرف

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

اسان جي انفراسٽرڪچر ٽرنپ ۾ (هيٺ ڏسو) اسان اڳ ۾ ئي شامل ڪيو آهي install.yaml جيئن i/k8s/argo-rollouts/install.yaml. هن طريقي سان GitlabCI ان کي ڪلستر ۾ انسٽال ڪندو.

ڪلائنٽ سائڊ (kubectl پلگ ان)

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

مثال جي درخواست

اهو سٺو عمل آهي ته ايپليڪيشن ڪوڊ ۽ انفراسٽرڪچر لاءِ الڳ مخزن.

اپليڪيشن لاء مخزن

Kim Wuestkamp/k8s-deployment-example-app

هي هڪ تمام سادو Python+Flask API آهي جيڪو JSON طور جواب ڏئي ٿو. اسان GitlabCI استعمال ڪندي پيڪيج ٺاهينداسين ۽ نتيجو کي Gitlab رجسٽري ڏانهن ڌڪينداسين. رجسٽري ۾ اسان وٽ ٻه مختلف رليز ورجن آهن:

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

انهن جي وچ ۾ فرق صرف JSON فائل واپسي آهي. اسان هي ايپليڪيشن استعمال ڪريون ٿا آساني سان ڏسڻ لاءِ جنهن ورزن سان اسان رابطو ڪري رهيا آهيون.

انفراسٽرڪچر مخزن

هن مخزن ۾ اسان استعمال ڪنداسين GitlabCI کي ڪبرنيٽس تي لڳائڻ لاءِ، .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).

انفراسٽرڪچر Yaml

انفراسٹرڪچر جي مخزن جي اندر اسان وٽ خدمت آهي:

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 ساڳيء طرح ڪم ڪري ٿو Deployment. جيڪڏهن اسان هڪ تازه ڪاري حڪمت عملي مقرر نه ڪندا آهيون (جهڙوڪ هتي ڪينري) اهو ڊفالٽ رولنگ-اپڊيٽ ڊيپلائيمينٽ وانگر عمل ڪندو.

اسان ڪينري جي تعیناتي لاءِ يامل ۾ ٻه قدم بيان ڪريون ٿا:

  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
...

۽ اسان تبديلين کي زور ڏيو ٿا، تنهنڪري Gitlab 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 ۾ ڪينري جي تعیناتي: آرگو رول آئوٽ

ڪينري جي تعیناتي مڪمل آهي.

Argo Rollouts سان وڌيڪ مثال

هتي وڌيڪ مثال آهن، جيئن ته ماحوليات جا ڏيکاءُ ڪيئن ترتيب ڏنا وڃن ۽ ڪينري جي بنياد تي موازنہ:

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

Argo Rollouts ۽ Argo CI بابت وڊيو

مان واقعي هن وڊيو جي سفارش ڪريان ٿو، اهو ڏيکاري ٿو ته ڪيئن Argo Rollouts ۽ Argo CI گڏجي ڪم ڪن ٿا:

نتيجو

مان واقعي CRDs استعمال ڪرڻ جو خيال پسند ڪريان ٿو جيڪي اضافي قسمن جي ٺاھ جوڙ کي منظم ڪن ٿا يا ريپليڪيٽس، ريڊائريڪ ٽريفڪ وغيره. انهن سان گڏ ڪم آساني سان ٿي وڃي ٿو. اڳيون آئون Argo CI سان انضمام کي جانچڻ چاهيندس.

بهرحال، اتي آرگو CI ۽ Flux CI جو هڪ وڏو ضمير اچي رهيو آهي، تنهنڪري مان شايد انتظار ڪريان جيستائين نئين رليز نه اچي: آرگو فلڪس.

ڇا توھان وٽ ڪو تجربو آھي Argo Rollouts يا Argo CI سان؟

اسان جي بلاگ تي ٻيا مضمون پڻ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو