Canary Deployment muKubernetes #2: Argo Rollouts

Isu tichashandisa iyo k8s-yekuzvarwa Argo Rollouts deployment controller uye GitlabCI kumhanya Canary deployments kuKubernetes.

Canary Deployment muKubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Zvinyorwa munhevedzano iyi

Canary Deployment

Tinovimba wakaverenga chikamu chekutanga, kwatakatsanangura muchidimbu kuti Canary Deployments chii. Isu takaratidzawo maitiro ekuishandisa uchishandisa yakajairwa Kubernetes zviwanikwa.

Argo Rollouts

Argo Rollouts ndeye Kubernetes chizvarwa chekuendesa controller. Iyo inopa CRD (Custom Resource Definition) yeKubernetes. Kutenda kwazviri, tinogona kushandisa chinhu chitsva: Rollout, iyo inogadzirisa bhuruu-girinhi uye canary deployments ine akasiyana siyana ekugadzirisa sarudzo.

Argo Rollouts controller inoshandiswa netsika sosi Rollout, Inobvumira mamwe maitiro ekutumira akadai sebhuruu-girinhi uye canary yeKubernetes. Resource Rollout inopa kushanda kwakaenzana Deployment, chete nemaitiro ekuwedzera ekutumira.
Zvinyorwa Deployments ine nzira mbiri dzekutumira: RollingUpdate ΠΈ Recreate. Kunyange zvazvo mazano aya akakodzera kuzviitiko zvakawanda, pakuendeswa kumaseva pamwero mukuru kwazvo, mamwe mazano anoshandiswa, akadai sebhuruu-girinhi kana canary, izvo zvisingawaniki muDeployment controller. Kuti ushandise mazano aya muKubernetes, vashandisi vaifanira kunyora zvinyorwa pamusoro peDeployments yavo. Iyo Argo Rollouts Controller inofumura mazano aya seakareruka, anozivisa, anogadziriswa paramita.
https://argoproj.github.io/argo-rollouts

Kune zvakare Argo CI, iyo inopa yakareruka yewebhu interface yekushandisa neRollouts, isu tichatarisa izvo mune inotevera chinyorwa.

Kuisa 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

Mune yedu yekuvaka turnip (ona pazasi) takatowedzera install.yaml se i/k8s/argo-rollouts/install.yaml. Nenzira iyi GitlabCI ichaiisa musumbu.

Chikamu chemutengi (kubectl plugin)

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

Muenzaniso Application

Iyo yakanaka tsika kuve neakasiyana repositories yekodhi yekushandisa uye zvivakwa.

Repository yekushandisa

Kim Wuestkamp/k8s-deployment-example-app

Iyi iri nyore kwazvo Python + Flask API inodzosera mhinduro seJSON. Isu tichavaka iyo package tichishandisa GitlabCI uye tosundira mhedzisiro kuGitlab Registry. Mune registry tine maviri akasiyana ekuburitsa shanduro:

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

Musiyano uripo pakati pavo ifaira reJSON rakadzoswa. Isu tinoshandisa iyi application kuona zviri nyore sezvinobvira iyo shanduro yatiri kutaurirana nayo.

Infrastructure repository

Mune ino repository tichashandisa GitlabCI yekuendesa kuKubernetes, .gitlab-ci.yml inoita seizvi:

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

Kuti uimhanye iwe uchada sumbu, unogona kushandisa Gcloud:

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

Unofanira forogo https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure uye gadzira shanduko KUBECONFIG muGitlabCI, iyo ichange iine config yekuwana kubectl kuboka rako.

zviri Unogona kuverenga nezve maitiro ekuwana zvitupa zveboka (Gcloud).

Infrastructure Yaml

Mukati mezvivakwa repository tine sevhisi:

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

and 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 inoshanda zvakafanana neDeployment. Kana tikasaisa zano rekuvandudza (senge canary pano) rinoita senge default rolling-update Deployment.

Isu tinotsanangura nhanho mbiri muyaml yekutumirwa kwecanary:

  1. 10% yetraffic kuenda kucanary (mirira bhuku OK)
  2. 50% traffic kuenda kucanary (mira maminetsi maviri wozoenderera ku2%)

Kuita kutumirwa kwekutanga

Mushure mekutanga kutumirwa, zviwanikwa zvedu zvinotaridzika seizvi:

Canary Deployment muKubernetes #2: Argo Rollouts

Uye isu tinowana mhinduro chete kubva kune yekutanga vhezheni yekushandisa:

Canary Deployment muKubernetes #2: Argo Rollouts

Kuita Canary Deployment

Nhanho 1: 10% traffic

Kuti utange kutumirwa kwecanary, isu tinongoda kushandura iyo vhezheni yemufananidzo sezvatinowanzoita ne deployments:

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
...

Uye isu tinosundira shanduko, saka Gitlab CI inotumira uye tinoona shanduko:

Canary Deployment muKubernetes #2: Argo Rollouts

Zvino kana tikawana sevhisi:

Canary Deployment muKubernetes #2: Argo Rollouts

Hukuru! Isu tiri pakati pekutumirwa kwedu canary. Tinogona kuona kufambira mberi nekumhanya:

kubectl argo rollouts get rollout rollout-canary

Canary Deployment muKubernetes #2: Argo Rollouts

Nhanho 2: 50% traffic:

Zvino ngatiendererei kune chinhanho chinotevera: kutungamira 50% yetraffic. Isu takagadzirisa danho iri kuti riitwe nemaoko:

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

Canary Deployment muKubernetes #2: Argo Rollouts

Uye application yedu yakadzosa 50% yemhinduro kubva kushanduro itsva:

Canary Deployment muKubernetes #2: Argo Rollouts

Uye kuongorora kwekutanga:

Canary Deployment muKubernetes #2: Argo Rollouts

Wonderful.

Nhanho 3: 100% traffic:

Isu takazvigadzirisa kuitira kuti mushure memaminitsi maviri nhanho ye2% inopera otomatiki uye nhanho ye50% yaizotanga:

Canary Deployment muKubernetes #2: Argo Rollouts

Uye iyo application inobuda:

Canary Deployment muKubernetes #2: Argo Rollouts

Uye kuongorora kwekutanga:

Canary Deployment muKubernetes #2: Argo Rollouts

Canary deployment yapera.

Mimwe mienzaniso neArgo Rollouts

Kune mimwe mienzaniso pano, senge nzira yekumisikidza nharaunda yekutarisa uye kuenzanisa kunoenderana necanary:

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

Vhidhiyo nezve Argo Rollouts uye Argo CI

Ini ndinonyatso kurudzira iyi vhidhiyo, inoratidza mashandiro anoita Argo Rollouts uye Argo CI pamwe chete:

Mugumisiro

Ini ndinoda chaizvo zano rekushandisa maCRD anogadzirisa kugadzirwa kwemamwe marudzi ekutumirwa kana kudhindwa, redirect traffic, nezvimwe. Kushanda navo kunofamba zvakanaka. Tevere ndinoda kuyedza kubatanidzwa neArgo CI.

Nekudaro, panoratidzika kunge paine kubatanidzwa kukuru kweArgo CI neFlux CI iri kuuya, saka ndinogona kumirira kusvika kuburitswa kutsva kwabuda: Argo Flux.

Wakambove neruzivo here neArgo Rollouts kana Argo CI?

Verengawo zvimwe zvinyorwa pane yedu blog:

Source: www.habr.com

Voeg