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.
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.
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:
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:
10% tina lalu lintas ka kenari (antosan manual OK)
Lalu lintas 50% ka kenari (antosan 2 menit teras teraskeun ka 100%)
Ngalaksanakeun deployment awal
Saatos deployment awal, sumberdaya urang bakal kasampak kawas kieu:
Sareng kami nampi réspon ngan ukur tina versi aplikasi anu munggaran:
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:
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?