Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

Cleachdaidh sinn Gitlab CI agus GitOps làimhe gus cleachdadh Canary a chuir an gnìomh agus a chleachdadh ann an Kubernetes

Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

Artaigilean bhon t-sreath seo:

Nì sinn cleachdadh Canary le làimh tro GitOps agus cruthaichidh sinn / atharraichidh sinn prìomh ghoireasan Kubernetes. Tha an artaigil seo gu sònraichte airson ro-ràdh le mar a tha cleachdadh ag obair ann an Kubernetes Canary, leis gu bheil dòighean fèin-ghluasaid nas èifeachdaiche ann, air am bi sinn a’ beachdachadh anns na h-artaigilean a leanas.


Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

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

Cleachdadh Canary

Leis an ro-innleachd Canary, tha ùrachaidhean air an cur an sàs an-toiseach gu dìreach fo-sheata de luchd-cleachdaidh. Tro sgrùdadh, dàta log, deuchainn làimhe, no seanalan fios air ais eile, thèid an sgaoileadh a dhearbhadh mus tèid a leigeil ma sgaoil don h-uile neach-cleachdaidh.

Cleachdadh Kubernetes (ùrachadh leantainneach)

Tha an ro-innleachd bunaiteach airson Kubernetes Deployment na ùrachadh leantainneach, far a bheil àireamh sònraichte de pods air an cur air bhog le dreachan ùra de na h-ìomhaighean. Nam biodh iad air an cruthachadh gun duilgheadasan, thèid pods le seann dreachan de dhealbhan a thoirt gu crìch, agus thèid pods ùra a chruthachadh ann an co-shìnte.

GitOps

Bidh sinn a’ cleachdadh GitOps san eisimpleir seo oir tha sinn:

  • cleachdadh Git mar aon thobar fìrinn
  • bidh sinn a’ cleachdadh Git Operations airson togail is cleachdadh (chan eil feum air òrdughan a bharrachd air git tag / merge)

Eisimpleir:

Gabhamaid deagh chleachdadh - aon stòr a bhith againn airson còd tagraidh agus aon airson bun-structar.

Stòr-dàta tagraidh

Is e seo API Python + Flask gu math sìmplidh a thilleas freagairt mar JSON. Togaidh sinn am pasgan tro GitlabCI agus putaidh sinn an toradh gu Clàr Gitlab. Anns a’ chlàr tha dà dhreach fuasglaidh eadar-dhealaichte againn:

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

Is e an aon eadar-dhealachadh eatarra an atharrachadh anns an fhaidhle JSON a chaidh a thilleadh. Bidh sinn a’ cleachdadh an aplacaid seo gus faicinn cho furasta sa ghabhas dè an dreach leis a bheil sinn a’ conaltradh.

Stòr-dàta bun-structair

Anns an snèapan seo bidh sinn a’ cleachdadh tro GitlabCI gu Kubernetes, .gitlab-ci.yml coltas mar seo:

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

Gus a ruith leat fhèin bidh feum agad air brabhsair, faodaidh tu Gcloud a chleachdadh:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b

gcloud compute firewall-rules create incoming-80 --allow tcp:80

Feumaidh tu forc https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure agus cruthaich caochladair KUBECONFIG ann an GitlabCI, anns am bi an config airson ruigsinneachd kubectl do d' bhasgaid.

Faodaidh tu leughadh mu mar a gheibh thu teisteanasan airson brabhsair (Gcloud) dhan taobh dheas.

Bun-structair Yaml

Anns an stòr bun-structair tha seirbheis againn:

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

Agus cleachdadh a-steach 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

Agus cleachdadh eile a-staigh 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

Thoir an aire nach eil mac-samhail sam bith aig app-deploy fhathast.

A 'coileanadh a' chiad chleachdadh

Gus tòiseachadh air a’ chiad chleachdadh, faodaidh tu loidhne-phìoban GitlabCI a thòiseachadh le làimh air a’ phrìomh mheur. Às deidh sin kubectl bu chòir na leanas a chuir a-mach:

Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

Chì sinn app cleachdadh le 10 mac-samhail agus app-canary le 0. Tha LoadBalancer ann cuideachd às am faigh sinn cothrom tro curl tro IP a-muigh:

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

Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

Chì sinn nach till an tagradh deuchainn againn ach “v1”.

Cur an gnìomh cleachdadh Canary

Ceum 1: leig a-mach dreach ùr airson cuid de luchd-cleachdaidh

Shuidhich sinn an àireamh de mhac-samhail gu 1 anns an fhaidhle deploy-canary.yaml agus san ìomhaigh dreach ùr:

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

Ann am faidhle deploy.yaml dh’atharraich sinn an àireamh mac-samhail gu 9:

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

Bidh sinn a’ putadh na h-atharrachaidhean sin air an stòr às an tòisich an cleachdadh (tro GitlabCI) agus mar thoradh air an sin:

Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

Bidh an t-Seirbheis againn a’ comharrachadh an dà chleachdadh, leis gu bheil an tagraiche app aig gach fear. Mar thoradh air thuaiream bunaiteach Kubernetes, bu chòir dhuinn diofar fhreagairtean fhaicinn airson ~ 10% de dh’ iarrtasan:

Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

Is e suidheachadh làithreach an tagraidh againn (GitOps, air a thoirt bho Git mar Stòr Singilte Fìrinn) làthaireachd dà chleachdadh le mac-samhail gnìomhach, aon airson gach dreach.

~ Bidh 10% de luchd-cleachdaidh a’ fàs eòlach air dreach ùr agus a’ dèanamh deuchainn air gun fhiosta. A-nis tha an t-àm ann sgrùdadh a dhèanamh airson mearachdan anns na logaichean agus dàta sgrùdaidh gus duilgheadasan a lorg.

Ceum 2: Sgaoil an dreach ùr a h-uile neach-cleachdaidh

Cho-dhùin sinn gun deach a h-uile càil gu math agus a-nis feumaidh sinn an dreach ùr a chuir a-steach don h-uile neach-cleachdaidh. Gus seo a dhèanamh bidh sinn dìreach ag ùrachadh deploy.yaml stàladh dreach ùr den ìomhaigh agus an àireamh de ath-bhualaidhean co-ionann ri 10. Ann deploy-canary.yaml chuir sinn an àireamh de mhac-samhail air ais gu 0. Às deidh an cleachdadh, bidh an toradh mar a leanas:

Cleachdadh Canary ann an Kubernetes #1: Gitlab CI

A 'togail suas

Dhòmhsa, le bhith a’ cleachdadh an cleachdadh le làimh bidh an dòigh seo a’ cuideachadh le bhith a’ tuigsinn cho furasta ‘s as urrainn dha a rèiteachadh le bhith a’ cleachdadh k8s. Leis gu bheil Kubernetes a’ leigeil leat a h-uile càil ùrachadh tro API, faodar na ceumannan sin a dhèanamh fèin-ghluasadach tro sgriobtaichean.

Is e rud eile a dh’ fheumar a chuir an gnìomh àite inntrigidh deuchainniche (LoadBalancer no tro Ingress) tro nach fhaighear ach an dreach ùr. Faodar a chleachdadh airson brobhsadh làimhe.

Ann an artaigilean san àm ri teachd, bheir sinn sùil air fuasglaidhean fèin-ghluasadach eile a chuireas an gnìomh a’ mhòr-chuid de na rinn sinn.

Leugh cuideachd artaigilean eile air ar blog:

Source: www.habr.com

Cuir beachd ann