Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Kami bakal nganggo pengontrol penyebaran Argo Rollouts asli k8s sareng GitlabCI pikeun ngajalankeun panyebaran Canary ka Kubernetes

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Artikel dina séri ieu

Panyebaran Kanaria

Kami ngarepkeun anjeun maca bagian kahiji, dimana urang sakeudeung ngajelaskeun naon Canary Deployments. Kami ogé nunjukkeun kumaha nerapkeunana nganggo sumber daya Kubernetes standar.

Argo Rollouts

Argo Rollouts mangrupikeun pengendali penyebaran asli Kubernetes. Eta nyadiakeun CRD (Custom Resource Definition) pikeun Kubernetes. Hatur nuhun kana éta, urang tiasa nganggo éntitas énggal: Rollout, nu ngatur deployments biru-héjo jeung kenari kalawan sagala rupa pilihan konfigurasi.

Argo Rollouts controller dipaké ku sumberdaya custom Rollout, Ngidinan pikeun strategi panyebaran tambahan sapertos biru-héjo sareng kenari pikeun Kubernetes. Sumberdaya Rollout nyadiakeun fungsionalitas sarimbag Deployment, ngan kalawan strategi deployment tambahan.
sumber Deployments boga dua strategi pikeun deployment: RollingUpdate и Recreate. Sanajan strategi ieu cocog pikeun kalolobaan kasus, pikeun deployment ka server dina skala anu kacida gedéna, dipaké strategi tambahan, kayaning biru-héjo atawa kenari, nu teu sadia dina controller deployment. Pikeun ngagunakeun strategi ieu dina Kubernetes, pangguna kedah nyerat skrip di luhur Deployments na. Argo Rollouts Controller ngungkabkeun strategi ieu salaku parameter anu sederhana, déklaratif, tiasa dikonfigurasi.
https://argoproj.github.io/argo-rollouts

Aya ogé Argo CI anu nyayogikeun antarmuka wéb anu ramah-pamaké pikeun dianggo sareng Rollouts, kami bakal ningali éta dina tulisan salajengna.

Masang Argo Rollouts

Sisi server

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

Dina turnip infrastruktur urang (tempo di handap) kami geus ditambahkeun install.yaml sakumaha i/k8s/argo-rollouts/install.yaml. Ku cara ieu GitlabCI bakal masang kana kluster.

Sisi klien (plugin kubectl)

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

Contoh Aplikasi

Praktek anu saé pikeun gaduh repositori anu misah pikeun kode sareng infrastruktur aplikasi.

Repository pikeun aplikasi

Kim Wuestkamp / k8s-deployment-conto-aplikasi

Ieu mangrupikeun Python + Flask API anu saderhana pisan anu ngabalikeun réspon salaku JSON. Kami bakal ngawangun pakét nganggo GitlabCI sareng nyorong hasilna ka Gitlab Registry. Dina pendaptaran kami gaduh dua versi pelepasan anu béda:

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

Hiji-hijina bédana antara aranjeunna nyaéta file JSON anu dipulangkeun. Kami nganggo aplikasi ieu pikeun ngabayangkeun sabisa-bisa versi anu kami komunikasikeun.

Infrastruktur gudang

Dina gudang ieu kami bakal make GitlabCI pikeun deployment mun Kubernetes, .gitlab-ci.yml Sigana mah kieu:

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

Pikeun ngajalankeun éta sorangan anjeun peryogi klaster, anjeun tiasa nganggo Gcloud:

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

Anjeun kedah garpu https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure jeung nyieun variabel KUBECONFIG di GitlabCI, anu bakal ngandung config pikeun aksés kubectl ka klaster Anjeun.

Ieu téh Anjeun tiasa maca ngeunaan kumaha carana kéngingkeun kredensial pikeun klaster (Gcloud).

Infrastruktur Yaml

Di jero gudang infrastruktur kami ngagaduhan jasa:

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

sareng 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 jalanna sarua jeung Deployment. Upami urang henteu nyetél strategi pembaruan (sapertos kanari di dieu) éta bakal kalakuanana sapertos Deployment rolling-update standar.

Kami netepkeun dua léngkah dina yaml pikeun panyebaran kanari:

  1. 10% tina lalu lintas ka kenari (antosan manual OK)
  2. Lalu lintas 50% ka kenari (antosan 2 menit teras teraskeun ka 100%)

Ngalaksanakeun deployment awal

Saatos deployment awal, sumberdaya urang bakal kasampak kawas kieu:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Sareng kami nampi réspon ngan ukur tina versi aplikasi anu munggaran:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Ngalaksanakeun Deployment Kanaria

Lengkah 1: 10% lalulintas

Pikeun ngamimitian panyebaran kanaria, urang ngan ukur kedah ngarobih versi gambar sapertos anu biasana urang lakukeun sareng panyebaran:

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

Sareng urang nyorong parobihan, janten Gitlab CI nyebarkeun sareng urang ningali parobihan:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Ayeuna upami urang ngaksés jasa:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Hebat! Kami di tengah deployment kenari urang. Urang tiasa ningali kamajuan ku ngajalankeun:

kubectl argo rollouts get rollout rollout-canary

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Lengkah 2: 50% lalulintas:

Ayeuna hayu urang ngaléngkah ka léngkah salajengna: alihan 50% tina lalu lintas. Kami ngonpigurasikeun léngkah ieu pikeun dijalankeun sacara manual:

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

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Sareng aplikasi kami ngabalikeun 50% réspon tina vérsi énggal:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Jeung ulasan rollout:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Endah.

Lengkah 3: 100% lalulintas:

Kami nyetél éta supados saatos 2 menit léngkah 50% otomatis réngsé sareng léngkah 100% dimimitian:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Sareng kaluaran aplikasi:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

Jeung ulasan rollout:

Panyebaran Kanaria di Kubernetes # 2: Argo Rollouts

deployment Kanaria geus réngsé.

Langkung conto sareng Argo Rollouts

Aya deui conto di dieu, sapertos kumaha nyetél sawangan lingkungan sareng ngabandingkeun dumasar kana kanaria:

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

Video ngeunaan Argo Rollouts sareng Argo CI

Kuring nyarankeun pisan pidéo ieu, éta nunjukkeun kumaha Argo Rollouts sareng Argo CI gawé bareng:

hasil

Abdi resep pisan ideu ngagunakeun CRD anu ngatur nyiptakeun jinis panyebaran atanapi réplikat tambahan, alihan lalu lintas, jsb. Gawé sareng aranjeunna lancar. Salajengna Abdi hoyong nguji integrasi jeung Argo CI.

Nanging, sigana aya merger ageung Argo CI sareng Flux CI anu bakal datang, janten kuring tiasa ngantosan dugi ka rilis énggal kaluar: Argo Flux.

Dupi anjeun ngagaduhan pangalaman sareng Argo Rollouts atanapi Argo CI?

Baca ogé artikel séjén dina blog urang:

sumber: www.habr.com

Tambahkeun komentar