Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

A yoo lo k8s-abinibi Argo Rollouts oludari imuṣiṣẹ ati GitlabCI lati ṣiṣẹ awọn imuṣiṣẹ Canary si Kubernetes

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Ìwé ni yi jara

Canary imuṣiṣẹ

A nireti pe o ka apakan akọkọ, Nibi ti a ti ṣe alaye ni ṣoki kini Awọn imuṣiṣẹ Canary jẹ. A tun fihan bi a ṣe le ṣe imuse rẹ nipa lilo awọn orisun Kubernetes boṣewa.

Argo Rollouts

Argo Rollouts jẹ oludari imuṣiṣẹ ọmọ abinibi Kubernetes kan. O pese CRD (Itumọ orisun orisun Aṣa) fun Kubernetes. O ṣeun si rẹ, a le lo nkan titun kan: Rollout, eyi ti o ṣakoso awọn bulu-alawọ ewe ati awọn imuṣiṣẹ canary pẹlu orisirisi awọn aṣayan iṣeto ni.

Argo Rollouts oludari lo nipasẹ aṣa awọn oluşewadi Rollout, Gba laaye fun awọn ilana imuṣiṣẹ ni afikun gẹgẹbi alawọ-alawọ ewe ati canary fun Kubernetes. Awọn orisun Rollout pese deede iṣẹ-ṣiṣe Deployment, nikan pẹlu awọn ilana imuṣiṣẹ afikun.
awọn oluşewadi Deployments ni awọn ilana meji fun imuṣiṣẹ: RollingUpdate и Recreate. Botilẹjẹpe awọn ọgbọn wọnyi dara fun ọpọlọpọ awọn ọran, fun imuṣiṣẹ si awọn olupin ni iwọn ti o tobi pupọ, awọn ilana afikun ni a lo, bii alawọ-alawọ ewe tabi canary, eyiti ko si ninu oluṣakoso Imuṣiṣẹ. Lati lo awọn ọgbọn wọnyi ni Kubernetes, awọn olumulo ni lati kọ awọn iwe afọwọkọ lori oke Awọn imuṣiṣẹ wọn. Adarí Argo Rollouts ṣafihan awọn ilana wọnyi bi o rọrun, asọye, awọn aye atunto.
https://argoproj.github.io/argo-rollouts

Argo CI tun wa, eyiti o pese wiwo oju opo wẹẹbu ti o rọrun fun lilo pẹlu Rollouts, a yoo wo iyẹn ni nkan atẹle.

Fifi Argo Rollouts

Ẹgbẹ olupin

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

Ninu turnip amayederun wa (wo isalẹ) a ti ṣafikun install.yaml tẹlẹ bi i/k8s/argo-rollouts/install.yaml. Ni ọna yii GitlabCI yoo fi sii sinu iṣupọ.

Ẹgbẹ alabara (ohun itanna kubectl)

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

Ohun elo apẹẹrẹ

O jẹ iṣe ti o dara lati ni awọn ibi ipamọ lọtọ fun koodu ohun elo ati awọn amayederun.

Ibi ipamọ fun ohun elo

Kim Wuestkamp/k8s-imuṣiṣẹ-apẹẹrẹ-app

Eyi jẹ Python + Flask API ti o rọrun pupọ ti o da esi pada bi JSON. A yoo kọ package naa nipa lilo GitlabCI ati Titari abajade si Iforukọsilẹ Gitlab. Ninu iforukọsilẹ a ni awọn ẹya itusilẹ oriṣiriṣi meji:

  • wuestkamp/k8s-imuṣiṣẹ-apẹẹrẹ-app:v1
  • wuestkamp/k8s-imuṣiṣẹ-apẹẹrẹ-app:v2

Iyatọ laarin wọn nikan ni faili JSON pada. A lo ohun elo yii lati wo ni irọrun bi o ti ṣee ṣe iru ẹya ti a n ba sọrọ.

Ibi ipamọ ohun elo

Ninu ibi ipamọ yii a yoo lo GitlabCI fun imuṣiṣẹ si Kubernetes, .gitlab-ci.yml dabi eyi:

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

Lati ṣiṣẹ funrararẹ iwọ yoo nilo iṣupọ kan, o le lo Gcloud:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80

O nilo lati orita https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ki o si ṣẹda oniyipada KUBECONFIG ni GitlabCI, eyiti yoo ni atunto fun iraye si kubectl si iṣupọ rẹ.

o ti wa ni O le ka nipa bi o ṣe le gba awọn iwe-ẹri fun iṣupọ kan (Gcloud).

Amayederun Yaml

Ninu ibi ipamọ amayederun a ni iṣẹ:

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

ati 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 ṣiṣẹ kanna bi Imuṣiṣẹ. Ti a ko ba ṣeto ilana imudojuiwọn (bii canary nibi) yoo huwa bii Imuṣiṣẹ imudojuiwọn-imudojuiwọn aiyipada.

A ṣalaye awọn igbesẹ meji ni yaml fun imuṣiṣẹ canary:

  1. 10% ti ijabọ si canary (duro fun afọwọṣe O dara)
  2. 50% ijabọ si canary (duro awọn iṣẹju 2 lẹhinna tẹsiwaju si 100%)

Ṣiṣe imuṣiṣẹ akọkọ

Lẹhin imuṣiṣẹ akọkọ, awọn orisun wa yoo dabi eyi:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ati pe a gba esi nikan lati ẹya akọkọ ti ohun elo:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ṣiṣe imuṣiṣẹ Canary

Igbesẹ 1: 10% ijabọ

Lati bẹrẹ imuṣiṣẹ canary kan, a kan nilo lati yi ẹya aworan pada bi a ṣe n ṣe pẹlu awọn imuṣiṣẹ:

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
...

Ati pe a Titari awọn ayipada, nitorinaa Gitlab CI ṣe ransẹ ati pe a rii awọn ayipada:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Bayi ti a ba wọle si iṣẹ naa:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Nla! A wa ni arin imuṣiṣẹ canary wa. A le rii ilọsiwaju naa nipa ṣiṣe:

kubectl argo rollouts get rollout rollout-canary

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Igbesẹ 2: 50% ijabọ:

Bayi jẹ ki a lọ si igbesẹ ti n tẹle: ṣiṣatunṣe 50% ti ijabọ naa. A tunto igbese yii lati ṣiṣẹ pẹlu ọwọ:

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

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ati pe ohun elo wa pada 50% ti awọn idahun lati awọn ẹya tuntun:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ati atunyẹwo ifilọlẹ:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ni pipe.

Igbesẹ 3: 100% ijabọ:

A ṣeto rẹ ki lẹhin iṣẹju 2 igbesẹ 50% dopin laifọwọyi ati igbesẹ 100% bẹrẹ:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ati abajade ohun elo:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Ati atunyẹwo ifilọlẹ:

Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts

Canary imuṣiṣẹ ti pari.

Awọn apẹẹrẹ diẹ sii pẹlu Argo Rollouts

Awọn apẹẹrẹ diẹ sii wa nibi, bii bii o ṣe le ṣeto awọn awotẹlẹ agbegbe ati awọn afiwera ti o da lori canary:

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

Fidio nipa Argo Rollouts ati Argo CI

Mo ṣeduro fidio yii gaan, o fihan bi Argo Rollouts ati Argo CI ṣe n ṣiṣẹ papọ:

Abajade

Mo nifẹ gaan imọran ti lilo awọn CRD ti o ṣakoso ẹda ti awọn iru imuṣiṣẹ ti afikun tabi awọn atunda, awọn ọna gbigbe, ati bẹbẹ lọ. Ṣiṣẹ pẹlu wọn lọ laisiyonu. Nigbamii Emi yoo fẹ lati ṣe idanwo isọpọ pẹlu Argo CI.

Bibẹẹkọ, o dabi ẹni pe iṣopọ nla ti Argo CI ati Flux CI nbọ, nitorinaa MO le duro titi itusilẹ tuntun yoo fi jade: Argo Flux.

Njẹ o ti ni iriri eyikeyi pẹlu Argo Rollouts tabi Argo CI?

Tun ka awọn nkan miiran lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun