Sizosebenzisa isilawuli sokuthunyelwa kwe-k8s-native Argo Rollouts kanye ne-GitlabCI ukuze siqhube ukuthunyelwa kwe-Canary e-Kubernetes
Izihloko kulolu chungechunge
Ukuthunyelwa kwe-Canary e-Kubernetes #1: Gitlab CI - (Lesi sihloko)
- Ukuthunyelwa kwe-Canary kusetshenziswa i-Istio
- Ukuthunyelwa kwe-Canary kusetshenziswa i-Jenkins-X Istio Flagger
Ukuthunyelwa kwe-Canary
Sithemba ukuthi ufunda
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. InsizaRollout
inikeza ukusebenza okulinganayoDeployment
, kuphela ngamasu okusebenzisa engeziwe.
resourceDeployments
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)
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 KUBECONFIG
ku-GitlabCI, ezoqukatha ukulungiselelwa kokufinyelela kubectl
eqenjini lakho.
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:
- 10% wethrafikhi eya e-canary (linda imanuwali KULUNGILE)
- 50% ithrafikhi eya e-canary (linda imizuzu emi-2 bese uqhubekela ku-100%)
Ukwenza ukuthunyelwa kokuqala
Ngemuva kokuthunyelwa kokuqala, izinsiza zethu zizobukeka kanjena:
Futhi sithola impendulo kuphela enguqulweni yokuqala yohlelo lokusebenza:
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:
Manje uma sifinyelela isevisi:
Kuhle! Siphakathi nendawo yethu yokuthunyelwa kwe-canary. Singabona ukuqhubeka ngokuqalisa:
kubectl argo rollouts get rollout rollout-canary
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
Futhi isicelo sethu sibuyise u-50% wezimpendulo ezivela ezinguqulweni ezintsha:
Futhi isibuyekezo sokukhishwa:
Kuyamangalisa.
Isinyathelo 3: 100% ithrafikhi:
Sisetha ukuze emva kwemizuzu emi-2 isinyathelo esingu-50% sigcine ngokuzenzakalelayo bese siqala isinyathelo esingu-100%:
Futhi umphumela wohlelo lokusebenza:
Futhi isibuyekezo sokukhishwa:
Ukuthunyelwa kwe-Canary kuqedile.
Izibonelo ezengeziwe nge-Argo Rollouts
Kunezibonelo eziningi lapha, njengokuthi ungasetha kanjani ukuhlola kuqala kwemvelo nokuqhathanisa okusekelwe ku-canary:
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:
Uke waba nakho nge-Argo Rollouts noma i-Argo CI?
Funda nezinye izindatshana kubhulogi yethu:
I-Blue-Green Deployment yezinhlelo zokusebenza zaseNtwasahlobo ngeseva yewebhu ye-Nginx Kubernetes: kungani kubaluleke kangaka ukusetha ukuphathwa kwensiza yesistimu? Isingeniso se-Hashicorp Consul's Kubernetes Authorization I-Tekton Pipeline - amapayipi omdabu waseKubernetes Ukwakha amamojula aguqukayo e-Nginx I-Telegraph bot ye-Redmine. Ungayenza kanjani impilo ibe lula kuwe nakwabanye
Source: www.habr.com