Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Siza kusebenzisa i-Gitlab CI kunye ne-GitOps ye-manual ukuphumeza kunye nokusebenzisa i-Canary deployment kwi-Kubernetes

Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Amanqaku kolu ngcelele:

Siza kwenza ukuthunyelwa kweCanary ngesandla ngeGitOps kunye nokudala / ukuguqula izixhobo eziphambili zeKubernetes. Eli nqaku lijoliswe ikakhulu kwintshayelelo kunye nendlela ukuthunyelwa kusebenza ngayo kwi-Kubernetes Canary, kuba kukho iindlela ezisebenzayo zokuzenzekelayo, esiza kuziqwalasela kumanqaku alandelayo.


Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

https://www.norberteder.com/canary-deployment/

Ukusasazwa kweCanary

Ngesicwangciso saseCanary, ukuhlaziywa kuqala kusetyenziswe kuphela kwiseti engaphantsi yabasebenzisi. Ngokubeka iliso, idatha yelog, uvavanyo lwezandla, okanye ezinye iindlela zokuphendula, ukukhutshwa kuvavanywa ngaphambi kokuba kukhululwe kubo bonke abasebenzisi.

Ukusasazwa kweKubernetes (uhlaziyo oluqengqelekayo)

Isicwangciso esingagqibekanga se-Kubernetes Deployment is rolling-update, apho inani elithile leepods liqaliswa ngeenguqulelo ezintsha zemifanekiso. Ukuba zidalwe ngaphandle kweengxaki, iipods ezineenguqu ezindala zemifanekiso ziyapheliswa, kwaye iipods ezintsha zenziwe ngokufanayo.

GitOps

Sisebenzisa iGitOps kulo mzekelo kuba thina:

  • usebenzisa iGit njengomthombo omnye wenyaniso
  • sisebenzisa iGit Operations ukwakha kunye nokusasazwa (akukho miyalelo ngaphandle kwe-git tag/ukudibanisa efunekayo)

Umzekelo:

Masiziqhelise kakuhle - ukuba sibe novimba omnye wekhowudi yesicelo kunye nenye yezibonelelo.

Indawo yokugcina isicelo

Le yiPython+Flask API elula kakhulu ebuyisela impendulo njenge-JSON. Siza kwakha iphakheji nge-GitlabCI kwaye sityhale umphumo kwi-Gitlab Registry. Kwirejistri sineenguqulelo ezimbini ezahlukeneyo zokukhupha:

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

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

Uvimba weziseko zophuhliso

Kule turnip siza kuhambisa ngeGitlabCI ukuya eKubernetes, .gitlab-ci.yml ujongeka ngoluhlobo:

image: traherom/kustomize-docker

before_script:
   - printenv
   - kubectl version

stages:
 - deploy

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

Unokufunda malunga nendlela yokufumana iziqinisekiso zeqela (Gcloud) kanye apha.

Ulwakhiwo lweYaml

Kuvimba weziseko zoncedo sinenkonzo:

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

Nokusasazwa ngaphakathi deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app
spec:
 replicas: 10
 selector:
   matchLabels:
     id: app
     type: main
 template:
   metadata:
     labels:
       id: app
       type: main
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Kwaye okunye ukuthunyelwa ngaphakathi deploy-canary.yaml:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 0
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Qaphela ukuba i-app-deploy ayinazo naziphi na iikopi ezichaziweyo okwangoku.

Ukwenza ukusasazwa kokuqala

Ukuqala ukuthunyelwa kokuqala, ungaqala umbhobho weGitlabCI ngesandla kwisebe elikhulu. Emveni kwalonto kubectl kufuneka ikhuphe oku kulandelayo:

Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Siyabona app ukusasazwa nge-10 replicas kunye ne-app-canary ene-0. Kukwakho ne-LoadBalancer esinokufikelela kuyo curl nge-IP yangaphandle:

while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Siyabona ukuba isicelo sethu sovavanyo sibuyisela kuphela "v1".

Ukwenziwa kokusasazwa kweCanary

Inyathelo 1: Khupha inguqulelo entsha kwabanye abasebenzisi

Siseta inani le replicas ukuya ku-1 kwifayile ye-deploy-canary.yaml kunye nomfanekiso wenguqulelo entsha:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 1
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Kwifayile deploy.yaml sitshintshe inani le replicas ukuya kwi-9:

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

Sityhala olu tshintsho kwindawo yokugcina apho ukuthunyelwa kuya kuqala khona (nge-GitlabCI) kwaye sibone njengesiphumo:

Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Inkonzo yethu iya kwalatha kokubini ukuthunyelwa, kuba bobabini banomkhethi we-app. Ngenxa ye-Randomization ye-Kubernetes, kufuneka sibone iimpendulo ezahlukeneyo malunga ne-10% yezicelo:

Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Imeko yangoku yesicelo sethu (i-GitOps, ithathwe kwi-Git njengoMthombo omnye weNyaniso) kubukho bezinto ezimbini ezithunyelwayo ezineekopi ezisebenzayo, enye yenguqulelo nganye.

~ I-10% yabasebenzisi baqhelana nenguqulelo entsha kwaye bayivavanye ngokungeyonjongo. Ngoku lixesha lokujonga iimpazamo kwiilogi kunye nedatha yokubeka iliso ukufumana iingxaki.

Inyathelo 2: Khupha inguqulelo entsha kubo bonke abasebenzisi

Sigqibe kwelokuba yonke into ihambe kakuhle kwaye ngoku kufuneka sikhuphe inguqulelo entsha kubo bonke abasebenzisi. Ukwenza oku sihlaziya ngokulula deploy.yaml ukufaka uguqulelo olutsha lomfanekiso kunye nenani leekopi ezilingana no-10 deploy-canary.yaml siseta inani le replicas umva 0. Emva kokusasazwa, isiphumo siya kuba ngolu hlobo lulandelayo:

Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI

Shwa nkathela

Kum, ukuqhuba ukusasazwa ngesandla ngale ndlela kunceda ukuqonda ukuba kulula kangakanani ukuqwalasela usebenzisa ii-k8s. Ekubeni i-Kubernetes ikuvumela ukuba uhlaziye yonke into nge-API, la manyathelo anokwenziwa ngokuzenzekelayo ngokusebenzisa izikripthi.

Enye into ekufuneka iphunyezwe yindawo yokungena yomvavanyi (LoadBalancer okanye nge-Ingress) apho kuphela inguqulelo entsha inokufumaneka. Ingasetyenziselwa ukukhangela iincwadi ngesandla.

Kumanqaku azayo, siza kujonga ezinye izisombululo ezizenzekelayo eziphumeza uninzi lwento esiyenzileyo.

Funda namanye amanqaku kwibhlog yethu:

umthombo: www.habr.com

Yongeza izimvo