
Kanarideployering er en meget effektiv metode til at teste ny kode pÄ en delmÊngde af brugere. Det reducerer betydeligt den trafikbelastning, som kan forÄrsage problemer under udrulningen, da det kun finder sted inden for en bestemt undergruppe. Denne note handler om, hvordan man organiserer en sÄdan deployment ved hjÊlp af Kubernetes og automatisering af deployment. Det antages, at du allerede ved noget om Helm og Kubernetes-ressourcer..

En enkel kanarideployering i Kubernetes involverer to nÞgle ressourcer: selve servicen og udrulningsvÊrktÞjet. Kanarideployeringen fungerer gennem en tjeneste, der interagerer med to forskellige ressourcer, der hÄndterer opdateringstrafikken. En af disse ressourcer vil arbejde med den 'kanariefarvede' version, mens den anden vil arbejde med den stabile version. I denne situation kan vi regulere antallet af kanariefarvede versioner for at reducere den nÞdvendige mÊngde trafik, der skal hÄndteres. Hvis du for eksempel foretrÊkker at bruge Yaml, ser det sÄdan ud i Kubernetes:
kind: Deployment
metadata:
name: app-canary
labels:
app: app
spec:
replicas: 1
...
image: myapp:canary
---
kind: Deployment
metadata:
name: app
labels:
app: app
spec:
replicas: 5
...
image: myapp:stable
---
kind: Service
selector:
app: app # Selector vil rute trafik til begge udrulninger.En endnu lettere mÄde at forestille sig denne variant er via kubectl, mens i faktisk findes der en komplet tutorial til dette scenarie. Men det hovedspÞrgsmÄl, som dette indlÊg handler om, er, hvordan vi planlÊgger at automatisere denne proces ved hjÊlp af Helm.
Automatisering af kanarideployering
FÞrst og fremmest har vi brug for et Helm chart, som allerede indeholder de ressourcer, vi har diskuteret ovenfor. Det skal se nogenlunde sÄdan ud:
~\/charts\/app
âââ Chart.yaml
âââ README.md
âââ templates
â âââ NOTES.txt
â âââ _helpers.tpl
â âââ deployment.yaml
â âââ service.yaml
âââ values.yamlKernen i Helm-koncepterne er hĂ„ndtering af multi-versioner af releases. Den stabile version er vores primĂŠre stabile kodegren for projektet. Men ved hjĂŠlp af Helm kan vi udrulle en kanarirelease med vores eksperimentelle kode. Det vigtigste er at bevare trafikudvekslingen mellem den stabile version og kanarireleasen. Alt dette vil vi styre med en sĂŠrlig selector:
selector:
app.kubernetes.io\/name: myappVores bÄde "kanariefugle" og stabile deployments vil angive denne label pÄ modulerne. Hvis alt er konfigureret korrekt, vil trafikken under deployment af den kanariefugle version af vores Helm chart blive dirigeret til de nyoprettede moduler. Den stabile version af denne kommando vil se sÄdan ud:
helm upgrade
--install myapp
--namespace default
--set app.name=myapp # GÄr ind i app.kubernetes.io/name
--set app.version=v1 # GÄr ind i app.kubernetes.io/version
--set image.tag=stable
--set replicaCount=5Nu lad os tjekke vores kanariefugle release. For at deployere den kanariefugle version, skal vi huske to ting. Navnet pÄ releasen skal adskille sig, sÄ vi ikke overskriver den nuvÊrende stabile version. Versionen og tagget skal ogsÄ adskille sig, sÄ vi kan deployere anden kode og identificere forskelle baseret pÄ ressource-tags.
helm upgrade
--install myapp-canary
--namespace default
--set app.name=myapp # GÄr ind i app.kubernetes.io/name
--set app.version=v2 # GÄr ind i app.kubernetes.io/version
--set image.tag=canary
--set replicaCount=1Og det er egentlig det! Hvis man pinger tjenesten, kan man se, at den kanariefugle opdatering kun dirigerer trafikken noget af tiden.
Hvis du leder efter automatiseringsvÊrktÞjer til deployment, der inkluderer den beskrevne logik, sÄ tjek og pÄ . Helm charts, der anvendes til implementeringen af den beskrevne metode, ligger pÄ GitHub, . Generelt var dette en teoretisk gennemgang af, hvordan man praktisk implementerer automatisering af kanariefugle deployments med specifikke koncepter og eksempler.
Kilde: habr.com
