Gelida Canary ee Kubernetes #2: Argo Rollouts

Waxaan u isticmaali doonaa k8s-ka u dhashay Argo Rollouts kantaroolaha geynta iyo GitlabCI si aan u socodsiino diritaanada Canary ee Kubernetes

Gelida Canary ee Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Maqaallada taxanahan

Gelida Canary

Waxaan rajeyneynaa inaad akhrido qaybtii kowaad, halkaas oo aan si kooban u sharaxnay waxa ay tahay Canary Deployments. Waxaan sidoo kale tusnay sida loo hirgeliyo iyadoo la adeegsanayo ilaha caadiga ah ee Kubernetes.

Argo Rollouts

Argo Rollouts waa kantaroolaha geynta u dhashay Kubernetes. Waxay siisaa CRD (Qeexida Kheyraadka Gaarka ah) ee Kubernetes. Thanks to it, waxaan isticmaali karnaa qayb cusub: Rollout, kaas oo maareynaya geynta buluug-cagaaran iyo kanary oo leh xulasho qaabeyn oo kala duwan.

Argo Rollouts kontoroolka ay adeegsato kheyraadka gaarka ah Rollout, Oggolow xeelado geyn dheeri ah sida buluug-cagaaran iyo kanary ee Kubernetes. Khayraadka Rollout waxay bixisaa shaqayn u dhiganta Deployment, kaliya leh xeelado dheeraad ah oo la geeyo.
khayraadka Deployments waxay leedahay laba xeeladood oo lagu geynayo: RollingUpdate ΠΈ Recreate. Inkasta oo xeeladahani ay ku habboon yihiin kiisaska intooda badan, in la geeyo server-yada si aad u ballaaran, xeelado dheeraad ah ayaa la isticmaalaa, sida buluug-cagaaran ama canary, kuwaas oo aan laga heli karin kantaroolaha Deployment. Si loo isticmaalo xeeladahan gudaha Kubernetes, isticmaalayaashu waxay ku qasbanaadeen inay qoraallo ku qoraan dushooda Hawlgelintooda. Xakamaynta Argo Rollouts waxay daaha ka rogtay xeeladahan inay yihiin kuwo fudud, caddaynaya, cabbirro la habayn karo.
https://argoproj.github.io/argo-rollouts

Waxa kale oo jira Argo CI, oo bixisa isku-xidhka shabakadda ee ku habboon isticmaalka Rollouts, waxaanu ku eegi doonaa taas maqaalka soo socda.

Ku rakibida Argo Rollouts

Dhinaca Server-ka

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

Kaabayaasha rogrogmada (hoos eeg) waxaan horey ugu darnay install.yaml as i/k8s/argo-rollouts/install.yaml. Sidan GitlabCI ayaa ku rakibi doonta kooxda.

Dhinaca macmiilka (kubectl plugin)

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

Tusaale Codsiga

Waa ku-dhaqan wanaagsan in la haysto meelo gaar ah oo loogu talagalay code-ka codsiga iyo kaabayaasha.

Kaydka codsiga

Kim Wuestkamp/k8s-deployment-tusaale-app

Kani waa Python+Flask API aad u fudud oo u soo celisa jawaabta JSON ahaan. Waxaan ku dhisi doonaa xirmada anagoo adeegsanayna GitlabCI oo aan natiijada u riixi doono Diiwaanka Gitlab. Diiwaanka waxaan ku haynaa laba nooc oo sii dayn ah:

  • wuestkamp/k8s-dejinta-tusaale-app:v1
  • wuestkamp/k8s-dejinta-tusaale-app:v2

Waxa kaliya ee u dhexeeya waa faylka JSON oo la soo celiyay. Waxaan u isticmaalnaa arjigan si aan ugu sawirno sida ugu fudud ee suurtogalka ah nooca aan kula xiriireyno.

Kaydka kaabayaasha dhaqaalaha

Kaydkaan waxaan u isticmaali doonaa GitlabCI dirida Kubernetes, .gitlab-ci.yml waxay u egtahay sidan:

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

Si aad naftaada u maamusho waxaad u baahan doontaa koox, waxaad isticmaali kartaa Gcloud:

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

Waxaad u baahan tahay inaad fargeeto https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure oo abuur doorsoome KUBECONFIG gudaha GitlabCI, kaas oo ka koobnaan doona qaabeynta gelitaanka kubectl kooxdaada.

waa Waxaad ka akhrisan kartaa sida loo helo shahaadooyinka kooxda (Gcloud).

Kaabayaasha Yaml

Gudaha kaydka kaabayaasha waxaanu ku leenahay adeeg:

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

iyo duubid.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 wuxuu u shaqeeyaa si la mid ah sida Deployment. Haddii aynaan dejin istaraatiijiyad casriyeyn ah (sida halkan canary) waxay u dhaqmi doontaa sidii dib-u-cusbooneysiinta Diridda.

Waxaan ku qeexnay laba tilaabo oo yaml ah oo loogu talagalay geynta kanary-ga:

  1. 10% ee taraafikada ilaa canary (sug buug-gacmeedka OK)
  2. 50% taraafikada canary (sug 2 daqiiqo ka dibna sii wad ilaa 100%)

Samaynta geynta bilowga ah

Ka dib marka hore, agabkayagu waxa uu u ekaan doonaa sidan:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Oo waxaan ka helnaa jawaab kaliya nooca koowaad ee codsiga:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Samaynta Dirista Canary

Tallaabada 1: 10% taraafikada

Si aan u bilowno geynta kanary-ga, waxaan kaliya u baahanahay inaan bedelno nooca sawirka sida aan inta badan ku samayno hawlgelinta:

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

Oo waxaan riixeynaa isbeddelada, markaa Gitlab CI waxay geysaa oo waxaan aragnaa isbeddelada:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Hadda haddii aan galno adeegga:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Wayn! Waxaan dhexda uga jirnaa hawlgelintayada kanariyada. Horumarka waxaan ku arki karnaa orod:

kubectl argo rollouts get rollout rollout-canary

Gelida Canary ee Kubernetes #2: Argo Rollouts

Tallaabada 2: 50% taraafikada:

Hadda aan u gudubno tallaabada xigta: dib u habeynta 50% ee taraafikada. Waxaan u habeynay tillaabadan in gacanta lagu maamulo:

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

Gelida Canary ee Kubernetes #2: Argo Rollouts

Codsigayaguna wuxuu soo celiyay 50% jawaabaha noocyada cusub:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Iyo dib u eegista dib u eegista:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Cajiib.

Tallaabada 3: 100% taraafikada:

Waxaan u habeynay si 2 daqiiqo ka dib ay 50% tillaabada si toos ah u dhammaato oo 100% ay bilaabanto:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Iyo wax soo saarka codsiga:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Iyo dib u eegista dib u eegista:

Gelida Canary ee Kubernetes #2: Argo Rollouts

Hawlgelinta Canary waa dhammaatay.

Tusaalayaal badan oo leh Argo Rollouts

Waxaa jira tusaalooyin badan oo halkan ah, sida sida loo dejiyo aragtiyo deegaan iyo isbarbardhig ku salaysan canary:

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

Fiidiyow ku saabsan Argo Rollouts iyo Argo CI

Runtii waxaan ku talinayaa fiidiyowgaan, waxay muujineysaa sida Argo Rollouts iyo Argo CI ay u wada shaqeeyaan:

Natiijada

Waxaan runtii jeclahay fikradda adeegsiga CRD-yada maamula abuurista noocyo dheeri ah oo la geeyo ama dib-u-celinta, dib-u-hagaajinta taraafikada, iwm. La shaqaynta iyaga ayaa si habsami leh u socota. Marka xigta waxaan jeclaan lahaa inaan tijaabiyo isdhexgalka Argo CI.

Si kastaba ha noqotee, waxay u muuqataa inay jiraan iskudar weyn oo Argo CI iyo Flux CI soo socda, markaa waxaan sugi karaa ilaa sii deynta cusubi ka soo baxayso: Argo Flux.

Wax khibrad ah ma u leedahay Argo Rollouts ama Argo CI?

Sidoo kale akhri maqaallo kale oo ku jira blog-keena:

Source: www.habr.com

Add a comment