Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

ہم K8s-آبائی Argo Rollouts تعیناتی کنٹرولر اور GitlabCI کا استعمال کریں گے تاکہ کینری تعیناتیوں کو Kubernetes میں چلایا جا سکے۔

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

https://unsplash.com/photos/V41PulGL1z0

اس سلسلے میں مضامین

کینری تعیناتی۔

ہمیں امید ہے کہ آپ پڑھیں گے۔ پہلا حصہ، جہاں ہم نے مختصر طور پر وضاحت کی کہ کینری تعیناتیاں کیا ہیں۔ ہم نے یہ بھی دکھایا کہ معیاری Kubernetes وسائل کا استعمال کرتے ہوئے اسے کیسے نافذ کیا جائے۔

آرگو رول آؤٹ

Argo Rollouts ایک Kubernetes مقامی تعیناتی کنٹرولر ہے۔ یہ Kubernetes کے لیے CRD (کسٹم ریسورس ڈیفینیشن) فراہم کرتا ہے۔ اس کا شکریہ، ہم ایک نیا وجود استعمال کر سکتے ہیں: Rollout، جو مختلف ترتیب کے اختیارات کے ساتھ نیلے سبز اور کینری تعیناتیوں کا انتظام کرتا ہے۔

آرگو رول آؤٹ کنٹرولر حسب ضرورت وسائل کے ذریعے استعمال کیا جاتا ہے۔ Rollout, Kubernetes کے لیے اضافی تعیناتی کی حکمت عملیوں جیسے نیلے سبز اور کینری کی اجازت دیتا ہے۔ وسیلہ Rollout فعالیت کے برابر فراہم کرتا ہے۔ Deploymentصرف اضافی تعیناتی کی حکمت عملیوں کے ساتھ۔
وسائل Deployments تعیناتی کے لیے دو حکمت عملی ہیں: RollingUpdate и Recreate. اگرچہ یہ حکمت عملی زیادہ تر معاملات کے لیے موزوں ہیں، بہت بڑے پیمانے پر سرورز پر تعیناتی کے لیے، اضافی حکمت عملیوں کا استعمال کیا جاتا ہے، جیسے نیلا سبز یا کینری، جو تعیناتی کنٹرولر میں دستیاب نہیں ہیں۔ Kubernetes میں ان حکمت عملیوں کو استعمال کرنے کے لیے، صارفین کو اپنی تعیناتیوں کے اوپر اسکرپٹ لکھنا پڑتا تھا۔ آرگو رول آؤٹ کنٹرولر ان حکمت عملیوں کو سادہ، اعلانیہ، قابل ترتیب پیرامیٹرز کے طور پر ظاہر کرتا ہے۔
https://argoproj.github.io/argo-rollouts

آرگو سی آئی بھی ہے، جو رول آؤٹ کے ساتھ استعمال کے لیے ایک آسان ویب انٹرفیس فراہم کرتا ہے، ہم اگلے مضمون میں اس پر ایک نظر ڈالیں گے۔

آرگو رول آؤٹ انسٹال کرنا

سرور سائیڈ

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 کو Kubernetes میں تعیناتی کے لیے استعمال کریں گے، .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% تک جاری رکھیں)

ابتدائی تعیناتی انجام دے رہا ہے۔

После начального деплоя наши ресурсы будут выглядеть так:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

اور ہمیں درخواست کے پہلے ورژن سے ہی جواب ملتا ہے:

Kubernetes #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 تعینات کرتا ہے اور ہم تبدیلیاں دیکھتے ہیں:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

اب اگر ہم سروس تک رسائی حاصل کرتے ہیں:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

زبردست! ہم اپنی کینری تعیناتی کے وسط میں ہیں۔ ہم دوڑ کر ترقی دیکھ سکتے ہیں:

kubectl argo rollouts get rollout rollout-canary

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

مرحلہ 2: 50% ٹریفک:

اب اگلے مرحلے پر چلتے ہیں: 50% ٹریفک کو ری ڈائریکٹ کرنا۔ ہم نے اس قدم کو دستی طور پر چلانے کے لیے ترتیب دیا ہے:

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

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

اور ہماری درخواست نے نئے ورژنز سے 50% جوابات واپس کیے:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

اور رول آؤٹ کا جائزہ:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

Прекрасно

مرحلہ 3: 100% ٹریفک:

ہم نے اسے ترتیب دیا ہے تاکہ 2 منٹ کے بعد 50% مرحلہ خود بخود ختم ہو جائے اور 100% مرحلہ شروع ہو:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

اور ایپلی کیشن آؤٹ پٹ:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

اور رول آؤٹ کا جائزہ:

Kubernetes #2 میں کینری تعیناتی: آرگو رول آؤٹ

کینری کی تعیناتی مکمل ہو گئی ہے۔

آرگو رول آؤٹ کے ساتھ مزید مثالیں۔

یہاں مزید مثالیں موجود ہیں، جیسے کہ کینری کی بنیاد پر ماحول کے مناظر اور موازنہ کیسے ترتیب دیا جائے:

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

Argo Rollouts اور Argo CI کے بارے میں ویڈیو

میں واقعی اس ویڈیو کی سفارش کرتا ہوں، یہ ظاہر کرتا ہے کہ Argo Rollouts اور Argo CI ایک ساتھ کیسے کام کرتے ہیں:

کل

مجھے واقعی CRDs استعمال کرنے کا خیال پسند ہے جو اضافی قسم کی تعیناتیوں یا نقل کے سیٹوں، ٹریفک کو ری ڈائریکٹ کرنے وغیرہ کا انتظام کرتا ہے۔ ان کے ساتھ کام آسانی سے ہوتا ہے۔ اگلا میں Argo CI کے ساتھ انضمام کی جانچ کرنا چاہوں گا۔

تاہم، ایسا لگتا ہے کہ Argo CI اور Flux CI کا ایک بڑا انضمام آرہا ہے، لہذا میں نئی ​​ریلیز کے سامنے آنے تک انتظار کر سکتا ہوں: آرگو فلوکس.

کیا آپ کو Argo Rollouts یا Argo CI کے ساتھ کوئی تجربہ ہوا ہے؟

ہمارے بلاگ پر دیگر مضامین بھی پڑھیں:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں