Canary Deployment muKubernetes #1: Gitlab CI

Isu tichashandisa Gitlab CI uye bhuku GitOps kuita uye kushandisa Canary deployment muKubernetes.

Canary Deployment muKubernetes #1: Gitlab CI

Zvinyorwa kubva munhevedzano iyi:

Isu tichaita iyo Canary deployment nemaoko kuburikidza neGitOps uye kugadzira / kugadzirisa iyo huru Kubernetes zviwanikwa. Chinyorwa ichi chakanyanyoitirwa sumo nemafambisirwo anoitwa basa muKubernetes Canary, sezvo paine nzira dzinoshanda dzeautomation, dzatichakurukura munyaya dzinotevera.


Canary Deployment muKubernetes #1: Gitlab CI

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

Canary Deployment

Nehurongwa hweCanary, zvigadziriso zvinotanga kushandiswa kune chete subset yevashandisi. Kuburikidza nekutarisa, dhata regi, kuyedzwa kwemanyorero, kana mamwe maitiro emhinduro, kuburitswa kunoedzwa kusati kwaburitswa kune vese vashandisi.

Kubernetes Deployment (inotenderedza update)

Iyo yekusarudzika zano reKubernetes Deployment iri rolling-update, uko imwe nhamba yemapods inotangwa neshanduro nyowani dzemifananidzo. Kana dzakasikwa pasina matambudziko, mapodhi ane mavhezheni ekare emifananidzo anogumiswa, uye mapodhi matsva anogadzirwa akafanana.

GitOps

Isu tinoshandisa GitOps mumuenzaniso uyu nekuti isu:

  • kushandisa Git sechinhu chimwe chete chechokwadi
  • isu tinoshandisa Git Operations yekuvaka uye kutumira (hapana mirairo kunze kwegit tag/merge inodiwa)

Muenzaniso:

Ngatitorei tsika yakanaka - kuve neimwe repository yekodhi yekushandisa uye imwe yezvivakwa.

Application repository

Iyi iri nyore kwazvo Python + Flask API inodzosera mhinduro seJSON. Isu tichavaka pasuru kuburikidza neGitlabCI uye tosundira mhedzisiro kuGitlab Registry. Mune registry tine maviri akasiyana ekuburitsa shanduro:

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

Musiyano uripo pakati pavo ndeye shanduko mune yakadzoserwa JSON faira. Isu tinoshandisa iyi application kuona zviri nyore sezvinobvira iyo shanduro yatiri kutaurirana nayo.

Infrastructure repository

Mune ino turnip isu tichaendesa kuburikidza neGitlabCI kuenda Kubernetes, .gitlab-ci.yml zvinoita seizvi:

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

Kuti uimhanye iwe uchada sumbu, unogona kushandisa Gcloud:

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

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

Unofanira forogo https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure uye gadzira shanduko KUBECONFIG muGitlabCI, iyo ichange iine config yekuwana kubectl kuboka rako.

Unogona kuverenga nezve maitiro ekuwana zvitupa zveboka (Gcloud) pano pano.

Infrastructure Yaml

Muinfrastructure repository tine sevhisi:

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

Uye kuiswa mukati 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

Uye kumwe kutumirwa mukati 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

Ziva kuti app-deploy haisati yave nereplicas yakatsanangurwa parizvino.

Kuita kutumirwa kwekutanga

Kuti utange kutumira kwekutanga, unogona kutanga pombi yeGitlabCI nemaoko pane master bazi. Mushure maizvozvo kubectl inofanira kuburitsa zvinotevera:

Canary Deployment muKubernetes #1: Gitlab CI

Tinoona app deployment with 10 replicas and app-canary with 0. Kune zvakare LoadBalancer yatinokwanisa kuwana kuburikidza curl kuburikidza neExternal IP:

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

Canary Deployment muKubernetes #1: Gitlab CI

Isu tinoona kuti bvunzo yedu application inongodzosera "v1".

Kuita Canary deployment

Nhanho 1: buritsa vhezheni itsva yevamwe vashandisi

Isu takaisa nhamba yezvinyorwa ku 1 mune deploy-canary.yaml faira uye iyo itsva vhezheni mufananidzo:

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

Mufaira deploy.yaml isu takachinja nhamba ye replicas kuita 9:

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

Isu tinosundira shanduko idzi kune repository kubva kunotanga kutumirwa (kuburikidza neGitlabCI) uye ona semhedzisiro:

Canary Deployment muKubernetes #1: Gitlab CI

Sevhisi yedu inonongedza kune ese ma deployments, sezvo ese ari maviri ane app selector. Nekuda kweKubernetes 'default randomization, isu tinofanirwa kuona mhinduro dzakasiyana dze ~ 10% yezvikumbiro:

Canary Deployment muKubernetes #1: Gitlab CI

Mamiriro azvino echishandiso chedu (GitOps, yakatorwa kubva kuGit seSimba Rimwechete ReChokwadi) kuvepo kwemaviri ekutumira ane anoshanda replicas, imwe yega yega yega.

~ 10% yevashandisi vanojairana neshanduro nyowani uye vasingazivi vanoiedza. Ino ndiyo nguva yekutarisa zvikanganiso mumatanda uye yekutarisa data kuti uwane matambudziko.

Danho 2: Sunungura iyo vhezheni itsva kune vese vashandisi

Isu takasarudza kuti zvese zvakafamba zvakanaka uye ikozvino tinoda kuburitsa vhezheni iyi kune vese vashandisi. Kuti tiite izvi tinongovandudza deploy.yaml kuisa shanduro itsva yemufananidzo uye nhamba ye replicas yakaenzana ne 10. In deploy-canary.yaml tinoisa nhamba ye replicas kudzokera ku 0. Mushure mekuendesa, mugumisiro uchava sezvinotevera:

Canary Deployment muKubernetes #1: Gitlab CI

Summing up

Kwandiri, kumhanyisa kutumirwa nenzira iyi kunobatsira kunzwisisa kuti inogona kugadzirwa sei uchishandisa k8s. Sezvo Kubernetes ichikubvumidza kuti uvandudze zvese kuburikidza neAPI, matanho aya anogona otomatiki kuburikidza nezvinyorwa.

Chimwe chinhu chinoda kuitwa ndeye tester yekupinda nzvimbo (LoadBalancer kana kuburikidza neIngress) kuburikidza iyo chete vhezheni itsva inogona kuwanikwa. Inogona kushandiswa kubhurawuza yemanyorero.

Mune zvinyorwa zvinotevera, tichatarisa mamwe magadzirirwo ega ega anoshandisa zvizhinji zvatakaita.

Verengawo zvimwe zvinyorwa pane yedu blog:

Source: www.habr.com

Voeg