Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Hampiasa ny k8s-native Argo Rollouts deployment controller sy GitlabCI izahay hampandeha ny fandefasana Canary amin'ny Kubernetes

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Lahatsoratra ato amin'ity andiany ity

Fampielezana Canary

Manantena izahay fa mamaky ianao tapany voalohany, izay nanazavantsika fohifohy ny atao hoe Canary Deployments. Nasehonay ihany koa ny fomba fampiharana azy amin'ny fampiasana loharanon-karena Kubernetes mahazatra.

Argo Rollouts

Argo Rollouts dia mpitantana ny fametrahana teratany Kubernetes. Izy io dia manome CRD (Custom Resource Definition) ho an'ny Kubernetes. Noho izany dia afaka mampiasa entity vaovao isika: Rollout, izay mitantana ny fametrahana manga-maitso sy canary miaraka amin'ny safidy fanamboarana isan-karazany.

Argo Rollouts controller ampiasain'ny loharano mahazatra Rollout, Mamela paikady fametrahana fanampiny toy ny manga-maitso sy ny canary ho an'ny Kubernetes. loharano Rollout manome fonctionnaire mitovy Deployment, miaraka amin'ny paikady fametrahana fanampiny ihany.
loharano Deployments manana paikady roa amin'ny fametrahana: RollingUpdate и Recreate. Na dia mety amin'ny ankamaroan'ny toe-javatra aza ireo paikady ireo, ho an'ny fandefasana amin'ny lohamilina amin'ny ambaratonga lehibe dia misy paikady fanampiny ampiasaina, toy ny manga-maitso na canary, izay tsy hita ao amin'ny fanaraha-maso ny Deployment. Mba hampiasana ireo paika ireo ao amin'ny Kubernetes, dia tsy maintsy nanoratra sora-baventy teo ambonin'ny Fametrahany ny mpampiasa. Ny Argo Rollouts Controller dia mampiharihary ireo paikady ireo ho toy ny masontsivana tsotra sy azo amboarina.
https://argoproj.github.io/argo-rollouts

Misy ihany koa ny Argo CI izay manome interface tsara amin'ny Internet ampiasaina amin'ny Rollouts, hojerentsika izany amin'ny lahatsoratra manaraka.

Fametrahana Argo Rollouts

Lafiny mpizara

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

Ao amin'ny fotodrafitrasantsika (jereo eto ambany) dia efa nampiana install.yaml ho i/k8s/argo-rollouts/install.yaml. Amin'izany fomba izany no hametrahana azy ao amin'ny cluster ny GitlabCI.

Ny lafiny mpanjifa (kubectl plugin)

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

Fampiharana ohatra

Fomba fanao tsara ny manana tahiry manokana ho an'ny fehezan-dalàna sy fotodrafitrasa fampiharana.

Repository ho an'ny fampiharana

Kim Wuestkamp/k8s-deployment-example-app

Ity dia Python + Flask API tena tsotra izay mamerina valiny ho JSON. Hanamboatra ny fonosana amin'ny alàlan'ny GitlabCI izahay ary hanosika ny valiny mankany amin'ny Rejistra Gitlab. Ao amin'ny rejisitra dia manana dikan-teny roa samihafa izahay:

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

Ny hany maha samy hafa azy ireo dia ny rakitra JSON niverina. Ampiasainay ity fampiharana ity mba hijerena mora foana ny dikan-teny ifampiresahanay.

Fitehirizana fotodrafitrasa

Amin'ity tahiry ity dia hampiasa ny GitlabCI izahay amin'ny fametrahana ny Kubernetes, .gitlab-ci.yml dia toy izao:

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

Mba hampandehanana azy dia mila cluster ianao, azonao atao ny mampiasa Gcloud:

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

Mila fork ianao https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ary mamorona variable KUBECONFIG ao amin'ny GitlabCI, izay ahitana ny config ho an'ny fidirana kubectl mankany amin'ny cluster anao.

izany Azonao atao ny mamaky momba ny fomba hahazoana fahazoan-dàlana ho an'ny cluster (Gcloud).

Fotodrafitrasa Yaml

Ao anatin'ny fitahirizana fotodrafitrasa dia manana serivisy izahay:

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

ary 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 miasa mitovy amin'ny Deployment. Raha tsy mametraka paikady fanavaozam-baovao isika (toy ny canary eto) dia ho toy ny Deployment rolling-update default izany.

Mamaritra dingana roa amin'ny yaml izahay amin'ny fametrahana ny canary:

  1. 10% amin'ny fifamoivoizana mankany amin'ny canary (miandry ny bokotra OK)
  2. 50% ny fifamoivoizana mankany canary (miandrasa 2 minitra dia tohizo hatramin'ny 100%)

Manatanteraka ny fametrahana voalohany

Aorian'ny fametrahana voalohany dia ho toy izao ny loharanontsika:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Ary avy amin'ny dikan-teny voalohany amin'ny fampiharana ihany no mahazo valiny:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Manatanteraka ny fandefasana Canary

Dingana 1: 10% fifamoivoizana

Mba hanombohana fametrahana canary dia mila manova ny dikan-tsary toy ny mahazatra amin'ny fametrahana:

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

Ary manosika fiovana izahay, ka ny Gitlab CI dia mametraka ary hitantsika ny fiovana:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Ankehitriny raha miditra amin'ny serivisy isika:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Mahafinaritra! Eo afovoan'ny fanaparitahana canary izahay. Hitantsika ny fandrosoana amin'ny alàlan'ny fihazakazahana:

kubectl argo rollouts get rollout rollout-canary

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Dingana 2: 50% fifamoivoizana:

Andeha isika hiroso amin'ny dingana manaraka: mamindra ny 50% amin'ny fifamoivoizana. Namboarinay ity dingana ity mba hatao amin'ny tanana:

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

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Ary ny fampiharana anay dia namerina ny 50%-n'ny valiny avy amin'ny dikan-teny vaovao:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Ary famerenana ny famoahana:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Mahafinaritra.

Dingana 3: 100% fifamoivoizana:

Napetrakay izany ka rehefa afaka 2 minitra dia tapitra ho azy ny dingana 50% ary manomboka ny dingana 100%:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Ary ny Output fampiharana:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Ary famerenana ny famoahana:

Fametrahana Canary ao amin'ny Kubernetes #2: Argo Rollouts

Vita ny fandefasana Canary.

Ohatra bebe kokoa miaraka amin'ny Argo Rollouts

Misy ohatra maro kokoa eto, toy ny fomba fametrahana ny fijerena ny tontolo iainana sy ny fampitahana mifototra amin'ny canary:

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

Lahatsary momba ny Argo Rollouts sy Argo CI

Tena manoro hevitra ity horonantsary ity aho, mampiseho ny fomba fiasan'ny Argo Rollouts sy Argo CI:

Ny vokany

Tena tiako ny hevitra amin'ny fampiasana CRD izay mitantana ny famoronana karazana fanaparitahana fanampiny na replicase, redirect traffic, sns. Mizotra tsara ny fiaraha-miasa amin’izy ireo. Manaraka izany dia te-hizaha toetra ny fampidirana amin'ny Argo CI aho.

Na izany aza, toa misy fampifangaroana lehibe ny Argo CI sy ny Flux CI ho avy, ka mety hiandry aho mandra-pivoakan'ny famoahana vaovao: Argo Flux.

Efa nanana traikefa tamin'ny Argo Rollouts na Argo CI ve ianao?

Vakio ihany koa lahatsoratra hafa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment