Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Byddwn yn defnyddio'r rheolwr lleoli Argo Rollouts brodorol k8s a GitlabCI i redeg gosodiadau Canary i Kubernetes

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

https://unsplash.com/photos/V41PulGL1z0

Erthyglau yn y gyfres hon

Dedwyddiad Dedwydd

Gobeithiwn y darllenwch rhan gyntaf, lle yr eglurasom yn fyr beth yw Canary Deployments. Fe wnaethom hefyd ddangos sut i'w weithredu gan ddefnyddio adnoddau safonol Kubernetes.

Cyflwyno Argo

Mae Argo Rollouts yn rheolwr lleoli brodorol Kubernetes. Mae'n darparu CRD (Diffiniad o Adnoddau Cwsmer) ar gyfer Kubernetes. Diolch iddo, gallwn ddefnyddio endid newydd: Rollout, sy'n rheoli gosodiadau glaswyrdd a chaneri gyda gwahanol opsiynau ffurfweddu.

Rheolydd Argo Rollouts a ddefnyddir gan adnodd wedi'i deilwra Rollout, Yn caniatáu ar gyfer strategaethau defnyddio ychwanegol fel gwyrddlas a chaneri ar gyfer Kubernetes. Adnodd Rollout yn darparu ymarferoldeb cyfatebol Deployment, dim ond gyda strategaethau defnyddio ychwanegol.
adnodd Deployments Mae ganddi ddwy strategaeth ar gyfer eu defnyddio: RollingUpdate и Recreate. Er bod y strategaethau hyn yn addas ar gyfer y rhan fwyaf o achosion, i'w defnyddio ar weinyddion ar raddfa fawr iawn, defnyddir strategaethau ychwanegol, fel glaswyrdd neu caneri, nad ydynt ar gael yn y rheolydd Defnyddio. Er mwyn defnyddio'r strategaethau hyn yn Kubernetes, roedd yn rhaid i ddefnyddwyr ysgrifennu sgriptiau ar ben eu Defnyddiau. Mae Rheolwr Cyflwyno Argo yn datgelu'r strategaethau hyn fel paramedrau syml, datganiadol, ffurfweddadwy.
https://argoproj.github.io/argo-rollouts

Mae yna hefyd Argo CI, sy'n darparu rhyngwyneb gwe cyfleus i'w ddefnyddio gyda Rollouts, byddwn yn edrych ar hynny yn yr erthygl nesaf.

Gosod Argo Rollouts

Ochr y gweinydd

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

Yn ein maip seilwaith (gweler isod) rydym eisoes wedi ychwanegu install.yaml fel i/k8s/argo-rollouts/install.yaml. Fel hyn bydd GitlabCI yn ei osod yn y clwstwr.

Ochr cleient (ategyn kubectl)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

Cais Enghreifftiol

Mae'n arfer da cael storfeydd ar wahân ar gyfer cod cymwysiadau a seilwaith.

Ystorfa ar gyfer y cais

Kim Wuestkamp/k8s-deployment-example-app

Mae hwn yn API Python + Ffasg syml iawn sy'n dychwelyd ymateb fel JSON. Byddwn yn adeiladu'r pecyn gan ddefnyddio 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 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 storfa hon byddwn yn defnyddio GitlabCI i'w ddefnyddio i Kubernetes, mae .gitlab-ci.yml yn edrych fel hyn:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy 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.

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

Isadeiledd Yaml

O fewn y storfa seilwaith mae gennym wasanaeth:

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

a rollout.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout yn gweithio yr un fath â Deployment. Os na fyddwn yn gosod strategaeth ddiweddaru (fel caneri yma) bydd yn ymddwyn fel y rhagosodedig Defnyddio diweddariad treigl.

Rydym yn diffinio dau gam yn yaml ar gyfer defnyddio caneri:

  1. 10% o'r traffig i'r caneri (arhoswch am â llaw yn iawn)
  2. 50% o draffig i'r caneri (aros 2 funud ac yna parhau i 100%)

Perfformio lleoli cychwynnol

Ar ôl y defnydd cychwynnol, bydd ein hadnoddau yn edrych fel hyn:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

A dim ond o fersiwn gyntaf y cais rydyn ni'n cael ymateb:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Perfformio Defnydd Canary

Cam 1: 10% traffig

I ddechrau defnyddio caneri, does ond angen i ni newid fersiwn y ddelwedd fel rydyn ni'n ei wneud fel arfer gyda gosodiadau:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

Ac rydyn ni'n gwthio newidiadau, felly mae Gitlab CI yn eu defnyddio ac rydyn ni'n gweld y newidiadau:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Nawr os ydym yn cyrchu'r gwasanaeth:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Gwych! Rydym yng nghanol ein defnydd caneri. Gallwn weld y cynnydd trwy redeg:

kubectl argo rollouts get rollout rollout-canary

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Cam 2: 50% o draffig:

Nawr, gadewch i ni symud ymlaen i'r cam nesaf: ailgyfeirio 50% o'r traffig. Fe wnaethom ffurfweddu'r cam hwn i gael ei redeg â llaw:

kubectl argo rollouts promote rollout-canary # continue to step 2

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

A dychwelodd ein cais 50% o'r ymatebion o fersiynau newydd:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Ac adolygiad cyflwyno:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Prекрасно.

Cam 3: 100% o draffig:

Fe wnaethom ei sefydlu fel bod y cam 2% yn dod i ben yn awtomatig ar ôl 50 funud a bod y cam 100% yn dechrau:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Ac allbwn y cais:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Ac adolygiad cyflwyno:

Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo

Mae'r defnydd caneri wedi'i gwblhau.

Mwy o enghreifftiau gyda Argo Rollouts

Mae mwy o enghreifftiau yma, megis sut i sefydlu rhagolygon amgylchedd a chymariaethau yn seiliedig ar ganeri:

https://github.com/argoproj/argo-rollouts/tree/master/examples

Fideo am Argo Rollouts ac Argo CI

Rwy'n argymell y fideo hwn yn fawr, mae'n dangos sut mae Argo Rollouts ac Argo CI yn gweithio gyda'i gilydd:

Cyfanswm

Rwy'n hoff iawn o'r syniad o ddefnyddio CRDs sy'n rheoli creu mathau ychwanegol o leoliadau neu atgynhyrchiadau, ailgyfeirio traffig, ac ati. Mae gweithio gyda nhw yn mynd yn esmwyth. Nesaf hoffwn brofi'r integreiddio ag Argo CI.

Fodd bynnag, mae'n ymddangos bod cyfuniad mawr o Argo CI a Flux CI yn dod, felly efallai y byddaf yn aros nes bydd y datganiad newydd yn dod allan: Fflwcs Argo.

Ydych chi wedi cael unrhyw brofiad gydag Argo Rollouts neu Argo CI?

Darllenwch erthyglau eraill ar ein blog hefyd:

Ffynhonnell: hab.com

Ychwanegu sylw