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 o Canary Γ’ llaw trwy GitOps ac yn creu/addasu'r prif adnoddau Kubernetes. Bwriadwyd yr erthygl hon yn bennaf at ddibenion cyflwyno. gyda sut mae defnyddio'n gweithio yn Kubernetes Canary, gan fod dulliau awtomeiddio mwy effeithlon, y byddwn yn eu trafod mewn erthyglau yn y dyfodol.


Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

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

Dedwyddiad Dedwydd

Gyda strategaeth Canary, dim ond i is-set o ddefnyddwyr y caiff diweddariadau eu cyflwyno i ddechrau. Trwy fonitro, data log, profion Γ’ llaw, neu sianeli adborth eraill, caiff y datganiad ei brofi cyn ei gyflwyno i bob defnyddiwr.

Defnyddio Kubernetes (diweddariad treigl)

Y strategaeth ddiofyn ar gyfer Kubernetes Deployment yw diweddaru-rholio, sy'n lansio nifer penodol o godau gyda fersiynau delwedd newydd. Os cΓ’nt eu creu heb broblemau, caiff y codau gyda'r hen fersiynau delwedd eu terfynu, a chaiff codau newydd eu creu ochr yn ochr.

GitOps

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

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

Enghraifft

Gadewch i ni gymryd arfer da - cael un storfa ar gyfer cod cymhwysiad ac un ar gyfer seilwaith.

Storfa gymwysiadau

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

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

Yr unig wahaniaeth rhyngddynt yw newid yn y ffeil JSON a ddychwelir. Rydym yn defnyddio'r rhaglen hon i weld yn hawdd pa fersiwn yr ydym yn siarad Γ’ hi.

Ystorfa seilwaith

Yn y repo hwn byddwn yn ei ddefnyddio 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 manylion mewngofnodi ar gyfer clwstwr (Gcloud) yma. 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'i ddefnyddio 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 yn 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 atgynhyrchiadau wedi'u diffinio eto.

Perfformio lleoli cychwynnol

I redeg y defnydd cychwynnol, gallwch redeg y biblinell GitlabCI Γ’ llaw ar y gangen feistr. Ar Γ΄l hynny kubectl dylai allbynnu'r canlynol:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Rydyn ni'n gweld app defnydd gyda 10 replica ac app-canary gyda 0. Mae yna LoadBalancer hefyd y gallwn gael mynediad iddo drwy curl gan 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 cymhwysiad prawf yn dychwelyd β€œv1” yn unig.

Perfformio Deployment Canary

Cam 1: Rhyddhau fersiwn newydd i rai defnyddwyr

Fe wnaethon ni osod y cyfrif replica 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 Fe wnaethon ni 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 storfa y bydd y defnydd yn cael ei lansio ohoni (trwy GitlabCI) ac yn gweld y canlyniad:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Bydd ein Gwasanaeth yn pwyntio at y ddau ddefnyddiad, gan fod gan y ddau ddewiswr apiau. Oherwydd dosbarthiad ar hap diofyn Kubernetes, dylem weld ymatebion gwahanol ar gyfer ~10% o geisiadau:

Defnydd Dedwydd yn Kubernetes #1: Gitlab CI

Cyflwr presennol ein cymhwysiad (GitOps, wedi'i gymryd o Git fel Single Source Of Truth) yw bod gennym ddau ddefnyddiad gyda replicΓ’u gweithredol, un ar gyfer pob fersiwn.

Mae tua 10% o ddefnyddwyr yn rhoi cynnig ar y fersiwn newydd ac yn ei phrofi'n anfwriadol. Nawr mae'n bryd gwirio logiau a data monitro am wallau i nodi unrhyw broblemau.

Cam 2: Rhyddhau'r fersiwn newydd i bob defnyddiwr

Penderfynon ni fod popeth wedi mynd yn dda a nawr mae angen i ni gyflwyno'r fersiwn newydd i bob defnyddiwr. I wneud hyn, rydyn ni'n syml yn diweddaru deploy.yaml gosod fersiwn newydd o'r ddelwedd a nifer y copΓ―au yn hafal i 10. 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 fy helpu i ddeall pa mor hawdd y gellir ei ffurfweddu gan ddefnyddio K8s. Gan fod Kubernetes yn caniatΓ‘u diweddariadau trwy'r API, gellir awtomeiddio'r camau hyn gan ddefnyddio sgriptiau.

Peth arall sydd angen ei weithredu yw pwynt mynediad profwr (LoadBalancer neu drwy Ingress) a fydd ond yn caniatΓ‘u mynediad i'r fersiwn newydd. Gellir defnyddio hwn ar gyfer adolygiad Γ’ llaw.

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

Darllenwch erthyglau eraill ar ein blog hefyd:

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd Γ’ diogelwch DDoS, gweinyddwyr VPS VDS πŸ”₯ Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster