የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

የካናሪ ማሰማራቶችን ወደ ኩበርኔትስ ለማሄድ የ k8s-ቤተኛውን የአርጎ ሮልዉትስ ማሰማራት መቆጣጠሪያን እና GitlabCIን እንጠቀማለን።

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

በዚህ ተከታታይ ውስጥ ያሉ መጣጥፎች

የካናሪ ማሰማራት

እንዲያነቡ ተስፋ እናደርጋለን የመጀመሪያ ክፍል, የ Canary Deployments ምን እንደሆኑ ባጭሩ አብራርተናል. ደረጃውን የጠበቀ የኩበርኔትስ ሀብቶችን በመጠቀም እንዴት እንደሚተገበርም አሳይተናል።

Argo Rollouts

Argo Rollouts የኩበርኔትስ ተወላጅ የማሰማራት ተቆጣጣሪ ነው። ለኩበርኔትስ ሲአርዲ (ብጁ ምንጭ ፍቺ) ያቀርባል። ለእሱ ምስጋና ይግባውና አዲስ አካል መጠቀም እንችላለን፡- Rollout, በተለያዩ የማዋቀሪያ አማራጮች ሰማያዊ-አረንጓዴ እና ካናሪ ማሰማራትን የሚያስተዳድር።

በብጁ ምንጭ ጥቅም ላይ የዋለ የአርጎ ሮልሎውት መቆጣጠሪያ Rollout, እንደ ሰማያዊ አረንጓዴ እና ለኩበርኔትስ ካናሪ ያሉ ተጨማሪ የማሰማራት ስልቶችን ይፈቅዳል። ምንጭ Rollout የተግባርን ተመጣጣኝ ያቀርባል Deploymentከተጨማሪ የማሰማራት ስልቶች ጋር ብቻ።
ምንጭ Deployments ለማሰማራት ሁለት ስልቶች አሉት RollingUpdate и Recreate. ምንም እንኳን እነዚህ ስልቶች ለአብዛኛዎቹ ጉዳዮች ተስማሚ ናቸው, በጣም ትልቅ በሆነ መጠን ወደ አገልጋዮች ለማሰማራት, ተጨማሪ ስልቶች ጥቅም ላይ ይውላሉ, ለምሳሌ ሰማያዊ-አረንጓዴ ወይም ካናሪ, በዲፕሎፕ መቆጣጠሪያ ውስጥ የማይገኙ. እነዚህን ስልቶች በኩበርኔትስ ለመጠቀም ተጠቃሚዎች ከማሰማራት በላይ ስክሪፕቶችን መፃፍ ነበረባቸው። የ Argo Rollouts መቆጣጠሪያ እነዚህን ስልቶች እንደ ቀላል፣ ገላጭ፣ ሊዋቀሩ የሚችሉ መለኪያዎች ያጋልጣል።
https://argoproj.github.io/argo-rollouts

ከ Rollouts ጋር ለመጠቀም ለተጠቃሚ ምቹ የሆነ የድር በይነገጽ የሚያቀርበው አርጎ ሲአይ አለ፣ በሚቀጥለው መጣጥፍ ውስጥ እንመለከታለን።

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-የማሰማራት-ምሳሌ-መተግበሪያ

ይህ እንደ JSON ምላሽ የሚሰጥ በጣም ቀላል Python+Flask API ነው። ጥቅሉን GitlabCI በመጠቀም እንገነባለን እና ውጤቱን ወደ Gitlab መዝገብ ቤት እንገፋዋለን። በመዝገቡ ውስጥ ሁለት የተለያዩ የመልቀቂያ ስሪቶች አሉን።

  • wuestkamp/k8s-የማሰማራት-ምሳሌ-መተግበሪያ፡v1
  • wuestkamp/k8s-የማሰማራት-ምሳሌ-መተግበሪያ፡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 ተመሳሳይ ይሰራል. የማሻሻያ ስትራቴጂ ካላዘጋጀን (እንደ እዚህ ካናሪ) እንደ ነባሪ የማሻሻያ ማሰማራት ይሆናል።

በ yaml ውስጥ ለካናሪ ማሰማራት ሁለት ደረጃዎችን እንገልጻለን፡

  1. 10% ትራፊክ ወደ ካናሪ (በእጅ እሺ ጠብቅ)
  2. 50% ትራፊክ ወደ ካናሪ (2 ደቂቃዎች ይጠብቁ እና ወደ 100% ይቀጥሉ)

የመጀመሪያ ማሰማራትን በማከናወን ላይ

ከመጀመሪያው ማሰማራቱ በኋላ ሀብታችን ይህንን ይመስላል።

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

እና ምላሽ የምናገኘው ከመጀመሪያው የመተግበሪያው ስሪት ብቻ ነው-

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

የካናሪ ማሰማራትን በማከናወን ላይ

ደረጃ 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: Argo Rollouts

አሁን አገልግሎቱን ከደረስን፡-

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

በጣም ጥሩ! በካናሪ ማሰማራታችን መሃል ላይ ነን። በመሮጥ ሂደቱን ማየት እንችላለን፡-

kubectl argo rollouts get rollout rollout-canary

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

ደረጃ 2፡ 50% ትራፊክ፡

አሁን ወደ ቀጣዩ ደረጃ እንሂድ፡ 50% የትራፊክ ፍሰትን አቅጣጫ በማዞር ላይ። ይህን እርምጃ በእጅ እንዲሰራ አዋቅረነዋል፡-

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

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

እና የእኛ መተግበሪያ ከአዳዲስ ስሪቶች 50% ምላሾችን መልሷል።

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

እና የታቀደ ግምገማ፡-

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

ድንቅ።

ደረጃ 3፡ 100% ትራፊክ፡

ከ 2 ደቂቃዎች በኋላ 50% እርምጃው በራስ-ሰር እንዲያልቅ እና 100% እርምጃው እንዲጀምር አዘጋጀነው-

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

እና የመተግበሪያው ውጤት:

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

እና የታቀደ ግምገማ፡-

የካናሪ ማሰማራት በ Kubernetes # 2: Argo Rollouts

የካናሪ ማሰማራት ተጠናቅቋል።

ተጨማሪ ምሳሌዎች ከ Argo Rollouts ጋር

እንደ የአካባቢ ቅድመ-ዕይታዎችን እና በካናሪ ላይ በመመስረት ንጽጽሮችን እንዴት ማቀናበር እንደሚቻል ያሉ ተጨማሪ ምሳሌዎች እዚህ አሉ።

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

ስለ Argo Rollouts እና Argo CI ቪዲዮ

ይህን ቪዲዮ በእውነት እመክራለሁ፣ አርጎ ሮሎውስ እና አርጎ ሲ አይ አብረው እንዴት እንደሚሰሩ ያሳያል፡

ውጤቱ

ተጨማሪ የማሰማራት ወይም የማባዛት አይነቶችን መፍጠርን፣ ትራፊክን ወደ ሌላ አቅጣጫ የሚቀይር፣ ወዘተ የሚቆጣጠሩ ሲአርዲዎችን የመጠቀም ሀሳቡን በእውነት ወድጄዋለሁ። ከነሱ ጋር አብሮ መስራት በተቃና ሁኔታ ይከናወናል. በመቀጠል ከ Argo CI ጋር ያለውን ውህደት መሞከር እፈልጋለሁ.

ሆኖም፣ ትልቅ የ Argo CI እና Flux CI ውህደት ያለ ይመስላል፣ ስለዚህ አዲሱ ልቀት እስኪወጣ ድረስ መጠበቅ እችላለሁ፡- አርጎ ፍሉክስ.

ስለ Argo Rollouts ወይም Argo CI ምንም አይነት ልምድ አሎት?

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

ምንጭ: hab.com

አስተያየት ያክሉ