በ Kubernetes ውስጥ የካናሪ ማሰማራትን ለመተግበር እና ለመጠቀም Gitlab CI እና ማንዋል GitOps እንጠቀማለን
የዚህ ተከታታይ መጣጥፎች፡-
- (ይህ ዓምድ)
ArgoCI በመጠቀም Canary Deployment - Istio በመጠቀም Canary Deployment
- Jenkins-X Istio Flaggerን በመጠቀም የካናሪ ማሰማራት
በ GitOps በኩል የካናሪ ማሰማራቱን በእጅ እናከናውናለን እና ዋናውን የኩበርኔትስ ሀብቶችን እንፈጥራለን/በማስተካከል። ይህ ጽሑፍ በዋናነት ለመግቢያ የታሰበ ነው። በኩበርኔትስ ካናሪ ውስጥ ማሰማራት እንዴት እንደሚሰራ ፣ የበለጠ ውጤታማ አውቶማቲክ ዘዴዎች ስላሉ ፣ በሚቀጥሉት ጽሁፎች ውስጥ እንመለከታለን ።
የካናሪ ማሰማራት
በካናሪ ስትራቴጂ፣ ዝማኔዎች በመጀመሪያ የሚተገበሩት ለተወሰኑ ተጠቃሚዎች ብቻ ነው። በክትትል፣ በሎግ ዳታ፣ በእጅ ሙከራ ወይም በሌላ የግብረመልስ ሰርጦች ልቀቱ ለሁሉም ተጠቃሚዎች ከመለቀቁ በፊት ይሞከራል።
የኩበርኔትስ ማሰማራት (የሚንከባለል ማሻሻያ)
የኩበርኔትስ ማሰማራት ነባሪው ስልት እየተንከባለል ያለ ሲሆን ይህም የተወሰነ ቁጥር ያላቸው ፖዶች በአዲስ የምስሎች ስሪቶች የሚጀመሩበት ነው። ያለምንም ችግር የተፈጠሩ ከሆነ, የቆዩ የምስሎች ስሪቶች ያላቸው ፖድዎች ይቋረጣሉ, እና አዲስ ፖድዎች በትይዩ ይፈጠራሉ.
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
ሹካ ማድረግ ያስፈልግዎታል 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
የሚከተለውን ማውጣት አለበት:
እናያለን app
በ 10 ቅጂዎች እና አፕ-ካናሪ ከ 0 ጋር ማሰማራት. እንዲሁም ልንጠቀምበት የምንችልበት LoadBalancer አለ curl
በውጫዊ አይፒ በኩል፡-
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
የእኛ የሙከራ መተግበሪያ "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
...
እነዚህን ለውጦች ማሰማራቱ ወደሚጀምርበት ማከማቻ (በጊትላብሲአይ) እንገፋቸዋለን እና ውጤቱን እንመለከታለን፡
ሁለቱም የመተግበሪያ መራጭ ስላላቸው አገልግሎታችን ሁለቱንም ማሰማራቶች ይጠቁማል። በ Kubernetes ነባሪ የዘፈቀደ አሰራር ምክንያት ለ~10% ጥያቄዎች የተለያዩ ምላሾችን ማየት አለብን።
አሁን ያለው የመተግበሪያችን ሁኔታ (GitOps፣ ከ Git እንደ ነጠላ የእውነት ምንጭ የተወሰደ) ሁለት ማሰማራት ከገባሪ ቅጂዎች ጋር መኖሩ ነው፣ አንድ ለእያንዳንዱ ስሪት።
~ 10% ተጠቃሚዎች ከአዲሱ ስሪት ጋር ይተዋወቃሉ እና ሳያውቁት ይሞክሩት። ችግሮችን ለማግኘት በምዝግብ ማስታወሻዎች ውስጥ ስህተቶችን እና የክትትል ውሂብን ለመፈተሽ ጊዜው አሁን ነው.
ደረጃ 2 አዲሱን ስሪት ለሁሉም ተጠቃሚዎች ይልቀቁ
ሁሉም ነገር በጥሩ ሁኔታ እንደሄደ ወስነናል እና አሁን አዲሱን ስሪት ለሁሉም ተጠቃሚዎች መልቀቅ አለብን። ይህንን ለማድረግ በቀላሉ እናዘምነዋለን deploy.yaml
አዲስ የምስሉን ስሪት መጫን እና የተባዙ ብዛት 10. ኢን deploy-canary.yaml
የተባዙትን ቁጥር ወደ 0 እንመልሰዋለን። ከተሰማራ በኋላ ውጤቱ እንደሚከተለው ይሆናል።
ለማጠቃለል
ለእኔ፣ በዚህ መንገድ ማሰማራቱን በእጅ ማስኬዱ k8s በመጠቀም እንዴት በቀላሉ እንደሚዋቀር ለመረዳት ይረዳል። Kubernetes ሁሉንም ነገር በኤፒአይ እንዲያዘምኑ ስለሚፈቅድ እነዚህ እርምጃዎች በስክሪፕቶች አማካኝነት በራስ ሰር ሊሠሩ ይችላሉ።
መተግበር ያለበት ሌላው ነገር አዲሱ ስሪት ብቻ የሚገኝበት የሞካሪ መግቢያ ነጥብ (LoadBalancer ወይም Ingress) ነው። በእጅ ለማሰስ ሊያገለግል ይችላል።
በሚቀጥሉት መጣጥፎች፣ አብዛኛውን ያደረግናቸውን ነገሮች የሚተገበሩ ሌሎች አውቶሜትድ መፍትሄዎችን እንመለከታለን።
በብሎጋችን ላይ ሌሎች ጽሑፎችን ያንብቡ፡-
ያለፈቃድ ከ ClickHouse ወደ ClickHouse ከፍቃድ መውጣቱ ምን አመጣው? ለ Nginx ተለዋዋጭ ሞጁሎችን መገንባት nxs-build-tools ያዘምኑ - ዴብ እና ራፒኤም ፓኬጆችን ለመገንባት ረዳት የHashicorp ቆንስል ኩበርኔትስ ፍቃድ መግቢያ የ Csync2 መገልገያ ስንጠቀም ያጋጠመን ነገር የቴሌግራም ቦት ለሬድሚን። ለራስህ እና ለሌሎች ህይወት እንዴት ቀላል ማድረግ እንደምትችል
ምንጭ: hab.com