Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

Se nużaw Gitlab CI u GitOps manwali biex nimplimentaw u nużaw l-iskjerament ta' Canary f'Kubernetes

Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

Artikoli minn din is-serje:

Aħna se nwettqu l-iskjerament tal-Canary manwalment permezz ta 'GitOps u noħolqu/nimmodifikaw ir-riżorsi ewlenin ta' Kubernetes. Dan l-artikolu huwa maħsub primarjament għall-introduzzjoni ma 'kif jaħdem l-iskjerament f'Kubernetes Canary, peress li hemm metodi aktar effettivi ta' awtomazzjoni, li se nikkunsidraw fl-artikoli li ġejjin.


Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

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

Skjerament tal-Kanarji

Bl-istrateġija Canary, l-aġġornamenti huma l-ewwel applikati għal subsett ta' utenti biss. Permezz ta 'monitoraġġ, dejta tal-log, ittestjar manwali, jew kanali ta' feedback oħra, ir-rilaxx jiġi ttestjat qabel ma jiġi rilaxxat lill-utenti kollha.

Kubernetes Deployment (aġġornament kontinwu)

L-istrateġija awtomatika għal Kubernetes Deployment hija rolling-update, fejn ċertu numru ta 'miżwed huma mnedija b'verżjonijiet ġodda tal-immaġini. Jekk inħolqu mingħajr problemi, imżiewed b'verżjonijiet qodma ta 'immaġini jintemmu, u mżiewed ġodda jinħolqu b'mod parallel.

GitOps

Aħna nużaw GitOps f'dan l-eżempju għaliex aħna:

  • billi tuża Git bħala sors wieħed tal-verità
  • nużaw Operazzjonijiet Git għall-bini u l-iskjerament (mhu meħtieġ l-ebda kmandi għajr git tag/merge)

Eżempju

Ejja nieħdu prattika tajba - biex ikollna repożitorju wieħed għall-kodiċi tal-applikazzjoni u wieħed għall-infrastruttura.

Repożitorju tal-applikazzjonijiet

Din hija API Python+Flask sempliċi ħafna li tirritorna tweġiba bħala JSON. Aħna se nibnu l-pakkett permezz ta 'GitlabCI u nimbottaw ir-riżultat lir-Reġistru Gitlab. Fir-reġistru għandna żewġ verżjonijiet ta 'rilaxx differenti:

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

L-unika differenza bejniethom hija l-bidla fil-fajl JSON lura. Aħna nużaw din l-applikazzjoni biex naraw kemm jista' jkun faċilment liema verżjoni qed nikkomunikaw magħha.

Repożitorju ta' l-infrastruttura

F'dan in-nevew ser niskjeraw permezz ta' GitlabCI għal Kubernetes, .gitlab-ci.yml jidher bħal dan:

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

Biex tħaddem lilek innifsek ser ikollok bżonn cluster, tista' tuża Gcloud:

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

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

Għandek bżonn furketta https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure u toħloq varjabbli KUBECONFIG f'GitlabCI, li jkun fih il-konfigurazzjoni għall-aċċess kubectl lill-cluster tiegħek.

Tista' taqra dwar kif tikseb kredenzjali għal cluster (Gcloud) hawn.

Infrastruttura Yaml

Fir-repożitorju tal-infrastruttura għandna servizz:

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

U skjerament fi 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

U skjerament ieħor fi 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

Innota li app-deploy għadha m'għandha l-ebda replika definita.

Twettiq ta 'skjerament inizjali

Biex tibda l-iskjerament inizjali, tista 'tibda l-pipeline GitlabCI manwalment fuq il-fergħa prinċipali. Wara kubectl għandu joħroġ dan li ġej:

Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

Naraw app skjerament b'10 repliki u app-canary b'0. Hemm ukoll LoadBalancer li minnu nistgħu naċċessaw permezz curl permezz ta' IP Estern:

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

Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

Naraw li l-applikazzjoni tat-test tagħna tirritorna biss "v1".

L-eżekuzzjoni tal-iskjerament tal-Kanarji

Pass 1: rilaxx verżjoni ġdida għal xi utenti

Aħna stabbilixxew in-numru ta 'repliki għal 1 fil-fajl deploy-canary.yaml u l-immaġni tal-verżjoni l-ġdida:

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

Fil-fajl deploy.yaml biddilna n-numru ta’ repliki għal 9:

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

Aħna nimbuttaw dawn il-bidliet fir-repożitorju li minnu jibda l-iskjerament (permezz ta' GitlabCI) u naraw bħala riżultat:

Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

Is-Servizz tagħna se jindika ż-żewġ skjeramenti, peress li t-tnejn għandhom is-selettur tal-app. Minħabba l-randomizzazzjoni default ta' Kubernetes, għandna naraw tweġibiet differenti għal ~ 10% tat-talbiet:

Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

L-istat attwali tal-applikazzjoni tagħna (GitOps, meħuda minn Git bħala Sors Uniku tal-Verità) huwa l-preżenza ta 'żewġ skjeramenti b'repliki attivi, waħda għal kull verżjoni.

~10% tal-utenti jsiru familjari ma' verżjoni ġdida u jittestjawha mhux intenzjonalment. Issa huwa ż-żmien li tivverifika l-iżbalji fir-zkuk u d-dejta tal-monitoraġġ biex issib problemi.

Pass 2: Irrilaxxa l-verżjoni l-ġdida lill-utenti kollha

Iddeċidejna li kollox mar tajjeb u issa rridu nwasslu l-verżjoni l-ġdida lill-utenti kollha. Biex nagħmlu dan aħna sempliċement naġġornaw deploy.yaml installazzjoni ta’ verżjoni ġdida tal-immaġni u n-numru ta’ repliki ugwali għal 10. Fil deploy-canary.yaml aħna nissettjaw in-numru ta 'repliki lura għal 0. Wara l-iskjerament, ir-riżultat se jkun kif ġej:

Skjerament tal-Kanarji f'Kubernetes #1: Gitlab CI

Bħala sinteżi

Għalija, it-tħaddim tal-iskjerament manwalment b'dan il-mod jgħin biex nifhem kemm jista 'jiġi kkonfigurat faċilment bl-użu ta' k8s. Peress li Kubernetes jippermettilek taġġorna kollox permezz ta' API, dawn il-passi jistgħu jiġu awtomatizzati permezz ta' skripts.

Ħaġa oħra li jeħtieġ li tiġi implimentata hija punt tad-dħul tat-tester (LoadBalancer jew permezz ta 'Ingress) li permezz tiegħu tista' tiġi aċċessata biss il-verżjoni l-ġdida. Jista 'jintuża għall-ibbrawżjar manwali.

F'artikoli futuri, ser niċċekkjaw soluzzjonijiet awtomatizzati oħra li jimplimentaw ħafna minn dak li għamilna.

Aqra wkoll artikli oħra fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment