Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

Aħna se nużaw il-kontrollur tal-iskjerament ta' Argo Rollouts u GitlabCI nattiv ta' k8s biex imexxu skjeramenti tal-Kanarji għal Kubernetes

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

https://unsplash.com/photos/V41PulGL1z0

Artikoli f'din is-serje

Skjerament tal-Kanarji

Nittamaw li taqra l-ewwel parti, fejn spjegajna fil-qosor x'inhuma l-Iskjeramenti tal-Kanarji. Urejna wkoll kif nimplimentah billi tuża riżorsi standard ta' Kubernetes.

Argo Rollouts

Argo Rollouts huwa kontrollur tal-iskjerament indiġenu ta' Kubernetes. Jipprovdi CRD (Definizzjoni tar-Riżorsi Custom) għal Kubernetes. Grazzi għaliha, nistgħu nużaw entità ġdida: Rollout, li tamministra skjeramenti blu-aħdar u kanarji b'diversi għażliet ta 'konfigurazzjoni.

Kontrollur Argo Rollouts użat minn riżors tad-dwana Rollout, Jippermetti strateġiji ta' skjerament addizzjonali bħal blu-aħdar u kanarju għal Kubernetes. Riżorsa Rollout jipprovdi funzjonalità ekwivalenti Deployment, biss bi strateġiji addizzjonali ta 'skjerament.
riżorsi Deployments għandha żewġ strateġiji għall-iskjerament: RollingUpdate и Recreate. Għalkemm dawn l-istrateġiji huma adattati għall-biċċa l-kbira tal-każijiet, għall-iskjerament għal servers fuq skala kbira ħafna, jintużaw strateġiji addizzjonali, bħal blu-aħdar jew kanarju, li mhumiex disponibbli fil-kontrollur tal-Iskjerament. Biex jużaw dawn l-istrateġiji f'Kubernetes, l-utenti kellhom jiktbu skripts fuq l-Iskjeramenti tagħhom. L-Argo Rollouts Controller jesponi dawn l-istrateġiji bħala parametri sempliċi, dikjarattivi u konfigurabbli.
https://argoproj.github.io/argo-rollouts

Hemm ukoll Argo CI, li jipprovdi interface tal-web konvenjenti għall-użu ma 'Rollouts, aħna ser nagħtu ħarsa lejn dan fl-artiklu li jmiss.

Installazzjoni ta 'Argo Rollouts

In-naħa tas-server

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

Fil-nevew tal-infrastruttura tagħna (ara hawn taħt) diġà żidna install.yaml bħala i/k8s/argo-rollouts/install.yaml. Dan il-mod GitlabCI se jinstallah fil-cluster.

In-naħa tal-klijent (plugin kubectl)

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

Applikazzjoni Eżempju

Hija prattika tajba li jkun hemm repożitorji separati għall-kodiċi tal-applikazzjoni u l-infrastruttura.

Repożitorju għall-applikazzjoni

Kim Wuestkamp/k8s-deployment-example-app

Din hija API Python+Flask sempliċi ħafna li tirritorna tweġiba bħala JSON. Aħna se nibnu l-pakkett billi tuża GitlabCI u nimbuttaw ir-riżultat lir-Reġistru Gitlab. Fir-reġistru għandna żewġ verżjonijiet ta 'rilaxx differenti:

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

L-unika differenza bejniethom hija l-fajl JSON lura. Aħna nużaw din l-applikazzjoni biex naraw kemm jista' jkun faċilment liema verżjoni qed nikkomunikaw magħha.

Repożitorju ta' l-infrastruttura

F'dan ir-repożitorju se nużaw GitlabCI għall-iskjerament fil-Kubernetes, .gitlab-ci.yml jidher bħal dan:

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

Biex tħaddem lilek innifsek ser ikollok bżonn cluster, tista' tuża Gcloud:

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

Għandek bżonn furketta https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure u toħloq varjabbli KUBECONFIG f'GitlabCI, li jkun fih il-konfigurazzjoni għall-aċċess kubectl lill-cluster tiegħek.

Hawnhekk Tista' taqra dwar kif tikseb kredenzjali għal cluster (Gcloud).

Infrastruttura Yaml

Ġewwa r-repożitorju tal-infrastruttura għandna servizz:

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

u 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 jaħdem l-istess bħal Deployment. Jekk ma nissettjawx strateġija ta' aġġornament (bħal canary hawn) se jġib ruħu bħall-Deployment default rolling-update.

Aħna niddefinixxu żewġ passi fil-yaml għall-iskjerament tal-kanarji:

  1. 10% tat-traffiku lejn il-kanarji (stenna l-manwal OK)
  2. 50% traffiku lejn il-kanarji (stenna 2 minuti imbagħad kompli għal 100%)

Twettiq ta 'skjerament inizjali

Wara l-iskjerament inizjali, ir-riżorsi tagħna se jidhru bħal dan:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

U nġibu tweġiba biss mill-ewwel verżjoni tal-applikazzjoni:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

Twettiq ta' Skjerament tal-Kanarji

Pass 1: 10% traffiku

Biex nibdew skjerament tal-kanarji, irridu biss nibdlu l-verżjoni tal-immaġni kif nagħmlu normalment bl-iskjeramenti:

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

U aħna nimbuttaw il-bidliet, għalhekk Gitlab CI juża u naraw il-bidliet:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

Issa jekk naċċessaw is-servizz:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

Kbir! Ninsabu f'nofs l-iskjerament tal-kanarji tagħna. Nistgħu naraw il-progress billi nħaddmu:

kubectl argo rollouts get rollout rollout-canary

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

Pass 2: 50% traffiku:

Issa ejja ngħaddu għall-pass li jmiss: direzzjoni mill-ġdid 50% tat-traffiku. Aħna kkonfigurajna dan il-pass biex jitmexxa manwalment:

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

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

U l-applikazzjoni tagħna rritornat 50% tat-tweġibiet minn verżjonijiet ġodda:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

U reviżjoni tat-tnedija:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

Sabiħ.

Pass 3: 100% traffiku:

Aħna nwaqqfuha sabiex wara 2 minuti l-pass ta '50% jintemm awtomatikament u l-pass ta' 100% jibda:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

U l-output tal-applikazzjoni:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

U reviżjoni tat-tnedija:

Skjerament tal-Kanarji f'Kubernetes #2: Tnaqqis ta' Argo

L-iskjerament tal-Kanarji tlesta.

Aktar eżempji b'Argo Rollouts

Hemm aktar eżempji hawn, bħal kif twaqqaf previżjonijiet ambjentali u paraguni bbażati fuq canary:

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

Vidjow dwar Argo Rollouts u Argo CI

Verament nirrakkomanda dan il-video, juri kif Argo Rollouts u Argo CI jaħdmu flimkien:

Total

Inħobb ħafna l-idea li nuża CRDs li jimmaniġġjaw il-ħolqien ta 'tipi addizzjonali ta' skjerament jew replikasets, direzzjoni mill-ġdid tat-traffiku, eċċ. Il-ħidma magħhom tmur bla xkiel. Sussegwentement nixtieq nittestja l-integrazzjoni ma 'Argo CI.

Madankollu, jidher li ġejja għaqda kbira ta 'Argo CI u Flux CI, għalhekk nista' nistenna sakemm toħroġ ir-rilaxx il-ġdid: Argo Fluss.

Kellek xi esperjenza b'Argo Rollouts jew Argo CI?

Aqra wkoll artikli oħra fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment