Canary Deployment hauv Kubernetes #2: Argo Rollouts

Peb yuav siv k8s-native Argo Rollouts deployment controller thiab GitlabCI los khiav Canary deployments rau Kubernetes

Canary Deployment hauv Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Cov lus hauv no series

Canary Deployment

Peb vam tias koj nyeem thawj ntu, qhov twg peb piav luv luv txog Canary Deployments yog dab tsi. Peb kuj tau qhia yuav ua li cas los siv nws siv tus qauv Kubernetes cov peev txheej.

Argo Rollouts

Argo Rollouts yog Kubernetes ib txwm siv tus tswj hwm. Nws muab CRD (Kev Pabcuam Kev Cai txhais) rau Kubernetes. Ua tsaug rau nws, peb tuaj yeem siv qhov chaw tshiab: Rollout, uas tswj cov xiav-ntsuab thiab canary deployments nrog ntau yam configuration xaiv.

Argo Rollouts maub los siv los ntawm cov peev txheej kev cai Rollout, Tso cai rau kev xa tawm cov tswv yim ntxiv xws li xiav-ntsuab thiab canary rau Kubernetes. Cov peev txheej Rollout muab functionality sib npaug Deployment, tsuas yog nrog cov tswv yim xa tawm ntxiv.
kev pab Deployments muaj ob lub tswv yim rau kev xa tawm: RollingUpdate ΠΈ Recreate. Txawm hais tias cov tswv yim no tsim nyog rau feem ntau, rau kev xa mus rau cov servers ntawm qhov loj heev, cov tswv yim ntxiv yog siv, xws li xiav-ntsuab lossis canary, uas tsis muaj nyob rau hauv Deployment controller. Txhawm rau siv cov tswv yim no hauv Kubernetes, cov neeg siv yuav tsum tau sau cov ntawv sau rau saum lawv Cov Kev Tshaj Tawm. Lub Argo Rollouts Controller nthuav tawm cov tswv yim no raws li qhov yooj yim, tshaj tawm, kev teeb tsa tsis tau.
https://argoproj.github.io/argo-rollouts

Tseem muaj Argo CI, uas muab lub vev xaib yooj yim rau kev siv nrog Rollouts, peb yuav saib qhov ntawd hauv tsab xov xwm tom ntej.

Txhim kho Argo Rollouts

Server Side

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

Hauv peb cov kev tsim vaj tsev turnip (saib hauv qab) peb twb tau ntxiv install.yaml li i/k8s/argo-rollouts/install.yaml. Qhov no GitlabCI yuav nruab nws rau hauv pawg.

Client side (kubectl plugin)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

Piv txwv Daim Ntawv Thov

Nws yog qhov kev coj ua zoo kom muaj cov chaw khaws cia cais rau daim ntawv thov code thiab cov txheej txheem.

Repository rau daim ntawv thov

Kim Wuestkamp/k8s-deployment-example-app

Qhov no yog qhov yooj yim heev Python + Flask API uas rov qab teb raws li JSON. Peb yuav tsim lub pob siv GitlabCI thiab thawb cov txiaj ntsig mus rau Gitlab Registry. Hauv kev sau npe peb muaj ob qhov kev tso tawm sib txawv:

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

Qhov sib txawv ntawm lawv tsuas yog JSON cov ntaub ntawv xa rov qab. Peb siv daim ntawv thov no kom pom tau yooj yim li sai tau uas peb tab tom tham nrog.

Infrastructure repository

Hauv qhov chaw cia khoom no peb yuav siv GitlabCI rau kev xa mus rau Kubernetes, .gitlab-ci.yml zoo li qhov no:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s    only:
     - master

Txhawm rau khiav koj tus kheej koj yuav xav tau pawg, koj tuaj yeem siv Gcloud:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80

Koj yuav tsum fork https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure thiab tsim qhov sib txawv KUBECONFIG hauv GitlabCI, uas yuav muaj cov config rau kev nkag kubectl rau koj pawg.

nws yog Koj tuaj yeem nyeem txog yuav ua li cas thiaj li tau txais daim ntawv pov thawj rau pawg (Gcloud).

Infrastructure Yaml

Nyob rau hauv lub infrastructure repository peb muaj kev pab:

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

thiab rollout.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout ua hauj lwm ib yam li Deployment. Yog tias peb tsis teeb tsa lub tswv yim hloov tshiab (xws li canary ntawm no) nws yuav coj zoo li lub neej ntawd dov-hloov tshiab Kev xa tawm.

Peb txhais ob kauj ruam hauv yaml rau kev xa tawm canary:

  1. 10% ntawm kev khiav mus rau canary (tos phau ntawv OK)
  2. 50% kev khiav mus rau canary (tos 2 feeb ces txuas ntxiv mus rau 100%)

Ua qhov pib xa tawm

Tom qab kev xa tawm thawj zaug, peb cov peev txheej yuav zoo li no:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Thiab peb tau txais cov lus teb tsuas yog los ntawm thawj version ntawm daim ntawv thov:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Ua haujlwm Canary Deployment

Kauj Ruam 1: 10% kev khiav tsheb

Txhawm rau pib xa tawm canary, peb tsuas yog yuav tsum tau hloov cov duab version raws li peb feem ntau ua nrog kev xa tawm:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

Thiab peb thawb cov kev hloov pauv, yog li Gitlab CI xa mus thiab peb pom cov kev hloov pauv:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Tam sim no yog tias peb nkag mus rau qhov kev pabcuam:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Zoo heev! Peb nyob nruab nrab ntawm peb cov canary xa mus. Peb tuaj yeem pom qhov kev nce qib los ntawm kev khiav:

kubectl argo rollouts get rollout rollout-canary

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Kauj ruam 2: 50% tsheb khiav:

Tam sim no cia peb mus rau kauj ruam tom ntej: redirecting 50% ntawm cov tsheb khiav. Peb configured kauj ruam no yuav tsum tau khiav manually:

kubectl argo rollouts promote rollout-canary # continue to step 2

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Thiab peb daim ntawv thov rov qab 50% ntawm cov lus teb los ntawm cov ntawv tshiab:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Thiab rov qab xyuas dua:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Zoo kawg.

Kauj ruam 3: 100% tsheb khiav:

Peb teeb tsa nws kom tom qab 2 feeb 50% kauj ruam xaus tau txais thiab 100% kauj ruam pib:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Thiab daim ntawv thov tso zis:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Thiab rov qab xyuas dua:

Canary Deployment hauv Kubernetes #2: Argo Rollouts

Kev xa tawm Canary tiav lawm.

Ntau cov piv txwv nrog Argo Rollouts

Muaj ntau cov piv txwv ntawm no, xws li yuav ua li cas teeb tsa ib puag ncig saib ua ntej thiab kev sib piv raws li canary:

https://github.com/argoproj/argo-rollouts/tree/master/examples

Video hais txog Argo Rollouts thiab Argo CI

Kuv yeej pom zoo cov yeeb yaj kiab no, nws qhia tau hais tias Argo Rollouts thiab Argo CI ua haujlwm li cas:

Qhov no

Kuv yeej nyiam lub tswv yim ntawm kev siv CRDs uas tswj kev tsim cov hom kev xa tawm ntxiv lossis cov khoom siv rov ua dua, hloov pauv tsheb, thiab lwm yam. Ua haujlwm nrog lawv mus zoo. Tom ntej no kuv xav sim kev koom ua ke nrog Argo CI.

Txawm li cas los xij, zoo li muaj kev sib koom ua ke loj ntawm Argo CI thiab Flux CI tuaj, yog li kuv yuav tos kom txog thaum qhov kev tso tawm tshiab tawm: Argo Flux.

Koj puas tau muaj kev paub nrog Argo Rollouts lossis Argo CI?

Kuj nyeem lwm cov ntawv hauv peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib