Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Tidzagwiritsa ntchito owongolera oyendetsa ma k8s-native Argo Rollouts ndi GitlabCI kuyendetsa ma Canary deployments ku Kubernetes.

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Nkhani zotsatizanazi

Kutumiza kwa Canary

Tikukhulupirira kuti mukuwerenga gawo loyamba, pomwe tidafotokozera mwachidule zomwe Canary Deployments ndi. Tidawonetsanso momwe tingagwiritsire ntchito pogwiritsa ntchito zofunikira za Kubernetes.

Kutulutsa kwa Argo

Argo Rollouts ndi wolamulira wa Kubernetes. Imapereka CRD (Custom Resource Definition) ya Kubernetes. Chifukwa chake, titha kugwiritsa ntchito chinthu chatsopano: Rollout, yomwe imayang'anira zobiriwira zobiriwira ndi canary zokhala ndi zosankha zosiyanasiyana.

Wowongolera wa Argo Rollouts wogwiritsidwa ntchito ndi makonda Rollout, Imalola njira zowonjezera zotumizira monga blue-green ndi canary za Kubernetes. Zothandizira Rollout imapereka magwiridwe antchito ofanana Deployment, pokhapokha ndi njira zowonjezera zotumizira.
gwero Deployments ili ndi njira ziwiri zotumizira: RollingUpdate и Recreate. Ngakhale kuti njirazi ndizoyenera nthawi zambiri, kuti zitumizidwe ku ma seva pamlingo waukulu kwambiri, njira zowonjezera zimagwiritsidwa ntchito, monga buluu-wobiriwira kapena canary, zomwe sizipezeka mu Wolamulira wa Deployment. Kuti agwiritse ntchito njirazi ku Kubernetes, ogwiritsa ntchito adayenera kulemba zolemba pamwamba pa Zomwe Amatumiza. Wolamulira wa Argo Rollouts amawulula njirazi ngati zosavuta, zofotokozera, zosinthika.
https://argoproj.github.io/argo-rollouts

Palinso Argo CI, yomwe imapereka mawonekedwe osavuta a intaneti kuti agwiritsidwe ntchito ndi Rollouts, tiwona izi m'nkhani yotsatira.

Kukhazikitsa Argo Rollouts

Mbali ya seva

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

M'malo athu a turnip (onani m'munsimu) tawonjezera kale install.yaml monga i/k8s/argo-rollouts/install.yaml. Mwanjira iyi GitlabCI idzayiyika mumagulu.

Mbali ya kasitomala (kubectl plugin)

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

Chitsanzo Ntchito

Ndibwino kukhala ndi nkhokwe zosiyana zamakhodi ogwiritsira ntchito ndi zomangamanga.

Posungira ntchito

Kim Wuestkamp/k8s-deployment-chitsanzo-app

Iyi ndi Python + Flask API yosavuta kwambiri yomwe imabwezera yankho ngati JSON. Tipanga phukusi pogwiritsa ntchito GitlabCI ndikukankhira zotsatira ku Gitlab Registry. Mu registry tili ndi mitundu iwiri yotulutsa:

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

Kusiyana kokha pakati pawo ndi fayilo ya JSON yobwezedwa. Timagwiritsa ntchito pulogalamuyi kuti tiwone mosavuta momwe tingathere mtundu womwe tikulankhula nawo.

Malo osungirako zomangamanga

Munkhokwe iyi tidzagwiritsa ntchito GitlabCI potumiza ku Kubernetes, .gitlab-ci.yml ikuwoneka motere:

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

Kuti muyendetse nokha mudzafunika tsango, mutha kugwiritsa ntchito Gcloud:

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

Muyenera kufota https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ndi kupanga variable KUBECONFIG mu GitlabCI, yomwe idzakhala ndi config kuti mufike kubectl ku gulu lanu.

ndi Mutha kuwerenga za momwe mungapezere zidziwitso zamagulu (Gcloud).

Infrastructure Yaml

Mkati mwa nkhokwe ya zomangamanga tili ndi ntchito:

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

ndi 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 imagwira ntchito mofanana ndi Deployment. Ngati sitikhazikitsa njira yosinthira (monga canary apa) ikhala ngati Kutumiza kosintha.

Timatanthauzira masitepe awiri mu yaml pakuyika kwa canary:

  1. 10% ya magalimoto kupita ku canary (dikirani buku labwino)
  2. 50% magalimoto kupita ku canary (dikirani mphindi 2 kenako pitilizani mpaka 100%)

Kukonzekera koyamba

Pambuyo pa kutumizidwa koyamba, zothandizira zathu zidzawoneka motere:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Ndipo timapeza yankho kuchokera ku mtundu woyamba wa pulogalamuyi:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Kuchita Kutumiza kwa Canary

Khwerero 1: 10% magalimoto

Kuti tiyambe kutumiza ma canary, timangofunika kusintha mawonekedwe azithunzi monga momwe timachitira nthawi zambiri ndi kutumiza:

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

Ndipo timakankhira zosintha, kotero Gitlab CI imatumiza ndipo tikuwona zosintha:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Tsopano ngati titha kupeza ntchito:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Zabwino! Tili pakati pa kutumizidwa kwathu kwa canary. Titha kuwona kupita patsogolo ndikuthamanga:

kubectl argo rollouts get rollout rollout-canary

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Gawo 2: 50% magalimoto:

Tsopano tiyeni tipitirire ku sitepe yotsatira: kulozeranso 50% ya magalimoto. Tidakonza kuti izi ziziyendetsedwa pamanja:

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

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Ndipo ntchito yathu idabweza 50% ya mayankho kuchokera kumitundu yatsopano:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Ndipo kubwereza kubwereza:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Zodabwitsa.

Gawo 3: 100% magalimoto:

Tidayikhazikitsa kuti pakatha mphindi 2 gawo la 50% litha zokha ndipo gawo la 100% liyamba:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Ndipo zotsatira za ntchito:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Ndipo kubwereza kubwereza:

Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts

Kutumiza kwa Canary kwatha.

Zitsanzo zambiri ndi Argo Rollouts

Pali zitsanzo zambiri apa, monga momwe mungakhazikitsire zowonera za chilengedwe ndi kufananitsa kutengera canary:

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

Kanema wa Argo Rollouts ndi Argo CI

Ndikupangira vidiyoyi, ikuwonetsa momwe Argo Rollouts ndi Argo CI amagwirira ntchito limodzi:

Zotsatira

Ndimakonda kwambiri lingaliro logwiritsa ntchito ma CRD omwe amayang'anira kupanga mitundu yowonjezereka ya zotumizira kapena zofananira, kuwongolera magalimoto, ndi zina zambiri. Kugwira nawo ntchito kumayenda bwino. Kenako ndikufuna kuyesa kuphatikiza ndi Argo CI.

Komabe, zikuwoneka kuti pali kuphatikiza kwakukulu kwa Argo CI ndi Flux CI kubwera, kotero nditha kudikirira mpaka kutulutsidwa kwatsopano kutuluke: Argo Flux.

Kodi mudakumanapo ndi Argo Rollouts kapena Argo CI?

Werenganinso zolemba zina pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga