የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI

በ Kubernetes ውስጥ የካናሪ ማሰማራትን ለመተግበር እና ለመጠቀም Gitlab CI እና ማንዋል GitOps እንጠቀማለን

የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI

የዚህ ተከታታይ መጣጥፎች፡-

በ GitOps በኩል የካናሪ ማሰማራቱን በእጅ እናከናውናለን እና ዋናውን የኩበርኔትስ ሀብቶችን እንፈጥራለን/በማስተካከል። ይህ ጽሑፍ በዋናነት ለመግቢያ የታሰበ ነው። በኩበርኔትስ ካናሪ ውስጥ ማሰማራት እንዴት እንደሚሰራ ፣ የበለጠ ውጤታማ አውቶማቲክ ዘዴዎች ስላሉ ፣ በሚቀጥሉት ጽሁፎች ውስጥ እንመለከታለን ።


የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI

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

የካናሪ ማሰማራት

በካናሪ ስትራቴጂ፣ ዝማኔዎች በመጀመሪያ የሚተገበሩት ለተወሰኑ ተጠቃሚዎች ብቻ ነው። በክትትል፣ በሎግ ዳታ፣ በእጅ ሙከራ ወይም በሌላ የግብረመልስ ሰርጦች ልቀቱ ለሁሉም ተጠቃሚዎች ከመለቀቁ በፊት ይሞከራል።

የኩበርኔትስ ማሰማራት (የሚንከባለል ማሻሻያ)

የኩበርኔትስ ማሰማራት ነባሪው ስልት እየተንከባለል ያለ ሲሆን ይህም የተወሰነ ቁጥር ያላቸው ፖዶች በአዲስ የምስሎች ስሪቶች የሚጀመሩበት ነው። ያለምንም ችግር የተፈጠሩ ከሆነ, የቆዩ የምስሎች ስሪቶች ያላቸው ፖድዎች ይቋረጣሉ, እና አዲስ ፖድዎች በትይዩ ይፈጠራሉ.

GitOps

በዚህ ምሳሌ ውስጥ GitOps እንጠቀማለን ምክንያቱም እኛ፡-

  • ጂትን እንደ አንድ የእውነት ምንጭ በመጠቀም
  • ለግንባታ እና ለማሰማራት Git Operations እንጠቀማለን (ከgit tag/መዋሃድ በስተቀር ምንም ትዕዛዞች አያስፈልግም)

ለምሳሌ:

ጥሩ ልምምድ እናድርግ - አንድ ለመተግበሪያ ኮድ ማከማቻ እና አንድ ለመሠረተ ልማት።

የመተግበሪያ ማከማቻ

ይህ እንደ JSON ምላሽ የሚሰጥ በጣም ቀላል Python+Flask API ነው። ጥቅሉን በ 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 ቅጂዎች እና አፕ-ካናሪ ከ 0 ጋር ማሰማራት. እንዲሁም ልንጠቀምበት የምንችልበት LoadBalancer አለ curl በውጫዊ አይፒ በኩል፡-

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

እነዚህን ለውጦች ማሰማራቱ ወደሚጀምርበት ማከማቻ (በጊትላብሲአይ) እንገፋቸዋለን እና ውጤቱን እንመለከታለን፡

የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI

ሁለቱም የመተግበሪያ መራጭ ስላላቸው አገልግሎታችን ሁለቱንም ማሰማራቶች ይጠቁማል። በ Kubernetes ነባሪ የዘፈቀደ አሰራር ምክንያት ለ~10% ጥያቄዎች የተለያዩ ምላሾችን ማየት አለብን።

የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI

አሁን ያለው የመተግበሪያችን ሁኔታ (GitOps፣ ከ Git እንደ ነጠላ የእውነት ምንጭ የተወሰደ) ሁለት ማሰማራት ከገባሪ ቅጂዎች ጋር መኖሩ ነው፣ አንድ ለእያንዳንዱ ስሪት።

~ 10% ተጠቃሚዎች ከአዲሱ ስሪት ጋር ይተዋወቃሉ እና ሳያውቁት ይሞክሩት። ችግሮችን ለማግኘት በምዝግብ ማስታወሻዎች ውስጥ ስህተቶችን እና የክትትል ውሂብን ለመፈተሽ ጊዜው አሁን ነው.

ደረጃ 2 አዲሱን ስሪት ለሁሉም ተጠቃሚዎች ይልቀቁ

ሁሉም ነገር በጥሩ ሁኔታ እንደሄደ ወስነናል እና አሁን አዲሱን ስሪት ለሁሉም ተጠቃሚዎች መልቀቅ አለብን። ይህንን ለማድረግ በቀላሉ እናዘምነዋለን deploy.yaml አዲስ የምስሉን ስሪት መጫን እና የተባዙ ብዛት 10. ኢን deploy-canary.yaml የተባዙትን ቁጥር ወደ 0 እንመልሰዋለን። ከተሰማራ በኋላ ውጤቱ እንደሚከተለው ይሆናል።

የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI

ለማጠቃለል

ለእኔ፣ በዚህ መንገድ ማሰማራቱን በእጅ ማስኬዱ k8s በመጠቀም እንዴት በቀላሉ እንደሚዋቀር ለመረዳት ይረዳል። Kubernetes ሁሉንም ነገር በኤፒአይ እንዲያዘምኑ ስለሚፈቅድ እነዚህ እርምጃዎች በስክሪፕቶች አማካኝነት በራስ ሰር ሊሠሩ ይችላሉ።

መተግበር ያለበት ሌላው ነገር አዲሱ ስሪት ብቻ የሚገኝበት የሞካሪ መግቢያ ነጥብ (LoadBalancer ወይም Ingress) ነው። በእጅ ለማሰስ ሊያገለግል ይችላል።

በሚቀጥሉት መጣጥፎች፣ አብዛኛውን ያደረግናቸውን ነገሮች የሚተገበሩ ሌሎች አውቶሜትድ መፍትሄዎችን እንመለከታለን።

በብሎጋችን ላይ ሌሎች ጽሑፎችን ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ