Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Za mu yi amfani da k8s-an asalin Argo Rollouts mai kula da turawa da GitlabCI don gudanar da jigilar Canary zuwa Kubernetes.

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Labarai a cikin wannan jerin

Canary turawa

Muna fatan kun karanta kashi na farko, Inda muka ɗan yi bayanin abin da Canary Deployments suke. Mun kuma nuna yadda ake aiwatar da shi ta amfani da daidaitattun albarkatun Kubernetes.

Argo Rollouts

Argo Rollouts ɗan asalin Kubernetes ne mai sarrafa tura turawa. Yana ba da CRD (Ma'anar Albarkatun Al'ada) don Kubernetes. Godiya gare shi, za mu iya amfani da sabon mahalli: Rollout, wanda ke sarrafa shuɗi-kore da kayan aikin canary tare da zaɓuɓɓukan daidaitawa daban-daban.

Mai sarrafa Argo Rollouts wanda wata hanya ta al'ada ke amfani da ita Rollout, Yana ba da damar ƙarin dabarun tura aiki kamar shuɗi-kore da canary don Kubernetes. Albarkatu Rollout yana ba da aiki daidai Deployment, kawai tare da ƙarin dabarun turawa.
hanya Deployments yana da tsari guda biyu don turawa: RollingUpdate и Recreate. Ko da yake waɗannan dabarun sun dace da mafi yawan lokuta, don turawa zuwa sabobin a kan ma'auni mai girma, ana amfani da ƙarin dabaru, irin su blue-kore ko canary, waɗanda ba su samuwa a cikin Mai sarrafa Deployment. Don amfani da waɗannan dabarun a cikin Kubernetes, masu amfani dole ne su rubuta rubutun a saman Ayyukan su. Mai sarrafa Argo Rollouts yana fallasa waɗannan dabarun a matsayin masu sauƙi, bayyananni, sigogi masu daidaitawa.
https://argoproj.github.io/argo-rollouts

Hakanan akwai Argo CI, wanda ke ba da ingantaccen haɗin yanar gizo don amfani tare da Rollouts, za mu kalli hakan a cikin labarin na gaba.

Sanya Argo Rollouts

Gefen uwar garken

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

A cikin kayan aikin mu na turnip (duba ƙasa) mun riga mun ƙara install.yaml kamar yadda i/k8s/argo-rollouts/install.yaml. Ta wannan hanyar GitlabCI zai shigar da shi cikin tari.

Gefen abokin ciniki (kubectl plugin)

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

Misali Application

Yana da kyau a sami ma'ajiyar ma'ajiyar bayanai don lambar aikace-aikace da ababen more rayuwa.

Wurin ajiya na aikace-aikacen

Kim Wuestkamp/k8s-aikin-misali-app

Wannan API ɗin Python+Flask ne mai sauƙi wanda ke mayar da martani azaman JSON. Za mu gina kunshin ta amfani da GitlabCI kuma mu tura sakamakon zuwa Gitlab Registry. A cikin rajista muna da nau'ikan saki daban-daban guda biyu:

  • wuestkamp/k8s-aikin-misali-app:v1
  • wuestkamp/k8s-aikin-misali-app:v2

Bambancin kawai tsakanin su shine fayil ɗin JSON da aka dawo dashi. Muna amfani da wannan aikace-aikacen don ganin sauƙi cikin sauƙi wanda muke sadarwa da shi.

Ma'ajiyar kayan more rayuwa

A cikin wannan wurin ajiyar za mu yi amfani da GitlabCI don turawa zuwa Kubernetes, .gitlab-ci.yml yayi kama da wannan:

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

Don gudanar da shi da kanku kuna buƙatar gungu, zaku iya amfani da Gcloud:

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

Kuna buƙatar cokali mai yatsa https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure kuma ƙirƙirar m KUBECONFIG a GitlabCI, wanda zai ƙunshi saitin don samun dama kubectl zuwa gungu.

Yana da Kuna iya karanta game da yadda ake samun takaddun shaida don tari (Gcloud).

Kayan aikin Yaml

A cikin ma'ajiyar kayayyakin more rayuwa muna da sabis:

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

da 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 yana aiki daidai da Deployment. Idan ba mu saita dabarun sabuntawa ba (kamar canary anan) zai yi kama da tsohowar sabunta-sabuntawa.

Mun ayyana matakai biyu a cikin yaml don tura canary:

  1. 10% na zirga-zirga zuwa canary (jiran manual OK)
  2. 50% zirga-zirga zuwa canary (jira minti 2 sannan ci gaba zuwa 100%)

Yin turawa na farko

Bayan ƙaddamar da farko, albarkatun mu za su yi kama da haka:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Kuma muna samun amsa kawai daga sigar farko ta aikace-aikacen:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Yin Aiwatar da Canary

Mataki 1: 10% zirga-zirga

Don fara tura canary, kawai muna buƙatar canza sigar hoto kamar yadda muka saba yi da turawa:

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

Kuma muna tura canje-canje, don haka Gitlab CI yana turawa kuma muna ganin canje-canje:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Yanzu idan mun sami damar sabis ɗin:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Mai girma! Muna tsakiyar tura canary din mu. Za mu iya ganin ci gaban ta hanyar gudu:

kubectl argo rollouts get rollout rollout-canary

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Mataki na 2: 50% zirga-zirga:

Yanzu bari mu matsa zuwa mataki na gaba: tura 50% na zirga-zirga. Mun saita wannan matakin don gudanar da shi da hannu:

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

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Kuma aikace-aikacenmu ya dawo da kashi 50% na martani daga sabbin nau'ikan:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Kuma sake dubawa:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Abin al'ajabi.

Mataki na 3: 100% zirga-zirga:

Mun saita shi don bayan mintuna 2 matakin 50% ya ƙare ta atomatik kuma matakin 100% yana farawa:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Kuma fitar da aikace-aikacen:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

Kuma sake dubawa:

Aiwatar da Canary a Kubernetes #2: Argo Rollouts

An gama tura Canary.

Ƙarin misalai tare da Argo Rollouts

Akwai ƙarin misalai anan, kamar yadda ake saita samfotin yanayi da kwatance bisa kan canary:

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

Bidiyo game da Argo Rollouts da Argo CI

Ina ba da shawarar wannan bidiyon da gaske, yana nuna yadda Argo Rollouts da Argo CI suke aiki tare:

Sakamakon

Ina matukar son ra'ayin yin amfani da CRDs waɗanda ke sarrafa ƙirƙirar ƙarin nau'ikan turawa ko kwafi, tura zirga-zirga, da sauransu. Yin aiki tare da su yana tafiya lafiya. Na gaba Ina so in gwada haɗin kai tare da Argo CI.

Koyaya, da alama akwai babban haɗin gwiwa na Argo CI da Flux CI suna zuwa, don haka zan iya jira har sai sabon sakin ya fito: Argo Flux.

Shin kun taɓa samun gogewa tare da Argo Rollouts ko Argo CI?

Hakanan karanta wasu labarai akan shafinmu:

source: www.habr.com

Add a comment