Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Sizosebenzisa isilawuli sokuthunyelwa kwe-k8s-native Argo Rollouts kanye ne-GitlabCI ukuze siqhube ukuthunyelwa kwe-Canary e-Kubernetes

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

https://unsplash.com/photos/V41PulGL1z0

Izihloko kulolu chungechunge

Ukuthunyelwa kwe-Canary

Sithemba ukuthi ufunda ingxenye yokuqala, lapho sichaze kafushane ukuthi i-Canary Deployments iyini. Siphinde sabonisa ukuthi singayisebenzisa kanjani kusetshenziswa izinsiza ezijwayelekile ze-Kubernetes.

Ukukhishwa kwe-Argo

I-Argo Rollouts isilawuli sokuthunyelwa somdabu sase-Kubernetes. Ihlinzeka nge-CRD (Incazelo Yensiza Yangokwezifiso) ye-Kubernetes. Siyabonga ngakho, singasebenzisa ibhizinisi elisha: Rollout, ephethe ukuthunyelwa kwe-blue-green kanye ne-canary ngezinketho ezihlukahlukene zokucushwa.

Isilawuli se-Argo Rollouts sisetshenziswa insiza yangokwezifiso Rollout, Ivumela amasu okusebenzisa angeziwe afana nokuluhlaza okwesibhakabhaka nokuhlaza kwe-canary ye-Kubernetes. Insiza Rollout inikeza ukusebenza okulinganayo Deployment, kuphela ngamasu okusebenzisa engeziwe.
resource Deployments inamasu amabili okusetshenziswa: RollingUpdate и Recreate. Nakuba lawa masu elungele izimo eziningi, ukuze athunyelwe kumaseva ngesilinganiso esikhulu kakhulu, amaqhinga engeziwe asetshenziswa, njenge-blue-green noma i-canary, angatholakali kusilawuli Sokuthunyelwa. Ukuze usebenzise lawa maqhinga ku-Kubernetes, abasebenzisi bekufanele babhale imibhalo ngaphezulu Kokuthunyelwa kwabo. Isilawuli se-Argo Rollouts sidalula lawa maqhinga njengamapharamitha alula, amemezelayo, alungisekayo.
https://argoproj.github.io/argo-rollouts

Kukhona futhi i-Argo CI, enikeza isixhumi esibonakalayo sewebhu esisebenziseka kalula ne-Rollouts, sizokubheka lokho esihlokweni esilandelayo.

Ifaka i-Argo Rollouts

Uhlangothi lweseva

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

Kutheniphu yethu yengqalasizinda (bona ngezansi) sesivele sengeze i-install.yaml njenge-i/k8s/argo-rollouts/install.yaml. Ngale ndlela i-GitlabCI izoyifaka ku-cluster.

Uhlangothi lweklayenti (kubectl plugin)

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

Isibonelo Isicelo

Kungumkhuba omuhle ukuba nezindawo zokugcina ezihlukene zekhodi yesicelo nengqalasizinda.

Inqolobane yesicelo

Uhlelo lokusebenza lwe-Kim Wuestkamp/k8s-deployment-example-app

Lena i-Python+Flask API elula kakhulu ebuyisela impendulo njenge-JSON. Sizokwakha iphakheji sisebenzisa i-GitlabCI futhi sisunduze umphumela ku-Gitlab Registry. Ekubhaliseni sinezinguqulo ezimbili ezihlukene zokukhishwa:

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

Umehluko kuphela phakathi kwawo yifayela le-JSON elibuyisiwe. Sisebenzisa lolu hlelo lokusebenza ukubona ngeso lengqondo kalula ngangokunokwenzeka ukuthi iyiphi inguqulo esixhumana nayo.

Inqolobane yengqalasizinda

Kule ndawo yokugcina sizosebenzisa i-GitlabCI ukuze siyithumele ku-Kubernetes, i-.gitlab-ci.yml ibukeka kanje:

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

Ukuze uyiqhube ngokwakho uzodinga iqoqo, ungasebenzisa i-Gcloud:

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

Udinga ukufohla https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure futhi udale okuguquguqukayo KUBECONFIG ku-GitlabCI, ezoqukatha ukulungiselelwa kokufinyelela kubectl eqenjini lakho.

kuyinto можно почитать о том, как получить учетные данные для кластера (Gcloud).

Ingqalasizinda Yaml

Ngaphakathi kwendawo yokugcina ingqalasizinda sinesevisi:

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

kanye ne-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 isebenza ngendlela efanayo ne-Deployment. Uma singasethi iqhinga lokubuyekeza (njenge-canary lapha) lizoziphatha njengokuthunyelwa kokubuyekeza okuzenzakalelayo.

Sichaza izinyathelo ezimbili ku-yaml zokuthunyelwa kwe-canary:

  1. 10% wethrafikhi eya e-canary (linda imanuwali KULUNGILE)
  2. 50% ithrafikhi eya e-canary (linda imizuzu emi-2 bese uqhubekela ku-100%)

Ukwenza ukuthunyelwa kokuqala

Ngemuva kokuthunyelwa kokuqala, izinsiza zethu zizobukeka kanjena:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Futhi sithola impendulo kuphela enguqulweni yokuqala yohlelo lokusebenza:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Ukwenza I-Canary Deployment

Isinyathelo 1: 10% ithrafikhi

Ukuqala ukuthunyelwa kwe-canary, sidinga nje ukushintsha inguqulo yesithombe njengoba sivamise ukwenza ngokusetshenziswa:

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

Futhi sicindezela izinguquko, ngakho-ke i-Gitlab CI ihambisa futhi sibona izinguquko:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Manje uma sifinyelela isevisi:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Kuhle! Siphakathi nendawo yethu yokuthunyelwa kwe-canary. Singabona ukuqhubeka ngokuqalisa:

kubectl argo rollouts get rollout rollout-canary

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Isinyathelo 2: 50% ithrafikhi:

Manje ake sidlulele esinyathelweni esilandelayo: ukuqondisa kabusha u-50% wethrafikhi. Silungiselele lesi sinyathelo ukuthi sisebenze mathupha:

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

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Futhi isicelo sethu sibuyise u-50% wezimpendulo ezivela ezinguqulweni ezintsha:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Futhi isibuyekezo sokukhishwa:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Kuyamangalisa.

Isinyathelo 3: 100% ithrafikhi:

Sisetha ukuze emva kwemizuzu emi-2 isinyathelo esingu-50% sigcine ngokuzenzakalelayo bese siqala isinyathelo esingu-100%:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Futhi umphumela wohlelo lokusebenza:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Futhi isibuyekezo sokukhishwa:

Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo

Ukuthunyelwa kwe-Canary kuqedile.

Izibonelo ezengeziwe nge-Argo Rollouts

Kunezibonelo eziningi lapha, njengokuthi ungasetha kanjani ukuhlola kuqala kwemvelo nokuqhathanisa okusekelwe ku-canary:

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

Ividiyo emayelana ne-Argo Rollouts ne-Argo CI

Ngincoma ngempela le vidiyo, ikhombisa ukuthi i-Argo Rollouts ne-Argo CI zisebenzisana kanjani:

Umphumela

Ngiwuthanda kakhulu umqondo wokusebenzisa ama-CRD aphethe ukudalwa kwezinhlobo ezengeziwe zokusebenzisa noma izifaniso, ukuqondisa kabusha ithrafikhi, njll. Ukusebenza nabo kuhamba kahle. Okulandelayo ngithanda ukuhlola ukuhlanganiswa ne-Argo CI.

Kodwa-ke, kubonakala kunokuhlanganiswa okukhulu kwe-Argo CI ne-Flux CI ezayo, ngakho-ke ngingalinda kuze kuphume ukukhishwa okusha: I-Argo Flux.

Uke waba nakho nge-Argo Rollouts noma i-Argo CI?

Funda nezinye izindatshana kubhulogi yethu:

Source: www.habr.com

Engeza amazwana