Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Byddwn yn defnyddio Gitlab CI a GitOps â llaw i weithredu a defnyddio defnydd Canary yn Kubernetes

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Erthyglau o'r gyfres hon:

Byddwn yn perfformio'r defnydd Canary â llaw trwy GitOps ac yn creu / addasu prif adnoddau Kubernetes. Mae'r erthygl hon wedi'i bwriadu'n bennaf i'w chyflwyno gyda sut mae lleoli yn gweithio yn Kubernetes Canary, gan fod yna ddulliau mwy effeithiol o awtomeiddio, y byddwn yn eu hystyried yn yr erthyglau canlynol.


Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

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

Dedwyddiad Dedwydd

Gyda'r strategaeth Canary, dim ond i is-set o ddefnyddwyr y caiff diweddariadau eu cymhwyso'n gyntaf. Trwy fonitro, data log, profion â llaw, neu sianeli adborth eraill, caiff y datganiad ei brofi cyn ei ryddhau i bob defnyddiwr.

Defnydd Kubernetes (diweddariad treigl)

Y strategaeth ddiofyn ar gyfer Kubernetes Deploy yw diweddariad treigl, lle mae nifer penodol o godennau'n cael eu lansio gyda fersiynau newydd o'r delweddau. Os cawsant eu creu heb broblemau, mae codennau gyda hen fersiynau o ddelweddau yn cael eu terfynu, a chrëir codennau newydd ochr yn ochr.

GitOps

Rydym yn defnyddio GitOps yn yr enghraifft hon oherwydd ein bod yn:

  • defnyddio Git fel un ffynhonnell o wirionedd
  • rydym yn defnyddio Git Operations ar gyfer adeiladu a defnyddio (nid oes angen unrhyw orchmynion heblaw tag git / uno)

Enghraifft

Gadewch i ni gymryd arfer da - i gael un ystorfa ar gyfer cod cais ac un ar gyfer seilwaith.

Ystorfa cais

Mae hwn yn API Python + Ffasg syml iawn sy'n dychwelyd ymateb fel JSON. Byddwn yn adeiladu'r pecyn trwy GitlabCI ac yn gwthio'r canlyniad i Gofrestrfa Gitlab. Yn y gofrestrfa mae gennym ddau fersiwn rhyddhau gwahanol:

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

Yr unig wahaniaeth rhyngddynt yw'r newid yn y ffeil JSON a ddychwelwyd. Rydym yn defnyddio'r cymhwysiad hwn i ddelweddu mor hawdd â phosibl pa fersiwn yr ydym yn cyfathrebu ag ef.

Ystorfa seilwaith

Yn y maip hwn byddwn yn anfon trwy GitlabCI i Kubernetes, .gitlab-ci.yml fel a ganlyn:

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

Er mwyn ei redeg eich hun bydd angen clwstwr arnoch, gallwch ddefnyddio Gcloud:

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

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

Mae angen i chi fforchio https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure a chreu newidyn KUBECONFIG yn GitlabCI, a fydd yn cynnwys y ffurfwedd ar gyfer mynediad kubectl i'ch clwstwr.

Gallwch ddarllen am sut i gael tystlythyrau ar gyfer clwstwr (Gcloud) yma.

Isadeiledd Yaml

Yn y storfa seilwaith mae gennym wasanaeth:

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

A lleoli yn 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

A defnydd arall i mewn 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

Sylwch nad oes gan app-deploy unrhyw gopïau wedi'u diffinio eto.

Perfformio lleoli cychwynnol

I ddechrau'r defnydd cychwynnol, gallwch chi gychwyn piblinell GitlabCI â llaw ar y brif gangen. Ar ol hynny kubectl Dylai allbwn y canlynol:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Rydym yn gweld app lleoli gyda 10 replicas ac app-caneri gyda 0. Mae yna hefyd LoadBalancer y gallwn gael mynediad drwyddo curl trwy IP Allanol:

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

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Gwelwn fod ein cais prawf ond yn dychwelyd “v1”.

Gweithredu defnydd Canary

Cam 1: rhyddhau fersiwn newydd ar gyfer rhai defnyddwyr

Rydym yn gosod y nifer o atgynyrchiadau i 1 yn y ffeil deploy-canary.yaml a delwedd y fersiwn newydd:

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

Mewn ffeil deploy.yaml gwnaethom newid nifer y copïau i 9:

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

Rydym yn gwthio'r newidiadau hyn i'r ystorfa y bydd y defnydd yn cychwyn ohoni (trwy GitlabCI) ac yn gweld o ganlyniad:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Bydd ein Gwasanaeth yn cyfeirio at y ddau ddefnydd, gan fod gan y ddau ddewiswr ap. Oherwydd haposodiad diofyn Kubernetes, dylem weld gwahanol ymatebion ar gyfer ~10% o geisiadau:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Cyflwr presennol ein cais (GitOps, a gymerwyd o Git fel Un Ffynhonnell Gwirionedd) yw presenoldeb dau ddefnydd gyda chopïau gweithredol, un ar gyfer pob fersiwn.

~ Mae 10% o ddefnyddwyr yn dod yn gyfarwydd â fersiwn newydd ac yn ei brofi'n anfwriadol. Nawr yw'r amser i wirio am wallau yn y logiau a monitro data i ddod o hyd i broblemau.

Cam 2: Rhyddhewch y fersiwn newydd i bob defnyddiwr

Fe wnaethon ni benderfynu bod popeth wedi mynd yn dda a nawr mae angen i ni gyflwyno'r fersiwn newydd i bob defnyddiwr. I wneud hyn rydym yn syml yn diweddaru deploy.yaml gosod fersiwn newydd o'r ddelwedd a nifer y replicas hafal i 10. Yn deploy-canary.yaml rydym yn gosod nifer y copïau yn ôl i 0. Ar ôl eu defnyddio, bydd y canlyniad fel a ganlyn:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Crynhoi

I mi, mae rhedeg y gosodiad â llaw fel hyn yn helpu i ddeall pa mor hawdd y gellir ei ffurfweddu gan ddefnyddio k8s. Gan fod Kubernetes yn caniatáu ichi ddiweddaru popeth trwy API, gellir awtomeiddio'r camau hyn trwy sgriptiau.

Peth arall y mae angen ei weithredu yw pwynt mynediad profwr (LoadBalancer neu trwy Ingress) lle gellir cyrchu'r fersiwn newydd yn unig. Gellir ei ddefnyddio ar gyfer pori â llaw.

Mewn erthyglau yn y dyfodol, byddwn yn edrych ar atebion awtomataidd eraill sy'n gweithredu'r rhan fwyaf o'r hyn yr ydym wedi'i wneud.

Darllenwch erthyglau eraill ar ein blog hefyd:

Ffynhonnell: hab.com

Ychwanegu sylw