Canary Deployment in Kubernetes #2: Argo Rollouts

O le a matou faʻaogaina le k8s-native Argo Rollouts deployment controller ma GitlabCI e faʻatautaia ai Canary deployments i Kubernetes

Canary Deployment in Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Mataupu i lenei faasologa

Canary Deployment

Matou te faamoemoe ua e faitau vaega muamua, lea na matou fa'amatala fa'apuupuu ai po'o le a le Canary Deployments. Na matou faʻaalia foi pe faʻapefea ona faʻatinoina e faʻaaoga ai punaoa masani Kubernetes.

Argo Rollouts

Argo Rollouts o le Kubernetes e pulea le fa'atinoina o galuega. E maua ai le CRD (Custom Resource Definition) mo Kubernetes. Faʻafetai i ai, e mafai ona matou faʻaogaina se mea fou: Rollout, lea e pulea le lanu moana-lanumeamata ma le canary deployments ma filifiliga fetuunaiga eseese.

Argo Rollouts pule fa'aaoga e se aganu'u aganu'u Rollout, Fa'ataga mo isi fa'ata'ita'iga fa'apipi'i e pei ole lanumoana-lanumeamata ma canary mo Kubernetes. Punaoa Rollout maua galuega tutusa Deployment, na'o le fa'aopoopoina o ta'iala fa'apipi'i.
alagāʻoa Deployments e lua taʻiala mo le faʻapipiʻiina: RollingUpdate и Recreate. E ui lava o nei taʻiala e talafeagai mo le tele o tulaga, mo le faʻapipiʻiina i 'auʻaunaga i luga o se lapoʻa tele, o loʻo faʻaaogaina isi taʻiala, e pei o le lanumoana-lanumeamata poʻo le canary, e le o maua i le Deployment controller. Ina ia faʻaogaina nei taʻiala i Kubernetes, e tatau i tagata faʻaoga ona tusia ni tusitusiga i luga o latou Faiga. O le Argo Rollouts Controller o lo'o fa'aalia nei ta'iala e faigofie, fa'ailoa, ma fa'atutu.
https://argoproj.github.io/argo-rollouts

O loʻo iai foʻi Argo CI, lea e tuʻuina atu ai se upega tafaʻilagi talafeagai mo le faʻaogaina ma Rollouts, o le a tatou vaʻavaʻai i lena mea i le isi tusiga.

Fa'apipi'i Argo Rollouts

Itu o le server

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

I totonu o la matou fale tele (va'ai i lalo) ua uma ona matou fa'aopoopo install.yaml e pei o i/k8s/argo-rollouts/install.yaml. O le auala lea e faʻapipiʻi ai e GitlabCI i totonu o le fuifui.

Itu fa'atau (kubectl plugin)

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

Faataitaiga Talosaga

Ose fa'ata'ita'iga lelei le i ai o ni fale teu fa'apitoa mo le fa'asologa o talosaga ma atina'e tetele.

Faleteu mo le talosaga

Kim Wuestkamp/k8s-deployment-example-app

O se Python + Flask API faigofie tele lea e toe faʻafoʻi mai se tali e pei o JSON. O le a matou fausia le afifi e faʻaaoga ai GitlabCI ma tulei le taunuʻuga i le Gitlab Registry. I totonu o le resitala e lua a matou faʻasalalauga faʻasalalauga eseese:

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

Pau lava le eseesega i le va o latou o le JSON faila toe faafoi. Matou te faʻaogaina lenei talosaga e vaʻavaʻai ai i le faigofie e mafai ai po o le a le faʻamatalaga matou te fesoʻotaʻi ai.

Fale teufale tetele

I totonu o lenei fale teu oloa o le a matou faʻaogaina GitlabCI mo le faʻapipiʻiina i Kubernetes, .gitlab-ci.yml e pei o lenei:

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

Ina ia faʻataʻitaʻiina oe lava e te manaʻomia se fuifui, e mafai ona e faʻaogaina Gcloud:

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

E tatau ona e tui https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ma faia se fesuiaiga KUBECONFIG i GitlabCI, lea o le a aofia ai le config mo avanoa kubectl i lau fuifui.

o E mafai ona e faitau i le auala e maua ai faʻamaoniga mo se fuifui (Gcloud).

Aseta Yaml

I totonu o le fale teu oloa o loʻo i ai le matou auaunaga:

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

ma 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 galue tutusa ma le Fa'asoa. Afai tatou te le setiina se fuafuaga faʻafouina (pei o canary iinei) o le a amio pei o le faʻaogaina o le rolling-update Deployment.

Matou te faʻamatalaina laasaga e lua i yaml mo le faʻapipiʻiina o canary:

  1. 10% o feoaiga i canary (faatali mo le tusi lesona OK)
  2. 50% feoaiga i canary (faatali mo le 2 minute ona faaauau lea i le 100%)

Faʻatinoina le faʻatulagaina muamua

A maeʻa le faʻapipiʻiina muamua, o a matou punaoa o le a pei o lenei:

Canary Deployment in Kubernetes #2: Argo Rollouts

Ma matou te maua se tali naʻo le lomiga muamua o le talosaga:

Canary Deployment in Kubernetes #2: Argo Rollouts

Fa'atinoina o le Canary Deployment

Laasaga 1: 10% feoaiga

Ina ia amata se faʻapipiʻiina o canary, e tatau ona tatou suia le ata faʻatusa e masani ona tatou faia i faʻapipiʻi:

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

Ma matou te tuleia suiga, o lea e faʻapipiʻi ai Gitlab CI ma matou vaʻai i suiga:

Canary Deployment in Kubernetes #2: Argo Rollouts

O lenei pe a tatou mauaina le auaunaga:

Canary Deployment in Kubernetes #2: Argo Rollouts

Matagofie! O lo'o matou i ai i le ogatotonu o la matou fa'apipi'iina o canary. E mafai ona tatou vaʻaia le alualu i luma e ala i le taʻavale:

kubectl argo rollouts get rollout rollout-canary

Canary Deployment in Kubernetes #2: Argo Rollouts

Laasaga 2: 50% feoaiga:

O lea la tatou agai i luma i le isi laasaga: toe faʻafeiloaʻi le 50% o fefaʻatauaiga. Na matou fa'atulagaina le laasaga lea e fa'atino ma le lima:

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

Canary Deployment in Kubernetes #2: Argo Rollouts

Ma o la matou talosaga na toe faafoi mai le 50% o tali mai lomiga fou:

Canary Deployment in Kubernetes #2: Argo Rollouts

Ma toe iloiloga fa'alauiloa:

Canary Deployment in Kubernetes #2: Argo Rollouts

Matagofie.

Laasaga 3: 100% feoaiga:

Matou te setiina ina ia maeʻa le 2 minute o le 50% laʻasaga e muta otometi ma amata le 100% laasaga:

Canary Deployment in Kubernetes #2: Argo Rollouts

Ma le faʻatinoga o le talosaga:

Canary Deployment in Kubernetes #2: Argo Rollouts

Ma toe iloiloga fa'alauiloa:

Canary Deployment in Kubernetes #2: Argo Rollouts

Ua maeʻa le faʻapipiʻiina o Canary.

E tele faʻataʻitaʻiga ma Argo Rollouts

E tele fa'ata'ita'iga iinei, e pei o le fa'atutuina o fa'ata'ita'iga o le si'osi'omaga ma fa'atusatusaga fa'atatau ile canary:

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

Vitio e uiga i Argo Rollouts ma Argo CI

Ou te matua fautuaina lenei vitio, e faʻaalia ai le auala e galulue faʻatasi ai Argo Rollouts ma Argo CI:

Le iʻuga

Ou te matua fiafia lava i le manatu o le faʻaaogaina o CRD e faʻatautaia ai le fausiaina o isi ituaiga faʻapipiʻi poʻo faʻasologa, toe faʻafeiloaʻi feoaiga, ma isi. O le galulue faatasi ma i latou e sologa lelei. Le isi ou te manaʻo e faʻataʻitaʻi le tuʻufaʻatasia ma Argo CI.

Ae ui i lea, e foliga mai o loʻo i ai se tuʻufaʻatasiga tele o Argo CI ma Flux CI o loʻo oʻo mai, ina ia mafai ona ou faʻatali seʻia oʻo mai le faʻasalalauga fou: Argo Flux.

Ua iai sou poto masani ile Argo Rollouts po'o le Argo CI?

Faitau foi isi tala i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga