ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI

اسان استعمال ڪنداسين Gitlab CI ۽ دستي GitOps ڪبرنيٽس ۾ ڪينري جي تعیناتي کي لاڳو ڪرڻ ۽ استعمال ڪرڻ لاءِ

ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI

هن سلسلي جا مضمون:

اسان GitOps ذريعي دستي طور تي ڪينري جي ترتيب کي انجام ڏينداسين ۽ مکيه Kubernetes وسيلن کي ٺاهڻ/تبديل ڪندي. هي مضمون بنيادي طور تي تعارف لاءِ آهي ڪبرنيٽس ڪينري ۾ ڊيپلائيمينٽ ڪيئن ڪم ڪري ٿي، ڇو ته اتي آٽوميشن جا وڌيڪ اثرائتو طريقا آهن، جن تي اسين ايندڙ مضمونن ۾ غور ڪنداسين.


ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI

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

ڪينري لڳائڻ

ڪينري حڪمت عملي سان، تازه ڪاريون پهريون ڀيرو لاڳو ٿين ٿيون صرف استعمال ڪندڙن جي هڪ ذيلي سيٽ تي. مانيٽرنگ، لاگ ڊيٽا، مينوئل ٽيسٽنگ، يا ٻين فيڊ بيڪ چينلز ذريعي، رليز کي سڀني استعمال ڪندڙن لاءِ جاري ڪرڻ کان اڳ جانچيو ويندو آهي.

ڪبرنيٽس جي تعیناتي (رولنگ اپڊيٽ)

Kubernetes Deployment لاءِ ڊفالٽ حڪمت عملي رولنگ-اپڊيٽ آهي، جتي تصويرن جي نئين ورزن سان گڏ هڪ خاص تعداد ۾ پوڊ شروع ڪيا ويا آهن. جيڪڏهن اهي بغير بغير پيدا ڪيا ويا آهن، پوڊ تصويرون جي پراڻي نسخن سان ختم ٿي ويا آهن، ۽ نوان پوڊ متوازي ۾ ٺاهيا ويا آهن.

GitOps

اسان هن مثال ۾ GitOps استعمال ڪندا آهيون ڇاڪاڻ ته اسان:

  • Git استعمال ڪندي سچائي جو واحد ذريعو
  • اسان استعمال ڪريون ٿا گِٽ آپريشنز ٺاھڻ ۽ ٺاھڻ لاءِ (گٽ ٽيگ/مرج کان سواءِ ٻيو ڪو حڪم گھربل نه آھي)

مثال طور

اچو ته هڪ سٺي مشق وٺون - هڪ ذخيرو ايپليڪيشن ڪوڊ لاءِ ۽ هڪ انفراسٽرڪچر لاءِ.

ايپليڪيشن ريپوزٽري

هي هڪ تمام سادو 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-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) ھتي صحيح آھي.

انفراسٽرڪچر 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

نوٽ ڪريو ته ايپ-تعمير ۾ اڃا تائين ڪا به نقل بيان ٿيل نه آهي.

انجام ڏيڻ جي شروعاتي ڪم

شروعاتي ٺاھڻ کي شروع ڪرڻ لاء، توھان شروع ڪري سگھو ٿا GitlabCI پائپ لائن دستي طور تي ماسٽر برانچ تي. هن کان پوءِ kubectl ھيٺ ڏنل ٻاھر ڪڍڻ گھرجي:

ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI

اسان ڏسون ٿا app 10 replicas سان گڏ ۽ 0 سان ايپ-ڪينري. هتي پڻ هڪ LoadBlancer آهي جنهن ذريعي اسان رسائي ڪري سگهون ٿا. curl خارجي IP ذريعي:

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

ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab 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 ۾ ڪينري جي تعیناتي: Gitlab CI

اسان جي خدمت ٻنهي جي مقرري ڏانهن اشارو ڪندي، ڇاڪاڻ ته ٻنهي وٽ ايپ چونڊيندڙ آهي. ڪبرنيٽس جي ڊفالٽ بي ترتيب ٿيڻ جي ڪري، اسان کي ~ 10٪ درخواستن لاءِ مختلف جواب ڏسڻ گهرجن:

ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI

اسان جي ايپليڪيشن جي موجوده حالت (GitOps، Git مان ورتو ويو آهي هڪ واحد ذريعو سچائي جي طور تي) فعال ريپليڪس سان گڏ ٻه تعينات جي موجودگي، هر نسخي لاء هڪ.

~ 10٪ استعمال ڪندڙ هڪ نئين نسخي سان واقف ٿي ويا آهن ۽ غير ارادي طور تي ان کي جانچيو. هاڻي وقت آهي لاگز ۾ غلطين جي جانچ ڪرڻ ۽ مسئلن کي ڳولڻ لاءِ ڊيٽا جي نگراني ڪرڻ.

مرحلا 2: سڀني صارفين لاء نئون ورزن جاري ڪريو

اسان فيصلو ڪيو ته سڀ ڪجھ ٺيڪ ٿي ويو ۽ ھاڻي اسان کي سڀني استعمال ڪندڙن لاءِ نئون ورجن رول آئوٽ ڪرڻو آھي. ائين ڪرڻ لاءِ اسان صرف تازه ڪاري ڪندا آهيون deploy.yaml تصوير جو نئون ورزن انسٽال ڪرڻ ۽ 10 جي برابر replicas جو تعداد deploy-canary.yaml اسان نقلن جو تعداد واپس 0 تي مقرر ڪيو. لڳائڻ کان پوء، نتيجو ھيٺ ڏنل ھوندو:

ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI

مختصر ڪرڻ لاء

مون لاءِ، ڊيپلائيمينٽ کي دستي طور تي ھلائڻ سان ھي سمجھڻ ۾ مدد ملي ٿي ته ڪھڙي آساني سان ان کي k8s استعمال ڪندي ترتيب ڏئي سگھجي ٿو. جيئن ته ڪبرنيٽس توهان کي API ذريعي هر شي کي اپڊيٽ ڪرڻ جي اجازت ڏئي ٿو، اهي قدم اسڪرپٽ ذريعي خودڪار ٿي سگهن ٿا.

هڪ ٻي شيء جيڪا لاڳو ٿيڻ جي ضرورت آهي هڪ ٽيسٽر انٽري پوائنٽ (LoadBalancer يا Ingress ذريعي) جنهن جي ذريعي صرف نئين ورزن تائين رسائي ٿي سگهي ٿي. اهو دستي برائوزنگ لاء استعمال ڪري سگهجي ٿو.

مستقبل جي مضمونن ۾، اسان ٻين خودڪار حلن جي جانچ ڪنداسين جيڪي اسان جيڪي ڪيو آھي انھن مان گھڻا عمل درآمد ڪن ٿا.

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

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

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