Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Kita bakal nggunakake pengontrol penyebaran Argo Rollouts asli k8s lan GitlabCI kanggo mbukak penyebaran Canary menyang Kubernetes

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Artikel ing seri iki

Penyebaran Canary

Muga-muga sampeyan maca pérangan pisanan, ngendi kita sedhela nerangake apa Canary Deployments. Kita uga nuduhake carane ngleksanakake nggunakake sumber daya Kubernetes standar.

Argo Rollouts

Argo Rollouts minangka pengontrol penyebaran asli Kubernetes. Iki nyedhiyakake CRD (Definisi Sumber Daya Khusus) kanggo Kubernetes. Thanks kanggo iki, kita bisa nggunakake entitas anyar: Rollout, sing ngatur penyebaran biru-ijo lan kenari kanthi macem-macem opsi konfigurasi.

Argo Rollouts controller digunakake dening sumber adat Rollout, Ngidini strategi penyebaran tambahan kayata biru-ijo lan kenari kanggo Kubernetes. sumber daya Rollout nyedhiyakake fungsi sing padha Deployment, mung karo strategi penyebaran tambahan.
sumber Deployments duwe rong strategi kanggo penyebaran: RollingUpdate и Recreate. Senajan Sastranegara iki cocok kanggo paling kasus, kanggo penyebaran prajurit ing ukuran gedhe banget, Sastranegara tambahan digunakake, kayata biru-ijo utawa kenari, kang ora kasedhiya ing controller Deployment. Kanggo nggunakake strategi kasebut ing Kubernetes, pangguna kudu nulis skrip ing ndhuwur Deployment. Argo Rollouts Controller nyedhiyakake strategi kasebut minangka paramèter sing prasaja, deklaratif, lan bisa dikonfigurasi.
https://argoproj.github.io/argo-rollouts

Ana uga Argo CI, sing nyedhiyakake antarmuka web sing trep kanggo nggunakake Rollouts, kita bakal nliti ing artikel sabanjure.

Nginstal Argo Rollouts

Sisih Server

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

Ing turnip infrastruktur kita (ndeleng ngisor) kita wis nambah install.yaml minangka i/k8s/argo-rollouts/install.yaml. Kanthi cara iki GitlabCI bakal nginstal menyang kluster.

Sisih klien (plugin kubectl)

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

Tuladha Aplikasi

Praktek sing apik kanggo duwe repositori kapisah kanggo kode lan infrastruktur aplikasi.

Repositori kanggo aplikasi

Kim Wuestkamp/k8s-deployment-example-app

Iki Python + Flask API banget prasaja sing ngasilake respon minangka JSON. Kita bakal mbangun paket nggunakake GitlabCI lan push asil menyang Gitlab Registry. Ing registri kita duwe rong versi rilis sing beda:

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

Bentenipun mung ing antarane file JSON bali. Kita nggunakake aplikasi iki kanggo nggambarake kanthi gampang versi apa sing kita sesambungake.

Infrastruktur gudang

Ing repositori iki, kita bakal nggunakake GitlabCI kanggo penyebaran menyang Kubernetes, .gitlab-ci.yml katon kaya iki:

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

Kanggo mbukak dhewe, sampeyan butuh kluster, sampeyan bisa nggunakake Gcloud:

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

Sampeyan kudu garpu https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure lan nggawe variabel KUBECONFIG ing GitlabCI, sing bakal ngemot konfigurasi kanggo akses kubectl menyang kluster sampeyan.

iku Sampeyan bisa maca babagan carane entuk kredensial kanggo kluster (Gcloud).

Infrastruktur Yaml

Ing repositori infrastruktur kita duwe layanan:

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

lan 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 kerjane padha karo Deployment. Yen kita ora nyetel strategi nganyari (kaya kenari ing kene) bakal tumindak kaya Deployment rolling-update standar.

Kita nemtokake rong langkah ing yaml kanggo penyebaran kenari:

  1. 10% lalu lintas menyang kenari (ngenteni manual OK)
  2. 50% lalu lintas menyang kenari (ngenteni 2 menit banjur terus nganti 100%)

Nindakake penyebaran awal

Sawise panyebaran awal, sumber daya kita bakal katon kaya iki:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Lan kita entuk respon mung saka versi pisanan aplikasi:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Nindakake Penyebaran Canary

Langkah 1: 10% lalu lintas

Kanggo miwiti panyebaran kenari, kita mung kudu ngganti versi gambar kaya biasane karo 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
...

Lan kita push owah-owahan, supaya Gitlab CI ora nyebar lan kita ndeleng owah-owahan:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Saiki yen kita ngakses layanan kasebut:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

apik tenan! Kita ana ing tengah penyebaran kenari. Kita bisa ndeleng kemajuan kanthi mlaku:

kubectl argo rollouts get rollout rollout-canary

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Langkah 2: 50% lalu lintas:

Saiki ayo pindhah menyang langkah sabanjure: pangalihan 50% lalu lintas. Kita ngatur langkah iki supaya bisa ditindakake kanthi manual:

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

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Lan aplikasi kita ngasilake 50% tanggapan saka versi anyar:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Lan review rollout:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Apik banget.

Langkah 3: 100% lalu lintas:

Kita nyetel supaya sawise 2 menit langkah 50% rampung kanthi otomatis lan langkah 100% diwiwiti:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Lan output aplikasi:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Lan review rollout:

Penyebaran Canary ing Kubernetes # 2: Argo Rollouts

Penyebaran Canary wis rampung.

Conto liyane karo Argo Rollouts

Ana conto liyane ing kene, kayata carane nyiyapake pratinjau lingkungan lan mbandhingake adhedhasar kenari:

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

Video babagan Argo Rollouts lan Argo CI

Aku nyaranake video iki, nuduhake carane Argo Rollouts lan Argo CI bisa bebarengan:

Asile

Aku seneng banget karo ide nggunakake CRD sing ngatur nggawe jinis penyebaran utawa replika tambahan, lalu lintas pangalihan, lsp. Makarya karo wong-wong mau dadi lancar. Sabanjure aku pengin nyoba integrasi karo Argo CI.

Nanging, katon ana penggabungan gedhe saka Argo CI lan Flux CI, mula aku bisa ngenteni nganti rilis anyar metu: Argo Flux.

Apa sampeyan duwe pengalaman karo Argo Rollouts utawa Argo CI?

Uga maca artikel liyane ing blog kita:

Source: www.habr.com

Add a comment