Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Re tla sebelisa k8s-native Argo Rollouts controller le GitlabCI ho tsamaisa lipehelo tsa Canary ho Kubernetes.

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

https://unsplash.com/photos/V41PulGL1z0

Lingoliloeng letotong lena

Ho tsamaisoa ha Canary

Re tšepa hore u tla bala karolo ea pele, moo re hlalositseng ka bokhutšoanyane hore na Canary Deployments ke eng. Re boetse re bonts'a mokhoa oa ho e kenya ts'ebetsong ka lisebelisoa tse tloaelehileng tsa Kubernetes.

Argo Rollouts

Argo Rollouts ke molaoli oa thomello ea matsoalloa a Kubernetes. E fana ka CRD (Tlhaloso ea Mohloli oa Tloaelo) bakeng sa Kubernetes. Ka lebaka leo, re ka sebelisa setheo se secha: Rollout, e laolang li-deployments tse botala bo botala le li-canary tse nang le likhetho tse fapaneng tsa tlhophiso.

Selaoli sa Argo Rollouts se sebelisoang ke sesebelisoa se ikhethileng Rollout, E lumella maano a eketsehileng a phepelo joalo ka botala bo boputsoa le canary bakeng sa Kubernetes. Mohlodi Rollout e fana ka tshebetso e lekanang Deployment, feela ka maano a eketsehileng a ho tsamaisa.
mohlodi Deployments e na le mekhoa e 'meli ea ho tsamaisa: RollingUpdate и Recreate. Le hoja maqheka ana a loketse maemong a mangata, bakeng sa ho romelloa ho li-server ka tekanyo e kholo haholo, ho sebelisoa maqheka a eketsehileng, a kang botala bo botala kapa canary, tse sa fumaneheng ho molaoli oa Deployment. Ho sebelisa maano ana ho Kubernetes, basebelisi ba ne ba tlameha ho ngola mangolo ka holim'a Deployments ea bona. The Argo Rollouts Controller e pepesa maano ana e le liparamente tse bonolo, tse phatlalatsang, tse ka lokisoang.
https://argoproj.github.io/argo-rollouts

Ho boetse ho na le Argo CI, e fanang ka sehokelo se bonolo sa webo hore se sebelisoe le Rollouts, re tla e sheba sehloohong se latelang.

Ho kenya Argo Rollouts

Lehlakore la seva

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

Ho turnip ea rona ea lisebelisoa (sheba ka tlase) re se re kentse install.yaml e le i/k8s/argo-rollouts/install.yaml. Ka tsela ena GitlabCI e tla e kenya ka har'a sehlopha.

Lehlakore la moreki (kubectl plugin)

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

Mohlala oa kopo

Ke mokhoa o motle ho ba le lipolokelo tse arohaneng bakeng sa khoutu ea kopo le lisebelisoa tsa motheo.

Sebaka sa polokelo ea kopo

Kim Wuestkamp/k8s-mohlala-mohlala-app

Ena ke Python + Flask API e bonolo haholo e khutlisetsang karabo joalo ka JSON. Re tla haha ​​​​sephutheloana re sebelisa GitlabCI ebe re sutumelletsa sephetho ho Gitlab Registry. Ho registry re na le mefuta e 'meli e fapaneng ea tokollo:

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

Phapang e le 'ngoe feela lipakeng tsa bona ke faele ea JSON e khutlisitsoeng. Re sebelisa sesebelisoa sena ho bona habonolo kamoo ho ka khonehang hore na re buisana le mofuta ofe.

Sebaka sa polokelo ea meaho

Sebakeng sena sa polokelo re tla sebelisa GitlabCI bakeng sa ho romelloa ho Kubernetes, .gitlab-ci.yml e shebahala tjena:

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

Ho e tsamaisa o tla hloka sehlopha, o ka sebelisa Gcloud:

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

U hloka ho fereko https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure le ho theha phetoho KUBECONFIG ho GitlabCI, e tla ba le config bakeng sa phihlello kubectl sehlopheng sa hao.

ke U ka bala ka mokhoa oa ho fumana mangolo a tumello bakeng sa sehlopha (Gcloud).

Infrastructure Yaml

Ka hare ho polokelo ea litšebeletso re na le litšebeletso:

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

le 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 e sebetsa joalo ka Deployment. Haeba re sa behe leano la ntlafatso (joalo ka canary mona) le tla sebetsa joalo ka Deployment ea kamehla ea rolling-update.

Re hlalosa mehato e 'meli ho yaml bakeng sa ho tsamaisoa ha canary:

  1. 10% ea sephethephethe ho ea canary (emela buka ea OK)
  2. 50% sephethephethe ho ea canary (ema metsotso e 2 ebe u tsoela pele ho 100%)

Ho etsa tlhahiso ea pele

Ka mor'a tlhahiso ea pele, lisebelisoa tsa rona li tla shebahala tjena:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

'Me re fumana karabo feela ho tsoa ho mofuta oa pele oa ts'ebeliso:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Ho etsa Canary Deployment

Mohato oa 1: 10% ea sephethephethe

Ho qala phepelo ea li-canary, re hloka feela ho fetola mofuta oa setšoantšo joalo ka ha re tloaetse ho etsa ka li-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
...

'Me re sutumelletsa liphetoho, kahoo Gitlab CI e tsamaisa' me re bona liphetoho:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Joale haeba re fumana litšebeletso:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

E kholo! Re bohareng ba ts'ebetso ea rona ea canary. Re ka bona tsoelopele ka ho matha:

kubectl argo rollouts get rollout rollout-canary

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Mohato oa 2: 50% ea sephethephethe:

Joale ha re feteleng mohatong o latelang: ho tsamaisa 50% ea sephethephethe. Re hlophisitse mohato ona hore o tsamaisoe ka letsoho:

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

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

'Me kopo ea rona e khutlisitse 50% ea likarabo ho tsoa liphetolelong tse ncha:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Le tlhahlobo ea tlhahiso:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

E makatsang.

Mohato oa 3: 100% ea sephethephethe:

Re e beha e le hore kamora metsotso e 2 mohato oa 50% o iphelise ka bohona mme mohato oa 100% o qale:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Le tlhahiso ea kopo:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Le tlhahlobo ea tlhahiso:

Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo

Ts'ebetso ea Canary e felile.

Mehlala e meng e nang le Argo Rollouts

Ho na le mehlala e meng mona, joalo ka mokhoa oa ho theha ponelopele ea tikoloho le papiso e ipapisitseng le canary:

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

Video e mabapi le Argo Rollouts le Argo CI

Ke khothaletsa video ena, e bonts'a kamoo Argo Rollouts le Argo CI li sebetsang 'moho:

Phello

Ke hlile ke rata mohopolo oa ho sebelisa li-CRD tse laolang tlhahiso ea mefuta e meng ea li-deployments kapa likopi, ho tsamaisa sephethephethe, jj. Ho sebetsa le bona ho tsamaea hantle. Ka mor'a moo ke rata ho leka ho kopanya le Argo CI.

Leha ho le joalo, ho bonahala ho na le kopano e kholo ea Argo CI le Flux CI e tlang, kahoo nka ema ho fihlela tokollo e ncha e tsoa: Argo Flux.

Na u bile le boiphihlelo ka Argo Rollouts kapa Argo CI?

Hape bala lingoliloeng tse ling ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso