Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Siza kusebenzisa isilawuli se-k8s-native Argo Rollouts kunye neGitlabCI ukuqhuba ukuthunyelwa kweCanary eKubernetes

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

https://unsplash.com/photos/V41PulGL1z0

Amanqaku kolu ngcelele

Ukusasazwa kweCanary

Siyathemba ukuba uyayifunda inxalenye yokuqala, apho sachaza ngokufutshane ukuba yiyiphi iCanary Deployments. Siphinde sabonisa indlela yokuyiphumeza ngokusebenzisa izixhobo eziqhelekileyo zeKubernetes.

Ukukhutshwa kweArgo

Ukukhutshwa kwe-Argo ngumlawuli wokusasazwa we-Kubernetes. Ibonelela ngeCRD (iNgcaciso yeSibonelelo seSiko) yeKubernetes. Enkosi kuyo, sinokusebenzisa iziko elitsha: Rollout, elawula i-blue-green kunye ne-canary deployments kunye neendlela ezahlukeneyo zoqwalaselo.

Isilawuli se-Argo Rollouts esisetyenziswe ngumthombo oqhelekileyo Rollout, Ivumela izicwangciso zokusasaza ezongezelelweyo ezifana neblue-green kunye necanary yeKubernetes. Umthombo Rollout inikeza umsebenzi olinganayo Deployment, kuphela ngezicwangciso zokusasazwa ezongezelelweyo.
ubutyebi Deployments ineendlela ezimbini zokusasaza: RollingUpdate и Recreate. Nangona ezi zicwangciso zifanelekile kwiimeko ezininzi, ukuthunyelwa kwiiseva kwizinga elikhulu kakhulu, izicwangciso ezongezelelweyo zisetyenzisiweyo, ezifana ne-blue-green okanye i-canary, engafumanekiyo kwi-Deployment controller. Ukusebenzisa ezi zicwangciso kwi-Kubernetes, abasebenzisi bekufuneka babhale izikripthi phezulu kwi-Deployments yabo. UMlawuli we-Argo Rollouts uveza ezi zicwangciso njengezinto ezilula, ezichazayo, iiparameters ezilungisekayo.
https://argoproj.github.io/argo-rollouts

Kukwakho neArgo CI, ebonelela ngojongano lwewebhu olufanelekileyo ukuze lusetyenziswe kunye noRolout, siza kujonga oko kwinqaku elilandelayo.

Ukufakela iArgo Rollouts

Icala lomncedisi

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

Kwi-infrastructure turnip yethu (jonga ngezantsi) sele songeze i-install.yaml njenge-i/k8s/argo-rollouts/install.yaml. Ngale ndlela i-GitlabCI iya kuyifaka kwiqela.

Icala lomthengi (kubectl plugin)

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

Umzekelo wosetyenziso

Yinkqubo elungileyo ukuba neendawo zokugcina ezahlukeneyo zekhowudi yesicelo kunye neziseko zoncedo.

Indawo yokugcina isicelo

Kim Wuestkamp/k8s-deployment-example-app

Le yiPython+Flask API elula kakhulu ebuyisela impendulo njenge-JSON. Siza kwakha ipakethe sisebenzisa iGitlabCI kwaye sityhale umphumo kwiRegistry yeGitlab. Kwirejistri sineenguqulelo ezimbini ezahlukeneyo zokukhupha:

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

Umahluko kuphela phakathi kwabo yifayile ye-JSON ebuyisiweyo. Sisebenzisa esi sicelo ukubona umfanekiso ngokulula kangangoko ukuba yeyiphi inguqulelo esinxibelelana nayo.

Uvimba weziseko zophuhliso

Kulo vimba siza kusebenzisa i-GitlabCI yokusasazwa kwi-Kubernetes, .gitlab-ci.yml ijongeka ngolu hlobo:

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

Ukuyiqhuba ngokwakho uya kufuna iqela, ungasebenzisa iGcloud:

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

Udinga ifolokhwe https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure kwaye wenze utshintsho KUBECONFIG kwi-GitlabCI, eya kuqulatha uqwalaselo lofikelelo kubectl kwiqela lakho.

kuyinto Unokufunda malunga nendlela yokufumana iziqinisekiso zeqela (Gcloud).

Ulwakhiwo lweYaml

Ngaphakathi kwendawo yokugcina izixhobo sinenkonzo:

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

kunye nokukhutshwa.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 ngokufanayo nokusasazwa. Ukuba asiyibeki isicwangciso sohlaziyo (njenge canary apha) siyakuziphatha njengoSaziso lohlaziyo olungagqibekanga.

Sichaza amanyathelo amabini kwi-yaml yokuthunyelwa kwe-canary:

  1. I-10% yetrafikhi ukuya e-canary (linda imanuwali Kulungile)
  2. I-50% yetrafikhi ukuya e-canary (linda imizuzu emi-2 uze uqhubeke uye kwi-100%)

Ukwenza ukusasazwa kokuqala

Emva kokuthunyelwa kokuqala, izixhobo zethu ziya kujongeka ngolu hlobo:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Kwaye sifumana impendulo kuphela kwinguqulelo yokuqala yesicelo:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Ukwenza iCanary Deployment

Inyathelo 1: 10% yetrafikhi

Ukuqala ukuthunyelwa kwe-canary, kufuneka sitshintshe inguqulelo yomfanekiso njengoko siqhele ukwenza ngokusasazwa:

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

Kwaye sityhala utshintsho, ke iGitlab CI iyathumela kwaye siyalubona utshintsho:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Ngoku ukuba sifikelela kwinkonzo:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Kakhulu! Siphakathi kwi-canary yethu yokuthunyelwa. Sinokuyibona inkqubela ngokuqhuba:

kubectl argo rollouts get rollout rollout-canary

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Inyathelo 2: 50% yetrafikhi:

Ngoku masigqithele kwinyathelo elilandelayo: ukuqondisa ngokutsha i-50% yetrafikhi. Siqwalasele eli nyathelo ukuba liqhutywe ngesandla:

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

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Kwaye isicelo sethu sibuyise i-50% yeempendulo kwiinguqulelo ezintsha:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Kwaye ukuphononongwa kokukhutshwa:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Iyamangalisa.

Inyathelo 3: 100% yetrafikhi:

Siyimise ukuze emva kwemizuzu emi-2 inyathelo le-50% liphele ngokuzenzekelayo kwaye inyathelo le-100% liqale:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Kwaye imveliso yesicelo:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Kwaye ukuphononongwa kokukhutshwa:

Ukuhanjiswa kweCanary kwiKubernetes #2: Ukukhutshwa kweArgo

Ukuthunyelwa kweCanary kugqityiwe.

Eminye imizekelo ene-Argo Rollouts

Kukho imizekelo eyongeziweyo apha, efana nendlela yokuseta umboniso wemo engqongileyo kunye nothelekiso olusekwe kwicanary:

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

Ividiyo malunga neArgo Rollouts kunye neArgo CI

Ndiyincoma ngokwenene le vidiyo, ibonisa indlela iArgo Rollouts kunye neArgo CI esebenzisana ngayo:

Isiphumo

Ndiwuthanda kakhulu umbono wokusebenzisa ii-CRD ezilawula ukuyilwa kweentlobo ezongezelelweyo zokuthunyelwa okanye ukuphindaphinda, ukuqondisa kwakhona itrafikhi, njl. Ukusebenza nabo kuhamba kakuhle. Okulandelayo ndingathanda ukuvavanya ukudibanisa kunye neArgo CI.

Nangona kunjalo, kubonakala ngathi kukho ukudityaniswa okukhulu kweArgo CI kunye neFlux CI ezayo, ke ndingalinda de kuphume ukhupho olutsha: Argo Flux.

Ngaba ukhe wanamava ngeArgo Rollouts okanye iArgo CI?

Funda namanye amanqaku kwibhlog yethu:

umthombo: www.habr.com

Yongeza izimvo