የካናሪ ማሰማራቶችን ወደ ኩበርኔትስ ለማሄድ የ k8s-ቤተኛውን የአርጎ ሮልዉትስ ማሰማራት መቆጣጠሪያን እና GitlabCIን እንጠቀማለን።
በዚህ ተከታታይ ውስጥ ያሉ መጣጥፎች
የካናሪ ማሰማራት በኩበርኔትስ # 1: Gitlab CI - (ይህ ዓምድ)
- Istio በመጠቀም Canary Deployment
- Jenkins-X Istio Flaggerን በመጠቀም የካናሪ ማሰማራት
የካናሪ ማሰማራት
እንዲያነቡ ተስፋ እናደርጋለን
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 ተሰኪ)
ምሳሌ መተግበሪያ
ለትግበራ ኮድ እና ለመሠረተ ልማት የተለየ ማከማቻ መኖሩ ጥሩ ልምምድ ነው።
ለመተግበሪያው ማከማቻ
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
ሹካ ማድረግ ያስፈልግዎታል KUBECONFIG
በ GitlabCI ውስጥ፣ ለመዳረሻ ውቅሩን ይይዛል kubectl
ወደ ክላስተርህ።
የመሠረተ ልማት 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 ውስጥ ለካናሪ ማሰማራት ሁለት ደረጃዎችን እንገልጻለን፡
- 10% ትራፊክ ወደ ካናሪ (በእጅ እሺ ጠብቅ)
- 50% ትራፊክ ወደ ካናሪ (2 ደቂቃዎች ይጠብቁ እና ወደ 100% ይቀጥሉ)
የመጀመሪያ ማሰማራትን በማከናወን ላይ
ከመጀመሪያው ማሰማራቱ በኋላ ሀብታችን ይህንን ይመስላል።
እና ምላሽ የምናገኘው ከመጀመሪያው የመተግበሪያው ስሪት ብቻ ነው-
የካናሪ ማሰማራትን በማከናወን ላይ
ደረጃ 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 ያሰማራው እና ለውጦቹን እናያለን፡
አሁን አገልግሎቱን ከደረስን፡-
በጣም ጥሩ! በካናሪ ማሰማራታችን መሃል ላይ ነን። በመሮጥ ሂደቱን ማየት እንችላለን፡-
kubectl argo rollouts get rollout rollout-canary
ደረጃ 2፡ 50% ትራፊክ፡
አሁን ወደ ቀጣዩ ደረጃ እንሂድ፡ 50% የትራፊክ ፍሰትን አቅጣጫ በማዞር ላይ። ይህን እርምጃ በእጅ እንዲሰራ አዋቅረነዋል፡-
kubectl argo rollouts promote rollout-canary # continue to step 2
እና የእኛ መተግበሪያ ከአዳዲስ ስሪቶች 50% ምላሾችን መልሷል።
እና የታቀደ ግምገማ፡-
ድንቅ።
ደረጃ 3፡ 100% ትራፊክ፡
ከ 2 ደቂቃዎች በኋላ 50% እርምጃው በራስ-ሰር እንዲያልቅ እና 100% እርምጃው እንዲጀምር አዘጋጀነው-
እና የመተግበሪያው ውጤት:
እና የታቀደ ግምገማ፡-
የካናሪ ማሰማራት ተጠናቅቋል።
ተጨማሪ ምሳሌዎች ከ Argo Rollouts ጋር
እንደ የአካባቢ ቅድመ-ዕይታዎችን እና በካናሪ ላይ በመመስረት ንጽጽሮችን እንዴት ማቀናበር እንደሚቻል ያሉ ተጨማሪ ምሳሌዎች እዚህ አሉ።
ስለ Argo Rollouts እና Argo CI ቪዲዮ
ይህን ቪዲዮ በእውነት እመክራለሁ፣ አርጎ ሮሎውስ እና አርጎ ሲ አይ አብረው እንዴት እንደሚሰሩ ያሳያል፡
ውጤቱ
ተጨማሪ የማሰማራት ወይም የማባዛት አይነቶችን መፍጠርን፣ ትራፊክን ወደ ሌላ አቅጣጫ የሚቀይር፣ ወዘተ የሚቆጣጠሩ ሲአርዲዎችን የመጠቀም ሀሳቡን በእውነት ወድጄዋለሁ። ከነሱ ጋር አብሮ መስራት በተቃና ሁኔታ ይከናወናል. በመቀጠል ከ Argo CI ጋር ያለውን ውህደት መሞከር እፈልጋለሁ.
ሆኖም፣ ትልቅ የ Argo CI እና Flux CI ውህደት ያለ ይመስላል፣ ስለዚህ አዲሱ ልቀት እስኪወጣ ድረስ መጠበቅ እችላለሁ፡-
ስለ Argo Rollouts ወይም Argo CI ምንም አይነት ልምድ አሎት?
በብሎጋችን ላይ ሌሎች ጽሑፎችን ያንብቡ፡-
ሰማያዊ-አረንጓዴ የስፕሪንግ መተግበሪያዎችን ከNginx ድር አገልጋይ ጋር ማሰማራት ኩበርኔትስ፡ የስርዓት ሃብት አስተዳደርን ማዋቀር በጣም አስፈላጊ የሆነው ለምንድነው? የHashicorp ቆንስል ኩበርኔትስ ፍቃድ መግቢያ ቴክቶን የቧንቧ መስመር - ኩበርኔትስ-ተወላጅ የቧንቧ መስመሮች ለ Nginx ተለዋዋጭ ሞጁሎችን መገንባት የቴሌግራም ቦት ለሬድሚን። ለራስህ እና ለሌሎች ህይወት እንዴት ቀላል ማድረግ እንደምትችል
ምንጭ: hab.com