Ib txoj hauv kev yooj yim thiab ruaj ntseg rau automate canary deployments siv Helm

Ib txoj hauv kev yooj yim thiab ruaj ntseg rau automate canary deployments siv Helm

Kev xa tawm Canary yog ib txoj hauv kev zoo heev los sim cov lej tshiab ntawm cov neeg siv khoom. Nws txo qis cov tsheb thauj khoom uas tuaj yeem muaj teeb meem thaum lub sijhawm xa mus, vim nws tsuas yog tshwm sim hauv ib qho tshwj xeeb. Daim ntawv no tau mob siab rau yuav ua li cas los npaj xws li kev xa tawm siv Kubernetes thiab xa tawm automation. Peb xav tias koj paub qee yam txog Helm thiab Kubernetes cov peev txheej.

Ib txoj hauv kev yooj yim thiab ruaj ntseg rau automate canary deployments siv Helm

Ib qho yooj yim canary xa mus rau Kubernetes suav nrog ob qhov tseem ceeb: kev pabcuam nws tus kheej thiab cov cuab yeej xa tawm. Kev xa tawm Canary ua haujlwm los ntawm ib qho kev pabcuam uas cuam tshuam nrog ob qhov kev pabcuam sib txawv ua haujlwm hloov kho tsheb. Ib qho ntawm cov peev txheej no yuav ua haujlwm nrog "canary" version, thiab qhov thib ob yuav ua haujlwm nrog cov qauv ruaj khov. Hauv qhov xwm txheej no, peb tuaj yeem tswj hwm tus naj npawb ntawm cov canary versions txhawm rau txo cov tsheb khiav yuav tsum tau ua haujlwm. Yog tias, piv txwv li, koj nyiam siv Yaml, ces nws yuav zoo li no hauv 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.

Nws tseem yooj yim dua los xav txog qhov kev xaiv no siv kubectl, thiab hauv Kubernetes cov ntaub ntawv Muaj txawm tias ib daim ntawv qhia tag nrho ntawm qhov xwm txheej no. Tab sis cov lus nug tseem ceeb ntawm cov ntawv tshaj tawm no yog yuav ua li cas peb yuav ua kom cov txheej txheem no siv Helm.

Automation ntawm canary deployment

Ua ntej tshaj plaws, peb xav tau daim ntawv qhia Helm, uas twb muaj cov peev txheej uas peb tau tham saum toj no. Nws yuav tsum zoo li no:

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

Lub hauv paus ntawm Helm lub tswv yim yog kev tswj hwm ntawm ntau qhov kev tshaj tawm. Lub ruaj khov version yog peb lub ntsiab ruaj khov ceg ntawm qhov project code. Tab sis nrog Helm peb tuaj yeem xa cov canary tso tawm nrog peb cov lej sim. Qhov tseem ceeb tshaj plaws yog tswj kev sib pauv tsheb ntawm qhov ruaj khov version thiab canary tso tawm. Peb yuav tswj tag nrho cov no siv ib tug tshwj xeeb selector:

selector:
  app.kubernetes.io/name: myapp

Peb "canary" thiab kev xa khoom ruaj khov yuav qhia cov ntawv no ntawm cov qauv. Yog tias txhua yam raug teeb tsa kom raug, tom qab ntawd thaum lub sij hawm xa mus rau canary version ntawm peb daim ntawv qhia Helm peb yuav pom tias kev khiav tsheb yuav raug coj mus rau cov qauv siv tshiab. Qhov ruaj khov version ntawm cov lus txib no yuav zoo li no:

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

Tam sim no cia saib peb cov canary tso tawm. Yuav kom xa cov canary version, peb yuav tsum nco ntsoov ob yam. Lub npe tso tawm yuav tsum sib txawv kom peb tsis txhob dov tawm qhov hloov tshiab rau tam sim no ruaj khov version. Lub version thiab tag yuav tsum sib txawv kom peb tuaj yeem siv lwm cov cai thiab txheeb xyuas qhov sib txawv los ntawm cov ntawv cim npe.

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

Yog tag nrho! Yog tias koj ping qhov kev pabcuam, koj tuaj yeem pom tias canary hloov tshiab txoj kev tsheb tsuas yog ib feem ntawm lub sijhawm.

Yog tias koj tab tom nrhiav kev xa tawm cov cuab yeej automation uas suav nrog cov lus piav qhia, ces ua tib zoo mloog Deliverybot thiab Helm automation cov cuab yeej ntawm GitHub. Cov kab kos Helm siv los ua cov txheej txheem tau piav qhia saum toj no yog nyob ntawm Github, nyob ntawm no. Nyob rau hauv dav dav, qhov no yog ib tug theoretical txheej txheem cej luam ntawm yuav ua li cas siv automation ntawm deployment ntawm canary versions nyob rau hauv kev xyaum, nrog rau cov ntsiab lus tshwj xeeb thiab piv txwv.

Tau qhov twg los: www.hab.com

Ntxiv ib saib