Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Úsáidfimid Gitlab CI agus GitOps láimhe chun imscaradh Chanárach a chur i bhfeidhm agus a úsáid in Kubernetes

Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Ailt ón tsraith seo:

Déanfaimid imscaradh na Canárach de láimh trí GitOps agus cruthóimid / modhnóimid príomh-acmhainní Kubernetes. Tá an t-alt seo beartaithe go príomha le tabhairt isteach leis an gcaoi a n-oibríonn an t-imscaradh i Kubernetes Canary, ós rud é go bhfuil modhanna uathoibrithe níos éifeachtaí ann, a bhreithneoimid sna hailt seo a leanas.


Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

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

Imscaradh Chanáracha

Leis an straitéis Chanáracha, ní chuirtear nuashonruithe i bhfeidhm ar dtús ach ar fho-thacar úsáideoirí. Trí mhonatóireacht, sonraí logála, tástáil láimhe, nó bealaí aiseolais eile, déantar tástáil ar an scaoileadh sula scaoiltear chuig gach úsáideoir é.

Imscaradh Kubernetes (uasdátú rollach)

Is í an straitéis réamhshocraithe le haghaidh Imscaradh Kubernetes ná nuashonrú rollach, áit a seoltar líon áirithe pods le leaganacha nua de na híomhánna. Má cruthaíodh iad gan fadhbanna, cuirtear deireadh le pods le seanleaganacha d'íomhánna, agus cruthaítear pods nua go comhthreomhar.

GitOps

Bainimid úsáid as GitOps sa sampla seo toisc go ndéanaimid:

  • ag baint úsáide as Git mar fhoinse amháin fírinne
  • úsáidimid Oibríochtaí Git le haghaidh tógáil agus imscaradh (níl aon orduithe seachas git tag/cumasc ag teastáil)

Sampla

Déanaimis dea-chleachtas - stór amháin a bheith againn do chód iarratais agus ceann eile don bhonneagar.

Stór iarratais

Is é seo an API Python+Fasc an-simplí a thugann freagra mar JSON ar ais. Tógfaimid an pacáiste trí GitlabCI agus cuirfimid an toradh chuig Clárlann Gitlab. Sa chlár tá dhá leagan eisithe éagsúla againn:

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

Is é an t-aon difríocht eatarthu ná an t-athrú ar an gcomhad JSON a cuireadh ar ais. Bainimid úsáid as an bhfeidhmchlár seo chun a fheiceáil chomh héasca agus is féidir cén leagan a bhfuil muid ag déanamh cumarsáide leis.

Stór bonneagair

Sa tornapa seo déanfaimid imscaradh trí GitlabCI go Kubernetes, .gitlab-ci.yml tá an chuma air 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

Chun é a rith tú féin beidh braisle uait, is féidir leat Gcloud a úsáid:

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

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

Ní mór duit forc https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure agus athróg a chruthú KUBECONFIG in GitlabCI, ina mbeidh an chumraíocht le haghaidh rochtana kubectl chuig do bhraisle.

Is féidir leat léamh faoi conas dintiúir a fháil do bhraisle (Gcloud) anseo.

Bonneagar Yaml

Sa stór bonneagair tá seirbhís 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 imscaradh i 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 imscaradh eile i 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

Tabhair faoi deara nach bhfuil aon macasamhla sainithe fós ag app-deploy.

Imscaradh tosaigh a dhéanamh

Chun an t-imscaradh tosaigh a thosú, is féidir leat píblíne GitlabCI a thosú de láimh ar an máistir-bhrainse. Ina dhiaidh sin kubectl Ba chóir go mbeadh aschur seo a leanas:

Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Feicimid app imscaradh le 10 macasamhail agus app-chanáracha le 0. Tá LoadBalancer ann freisin ónar féidir linn rochtain a fháil trí curl trí IP Seachtrach:

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

Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Feicimid nach dtugann ár n-iarratas tástála ach “v1”.

Imscaradh Chanárach a fhorghníomhú

Céim 1: scaoileadh leagan nua do roinnt úsáideoirí

Shocraigh muid líon na macasamhla go 1 sa chomhad deploy-canary.yaml agus íomhá an leagain nua:

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

I gcomhad deploy.yaml d'athraigh muid líon na macasamhla go 9:

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

Brúimid na hathruithe seo chuig an stór óna gcuirfear tús leis an imscaradh (trí GitlabCI) agus feicimid mar thoradh air sin:

Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Díreoidh ár Seirbhís ar an dá imscaradh, ós rud é go bhfuil an roghnóir aipeanna ag an mbeirt. Mar gheall ar randamachú réamhshocraithe Kubernetes, ba cheart dúinn freagraí éagsúla a fheiceáil ar ~10% d'iarratais:

Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Is é staid reatha ár bhfeidhmchláir (GitOps, tógtha ó Git mar Fhoinse Aonair na Fírinne) go bhfuil dhá imscaradh ann le macasamhla gníomhacha, ceann amháin do gach leagan.

Téann ~10% d’úsáideoirí i dtaithí ar leagan nua agus déanann siad é a thástáil go neamhbheartaithe. Anois tá an t-am le seiceáil le haghaidh earráidí sna logaí agus sonraí monatóireachta chun fadhbanna a aimsiú.

Céim 2: Scaoileadh an leagan nua do gach úsáideoir

Shocraigh muid gur éirigh go maith le gach rud agus anois caithfimid an leagan nua a rolladh amach chuig gach úsáideoir. Chun é seo a dhéanamh ní dhéanaimid ach nuashonrú deploy.yaml leagan nua den íomhá a shuiteáil agus líon na macasamhla cothrom le 10. In deploy-canary.yaml socróimid líon na macasamhla ar ais go 0. Tar éis imscaradh, beidh an toradh mar seo a leanas:

Imscaradh Chanáracha in Kubernetes #1: Gitlab CI

Achoimre

Maidir liom féin, cabhraíonn an t-imscaradh a rith de láimh ar an mbealach seo le tuiscint a fháil ar cé chomh héasca is féidir é a chumrú le k8s. Ós rud é go ligeann Kubernetes duit gach rud a nuashonrú trí API, is féidir na céimeanna seo a uathoibriú trí scripteanna.

Rud eile nach mór a chur i bhfeidhm ná pointe iontrála tástálaí (LoadBalancer nó trí Ingress) trínar féidir rochtain a fháil ar an leagan nua amháin. Is féidir é a úsáid le haghaidh brabhsála láimhe.

In ailt amach anseo, seiceálfaimid réitigh uathoibrithe eile a chuireann an chuid is mó dá bhfuil déanta againn i bhfeidhm.

Léigh ailt eile ar ár mblag freisin:

Foinse: will.com

Add a comment