En enkel og sikker måde at automatisere kanarie-udrulninger med Helm

En enkel og sikker måde at automatisere kanarie-udrulninger med Helm

Canary-implementering er en meget effektiv måde at teste ny kode på en undergruppe af brugere. Det reducerer markant den trafikbelastning, der kan være problematisk under implementeringsprocessen, da den kun forekommer inden for en bestemt delmængde. Denne note er viet til, hvordan man organiserer en sådan implementering ved hjælp af Kubernetes og implementeringsautomatisering. Vi antager, at du ved noget om Helm og Kubernetes ressourcer.

En enkel og sikker måde at automatisere kanarie-udrulninger med Helm

En simpel kanarie-implementering til Kubernetes inkluderer to nøgleressourcer: selve tjenesten og implementeringsværktøjet. Canary-implementering fungerer gennem en enkelt tjeneste, der interagerer med to forskellige ressourcer, der betjener opdateringstrafik. En af disse ressourcer vil fungere med "canary" versionen, og den anden vil arbejde med den stabile version. I denne situation kan vi regulere antallet af kanariske versioner for at reducere mængden af ​​trafik, der kræves for at betjene. Hvis du for eksempel foretrækker at bruge Yaml, så 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 will route traffic to both deployments.

Det er endnu nemmere at forestille sig denne mulighed ved at bruge kubectl og i Kubernetes dokumentation Der er endda en komplet tutorial om dette scenarie. Men hovedspørgsmålet i dette indlæg er, hvordan vi skal automatisere denne proces ved hjælp af Helm.

Automatisering af udrulning af kanariefugle

Først og fremmest har vi brug for et Helm-kortkort, som allerede indeholder de ressourcer, vi diskuterede ovenfor. Det skal se sådan ud:

~/charts/app
├── Chart.yaml
├── README.md
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

Grundlaget for Helm-konceptet er håndteringen af ​​multiversionsudgivelser. Den stabile version er vores vigtigste stabile gren af ​​projektkoden. Men med Helm kan vi implementere en kanarie-udgivelse med vores eksperimentelle kode. Det vigtigste er at opretholde trafikudveksling mellem den stabile version og Canary-udgivelsen. Vi klarer alt dette ved hjælp af en speciel vælger:

selector:
  app.kubernetes.io/name: myapp

Vores "kanariefugle" og stabile implementeringsressourcer vil angive denne etiket på modulerne. Hvis alt er konfigureret korrekt, vil vi under implementeringen af ​​den kanariske version af vores Helm-kortkort se, at trafikken vil blive dirigeret til de nyligt installerede moduler. Den stabile version af denne kommando vil se sådan ud:

helm upgrade
  --install myapp 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v1       # Goes into app.kubernetes.io/version
  --set image.tag=stable 
  --set replicaCount=5

Lad os nu tjekke vores kanarie-udgivelse. For at implementere den kanariske version skal vi huske to ting. Udgivelsesnavnet skal være anderledes, så vi ikke udruller en opdatering til den aktuelle stabile version. Versionen og tagget skal også være anderledes, så vi kan implementere anden kode og identificere forskelle ved hjælp af ressourcetags.

helm upgrade
  --install myapp-canary 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v2       # Goes into app.kubernetes.io/version
  --set image.tag=canary 
  --set replicaCount=1

Det er alt! Hvis du pinger tjenesten, kan du se, at canary-opdateringen kun ruter trafik en del af tiden.

Hvis du leder efter implementeringsautomatiseringsværktøjer, der inkluderer den beskrevne logik, så vær opmærksom på Deliverybot og Styr automatiseringsværktøjer på GitHub. De Helm-diagrammer, der bruges til at implementere metoden beskrevet ovenfor, er på Github, her. Generelt var dette en teoretisk oversigt over, hvordan man implementerer automatisering af udrulning af kanariske versioner i praksis, med specifikke koncepter og eksempler.

Kilde: www.habr.com

Tilføj en kommentar