Nkwanye Canary na Kubernetes #2: Argo Rollouts

Anyị ga-eji k8s-nwa amaala Argo Rollouts na GitlabCI na-ebuga Canary na Kubernetes.

Nkwanye Canary na Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Akụkọ n'usoro isiokwu a

Nbunye Canary

Anyị nwere olileanya na ị gụrụ akụkụ nke mbụ, Ebe anyị kọwara nkenke ihe Canary Deployments bụ. Anyị gosikwara otu esi eme ya site na iji akụrụngwa Kubernetes ọkọlọtọ.

Argo Rollouts

Argo Rollouts bụ onye Kubernetes onye na-ahụ maka mbubata. Ọ na-enye CRD (Nkọwa akụrụngwa omenala) maka Kubernetes. Ekele dịrị ya, anyị nwere ike iji ụlọ ọrụ ọhụrụ: Rollout, nke na-ejikwa blue-green na canary deployments na nhọrọ nhazi dị iche iche.

Onye njikwa Argo Rollouts nke akụrụngwa omenala na-eji Rollout, Na-enye ohere maka usoro mbugharị ndị ọzọ dị ka acha anụnụ anụnụ-acha ndụ ndụ na canary maka Kubernetes. Akụrụngwa Rollout na-enye ọrụ nhata Deployment, naanị ya na atụmatụ mbugharị ọzọ.
resource Deployments nwere usoro abụọ maka itinye: RollingUpdate и Recreate. Ọ bụ ezie na atumatu ndị a dabara adaba maka ọtụtụ ikpe, maka ibuga na sava n'ọtụtụ buru ibu, a na-eji atụmatụ ndị ọzọ eme ihe, dị ka acha anụnụ anụnụ-acha ndụ ndụ ma ọ bụ canary, nke na-adịghị na njikwa ntinye. Iji jiri usoro ndị a na Kubernetes, ndị ọrụ ga-ede edemede n'elu Nrụnye ha. Onye njikwa Argo Rollouts na-ekpughe atụmatụ ndị a dị ka ihe dị mfe, nkwuputa, nhazi nhazi.
https://argoproj.github.io/argo-rollouts

Enwekwara Argo CI, nke na-enye interface webụ dabara adaba maka iji Rollouts, anyị ga-elele nke ahụ n'isiokwu na-esote.

Ịwụnye Argo Rollouts

Akụkụ nkesa

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

Na turnip akụrụngwa anyị (lee n'okpuru) anyị agbakwunyela install.yaml dị ka i/k8s/argo-rollouts/install.yaml. Otu a GitlabCI ga-etinye ya n'ime ụyọkọ.

Akụkụ ndị ahịa (kubectl plugin)

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

Ngwa ihe atụ

Ọ bụ omume dị mma ịnwe ebe nchekwa dị iche iche maka koodu ngwa na akụrụngwa.

Ebe nchekwa maka ngwa

Kim Wuestkamp/k8s-deployment-emple-app

Nke a bụ Python+Flask API dị mfe nke na-eweghachi nzaghachi dị ka JSON. Anyị ga-eji GitlabCI wuo ngwugwu ahụ wee mee ka nsonaazụ ya gaa na ndekọ Gitlab. N'ime ndekọ ahụ anyị nwere ụdị ntọhapụ abụọ dị iche iche:

  • wuestkamp/k8s-ihe atụ-ngwa:v1
  • wuestkamp/k8s-ihe atụ-ngwa:v2

Naanị ihe dị iche n'etiti ha bụ faịlụ JSON weghachite. Anyị na-eji ngwa a iji anya nke uche hụ ngwa ngwa nke ụdị anyị na-akpakọrịta.

Ebe nchekwa akụrụngwa

N'ime ebe nchekwa a, anyị ga-eji GitlabCI maka ibuga Kubernetes, .gitlab-ci.yml dị ka nke a:

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

Iji mee ya n'onwe gị, ị ga-achọ ụyọkọ, ị nwere ike iji Gcloud:

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

Ị kwesịrị ndụdụ https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ma mepụta mgbanwe KUBECONFIG na GitlabCI, nke ga-enwe nhazi maka ịnweta kubectl na ụyọkọ gị.

ọ bụ Ị nwere ike ịgụ maka otu esi enweta nzere maka ụyọkọ (Gcloud).

Yaml akụrụngwa

N'ime ebe nchekwa akụrụngwa anyị nwere ọrụ:

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

na 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 na-arụ ọrụ otu ihe dị ka Deployment. Ọ bụrụ na anyị edoghị atụmatụ mmelite (dị ka canary ebe a) ọ ga-adị ka nke mbugharị mmelite nke ndabara.

Anyị na-akọwapụta nzọụkwụ abụọ na yaml maka mbugharị canary:

  1. 10% nke okporo ụzọ gaa canary (chere maka akwụkwọ ntuziaka OK)
  2. 50% okporo ụzọ gaa canary (chere nkeji 2 wee gaa n'ihu ruo 100%)

Na-eme mbugharị mbụ

Mgbe mbido mbụ ahụ gasịrị, akụrụngwa anyị ga-adị ka nke a:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Ma anyị na-enweta nzaghachi naanị site na ụdị ngwa mbụ:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Na-arụ ọrụ nke Canary

Kwụpụ 1: 10% okporo ụzọ

Iji malite mbunye canary, naanị anyị kwesịrị ịgbanwe ụdị onyonyo dịka anyị na-eme na mbugharị:

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

Anyị na-agbanye mgbanwe, yabụ Gitlab CI na-ebuga ma anyị na-ahụ mgbanwe ndị a:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Ugbu a ọ bụrụ na anyị enweta ọrụ:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Nnukwu! Anyị nọ n'etiti mbugharị canary anyị. Anyị nwere ike ịhụ ọganihu site n'ịgba ọsọ:

kubectl argo rollouts get rollout rollout-canary

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Kwụpụ 2: 50% okporo ụzọ:

Ugbu a, ka anyị gaa n'ihu na nzọụkwụ ọzọ: redirecting 50% nke okporo ụzọ. Anyị haziri nzọụkwụ a ka ejiri aka mee ya:

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

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Ngwa anyị weghachiri 50% nke nzaghachi sitere na ụdị ọhụrụ:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Na nlebanya mbugharị:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

magburu onwe ya.

Kwụpụ 3: 100% okporo ụzọ:

Anyị na-edozi ya ka nkeji 2 gachara, nzọụkwụ 50% ga-akwụsị na-akpaghị aka na 100% nzọụkwụ ga-amalite:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Na mmepụta ngwa:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Na nlebanya mbugharị:

Nkwanye Canary na Kubernetes #2: Argo Rollouts

Mbugharị Canary ezuola.

Ọmụmaatụ ndị ọzọ nwere Argo Rollouts

Enwere ihe atụ ndị ọzọ ebe a, dị ka otu esi edobe nlele gburugburu yana ntụnyere dabere na canary:

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

Vidiyo gbasara Argo Rollouts na Argo CI

Ana m akwado vidiyo a n'ezie, ọ na-egosi ka Argo Rollouts na Argo CI si arụkọ ọrụ ọnụ:

Nsonaazụ

Enwere m mmasị n'echiche nke iji CRD na-achịkwa mmepụta nke ụdị ntinye ma ọ bụ replicasets, redirect trafic, wdg. Soro ha na-arụkọ ọrụ na-aga nke ọma. Ọzọ, ọ ga-amasị m ịnwale njikọta na Argo CI.

Agbanyeghị, ọ dị ka enwere nnukwu njikọ nke Argo CI na Flux CI na-abịa, yabụ enwere m ike chere ruo mgbe ntọhapụ ọhụrụ ga-apụta: Argo Flux.

Ị nwere ahụmahụ ọ bụla na Argo Rollouts ma ọ bụ Argo CI?

Gụọkwa akụkọ ndị ọzọ na blọọgụ anyị:

isi: www.habr.com

Tinye a comment