Canary Deployment gamit ang Jenkins-X Istio Flagger
Pag-deploy ng Canary
Sana basahin niyo unang parte, kung saan maikli naming ipinaliwanag kung ano ang Canary Deployments. Ipinakita rin namin kung paano ito ipatupad gamit ang mga karaniwang mapagkukunan ng Kubernetes.
Argo Rollouts
Ang Argo Rollouts ay isang Kubernetes native deployment controller. Nagbibigay ito ng CRD (Custom Resource Definition) para sa Kubernetes. Salamat dito, maaari tayong gumamit ng bagong entity: Rollout, na namamahala sa mga blue-green at canary deployment na may iba't ibang opsyon sa configuration.
Argo Rollouts controller na ginagamit ng isang custom na mapagkukunan Rollout, Nagbibigay-daan para sa karagdagang mga diskarte sa pag-deploy tulad ng asul-berde at canary para sa Kubernetes. mapagkukunan Rollout nagbibigay ng katumbas ng functionality Deployment, na may mga karagdagang diskarte sa pag-deploy lamang.
mapagkukunan Deployments ay may dalawang estratehiya para sa pag-deploy: RollingUpdate ΠΈ Recreate. Bagama't angkop ang mga diskarteng ito para sa karamihan ng mga kaso, para sa pag-deploy sa mga server sa napakalaking sukat, ginagamit ang mga karagdagang diskarte, gaya ng asul-berde o canary, na hindi available sa Deployment controller. Para magamit ang mga diskarteng ito sa Kubernetes, kinailangan ng mga user na magsulat ng mga script sa ibabaw ng kanilang Mga Deployment. Inilalantad ng Argo Rollouts Controller ang mga diskarte na ito bilang simple, declarative, at configurable na mga parameter. https://argoproj.github.io/argo-rollouts
Mayroon ding Argo CI, na nagbibigay ng maginhawang web interface para magamit sa Rollouts, titingnan natin iyon sa susunod na artikulo.
Sa aming infrastructure turnip (tingnan sa ibaba) naidagdag na namin ang install.yaml bilang i/k8s/argo-rollouts/install.yaml. Sa ganitong paraan, mai-install ito ng GitlabCI sa cluster.
Ito ay isang napakasimpleng Python+Flask API na nagbabalik ng tugon bilang JSON. Bubuo kami ng package gamit ang GitlabCI at itulak ang resulta sa Gitlab Registry. Sa registry mayroon kaming dalawang magkaibang bersyon ng paglabas:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Ang tanging pagkakaiba sa pagitan nila ay ang JSON file na ibinalik. Ginagamit namin ang application na ito upang mailarawan nang madali hangga't maaari kung saang bersyon kami nakikipag-usap.
Imbakan ng imprastraktura
Sa repositoryong ito gagamitin namin ang GitlabCI para sa pag-deploy sa Kubernetes, ganito ang hitsura ng .gitlab-ci.yml:
Rollout gumagana katulad ng Deployment. Kung hindi kami magtatakda ng diskarte sa pag-update (tulad ng canary dito) ito ay gagana tulad ng default na rolling-update Deployment.
Tinukoy namin ang dalawang hakbang sa yaml para sa pag-deploy ng canary:
10% ng trapiko sa canary (hintayin ang manual OK)
50% trapiko sa canary (maghintay ng 2 minuto pagkatapos ay magpatuloy sa 100%)
Nagsasagawa ng paunang pag-deploy
Pagkatapos ng paunang deployment, magiging ganito ang hitsura ng aming mga mapagkukunan:
At nakakakuha lamang kami ng tugon mula sa unang bersyon ng application:
Nagsasagawa ng Canary Deployment
Hakbang 1: 10% trapiko
Upang magsimula ng pag-deploy ng canary, kailangan lang naming baguhin ang bersyon ng imahe gaya ng karaniwan naming ginagawa sa mga deployment:
Talagang inirerekomenda ko ang video na ito, ipinapakita nito kung paano nagtutulungan ang Argo Rollouts at Argo CI:
Kabuuan
Talagang gusto ko ang ideya ng paggamit ng mga CRD na namamahala sa paglikha ng mga karagdagang uri ng deployment o replicase, pag-redirect ng trapiko, atbp. Ang pakikipagtulungan sa kanila ay maayos. Susunod na gusto kong subukan ang pagsasama sa Argo CI.
Gayunpaman, mukhang may malaking merger ng Argo CI at Flux CI na paparating, kaya maaaring maghintay ako hanggang sa lumabas ang bagong release: Argo Flux.
Nagkaroon ka na ba ng anumang karanasan sa Argo Rollouts o Argo CI?
Basahin din ang iba pang mga artikulo sa aming blog: