Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Em ê Gitlab CI û GitOps manual bikar bînin da ku bicîhkirina Canary li Kubernetes bicîh bikin û bikar bînin

Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Gotarên ji vê rêzê:

Em ê bi navgîniya GitOps ve bicîhkirina Canary bi destan pêk bînin û çavkaniyên sereke yên Kubernetes biafirînin/guhezînin. Ev gotar di serî de ji bo danasînê ye bi awayê ku bicîhkirin li Kubernetes Canary dixebite, ji ber ku rêbazên otomasyonê yên bi bandortir hene, ku em ê di gotarên jêrîn de bifikirin.


Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

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

Bicihkirina Kanarya

Bi stratejiya Canary, nûvekirin yekem car tenê li ser komek bikarhêneran têne sepandin. Bi çavdêrîkirin, daneya têketinê, ceribandina destan, an kanalên din ên bersivdayînê, berdan berî ku ji hemî bikarhêneran re were berdan tê ceribandin.

Dabeşkirina Kubernetes (rojvekirina nûvekirî)

Stratejiya xwerû ya ji bo Kubernetes Deployment nûvekirina nûvekirinê ye, ku li wir hejmareke diyarkirî bi guhertoyên nû yên wêneyan têne destpêkirin. Ger ew bê pirsgirêk hatine afirandin, podên bi guhertoyên kevn ên wêneyan têne qedandin, û podên nû paralel têne afirandin.

GitOps

Em di vê nimûneyê de GitOps bikar tînin ji ber ku em:

  • Git wekî çavkaniya yekane ya rastiyê bikar tîne
  • em Operasyonên Git-ê ji bo çêkirin û bicihkirinê bikar tînin (ji bilî git tag/hevgirtinê ti fermanek din ne hewce ye)

Nimûne:

Ka em pratîkek baş bavêjin - ji bo koda serîlêdanê yek depoyek û yek jî ji bo binesaziyê hebe.

Depoya serîlêdanê

Ev Python + Flask API-ya pir hêsan e ku bersivek wekî JSON vedigerîne. Em ê pakêtê bi navgîniya GitlabCI ve ava bikin û encamê bixin nav Tomara Gitlab. Di qeydê de me du guhertoyên cûda yên berdanê hene:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

Cûdahiya di navbera wan de tenê guhertina pelê JSON-a vegerî ye. Em vê serîlêdanê bikar tînin da ku bi hêsanî bi kîjan guhertoya ku em pê re têkilî daynin xuyang bikin.

Depoya binesaziyê

Di vê serpêhatiyê de em ê bi navgîniya GitlabCI ve li Kubernetes bicîh bikin, .gitlab-ci.yml vî rengî dibîne:

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

Ji bo ku hûn wê bixwe bimeşînin, hûn ê hewceyê komekê bin, hûn dikarin Gcloud bikar bînin:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b

gcloud compute firewall-rules create incoming-80 --allow tcp:80

Pêdivî ye ku hûn bişkînin https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure û guherbarekê biafirîne KUBECONFIG di GitlabCI de, ku dê veavakirina ji bo gihîştinê hebe kubectl ji koma xwe re.

Hûn dikarin bixwînin ka meriv çawa pêbaweriyên ji bo komek (Gcloud) digire li vir heye.

Binesaziya Yaml

Di depoya binesaziyê de karûbarê me heye:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: app
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

Û belavkirina nav 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

Û belavbûneke din li 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

Bala xwe bidinê ku app-deploy hêj kopiyek nehatiye diyarkirin.

Bicihkirina destpêkê

Ji bo destpêkirina destpêkirina destpêkê, hûn dikarin lûleya GitlabCI bi destan li ser şaxê master dest pê bikin. Paş vê kubectl divê jêrîn derxe:

Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Em dibînin app bicihkirina bi 10 replicas û app-canary bi 0. Di heman demê de LoadBalancer heye ku em jê re dikarin bigihîjin curl bi rêya IP-ya Derveyî:

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

Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Em dibînin ku serîlêdana ceribandina me tenê "v1" vedigere.

Bicihkirina Kanarya

Gav 1: guhertoyek nû ji bo hin bikarhêneran berdin

Me di pela deploy-canary.yaml û wêneya guhertoya nû de hejmara kopiyan danî 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

Di pelê de deploy.yaml me hejmara kopiyan guhert 9:

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

Em van guhertinan dişoxilînin depoya ku dê pêvekirin jê dest pê bike (bi rêya GitlabCI) û wekî encam dibînin:

Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Xizmeta me dê her du bicîhkirinan destnîşan bike, ji ber ku her du jî hilbijêra sepanê hene. Ji ber rasthatiniya xwerû ya Kubernetes, divê em ji% 10% daxwazan bersivên cûda bibînin:

Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Rewşa heyî ya serîlêdana me (GitOps, ji Git wekî Çavkaniyek Yekane ya Rastiyê hatî girtin) hebûna du veqetandinên bi kopiyên çalak e, yek ji bo her guhertoyê.

~ 10% ji bikarhêneran bi guhertoyek nû re nas dikin û bêhemdî wê ceribandinê dikin. Naha dema wê ye ku meriv xeletiyên di têketin û daneyên çavdêriyê de kontrol bike da ku pirsgirêkan bibîne.

Gav 2: Guhertoya nû ji hemî bikarhêneran re berdin

Me biryar da ku her tişt baş derbas bû û naha divê em guhertoya nû ji hemî bikarhêneran re ragihînin. Ji bo vê yekê em tenê nûve bikin deploy.yaml sazkirina guhertoyek nû ya wêneyê û hejmara kopiyan 10 e. In deploy-canary.yaml me jimara replikayan vedigere 0. Piştî bicihkirinê, encam dê wiha be:

Bicihkirina Kanarya li Kubernetes #1: Gitlab CI

Ji bo kurteya

Ji bo min, bi vî rengî rêvekirina bi destan bi rê ve dibe alîkar ku ez fam bikim ka ew çiqas bi hêsanî dikare bi karanîna k8s were mîheng kirin. Ji ber ku Kubernetes destûrê dide we ku hûn her tiştî bi navgîniya API-ê nûve bikin, ev gav dikarin bi navgîniya nivîsandî werin otomatîk kirin.

Tiştek din ku pêdivî ye ku were bicîh kirin xalek têketina testerê ye (LoadBalancer an bi rêya Ingress) ku tê de tenê guhertoya nû dikare were gihîştin. Ew dikare ji bo geroka destan were bikar anîn.

Di gotarên paşerojê de, em ê çareseriyên din ên xweser ên ku piraniya tiştên ku me kirine bicîh dikin binihêrin.

Her weha gotarên din ên li ser bloga me bixwînin:

Source: www.habr.com

Add a comment