Canary Deployment gamit ang Jenkins-X Istio Flagger
Pag-deploy sa Canary
Kami nanghinaut nga imong basahon unang bahin, diin among gipatin-aw sa daklit kung unsa ang Canary Deployments. Gipakita usab namo kung giunsa kini ipatuman gamit ang standard nga mga kapanguhaan sa Kubernetes.
Argo Rollouts
Ang Argo Rollouts usa ka Kubernetes native deployment controller. Naghatag kini og CRD (Custom Resource Definition) para sa Kubernetes. Salamat niini, makagamit kami og bag-ong entidad: Rollout, nga nagdumala sa blue-green ug canary deployment nga adunay lain-laing mga opsyon sa configuration.
Argo Rollouts controller nga gigamit sa usa ka custom nga kapanguhaan Rollout, Nagtugot alang sa dugang nga mga estratehiya sa pag-deploy sama sa blue-green ug canary para sa Kubernetes. Kapanguhaan Rollout naghatag ug functionality katumbas Deployment, nga adunay dugang nga mga estratehiya sa pagdeploy.
kapanguhaan Deployments adunay duha ka estratehiya sa pag-deploy: RollingUpdate ΠΈ Recreate. Bisan kung kini nga mga estratehiya angay alang sa kadaghanan nga mga kaso, alang sa pag-deploy sa mga server sa usa ka dako nga sukod, gigamit ang dugang nga mga estratehiya, sama sa asul-berde o canary, nga wala magamit sa controller sa Deployment. Aron magamit kini nga mga estratehiya sa Kubernetes, ang mga tiggamit kinahanglan nga magsulat og mga script sa ibabaw sa ilang mga Deployment. Ang Argo Rollouts Controller nagbutyag niini nga mga estratehiya isip yano, deklaratibo, ma-configure nga mga parameter. https://argoproj.github.io/argo-rollouts
Anaa usab ang Argo CI, nga naghatag usa ka kombenyente nga interface sa web para magamit sa Rollouts, atong tan-awon kana sa sunod nga artikulo.
Sa among imprastraktura nga turnip (tan-awa sa ubos) gidugang na namo ang install.yaml isip i/k8s/argo-rollouts/install.yaml. Niining paagiha i-install kini sa GitlabCI sa cluster.
Kini usa ka yano nga Python + Flask API nga nagbalik usa ka tubag ingon JSON. Atong tukuron ang package gamit ang GitlabCI ug iduso ang resulta sa Gitlab Registry. Sa rehistro kami adunay duha ka lainlaing bersyon sa pagpagawas:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Ang bugtong kalainan tali kanila mao ang JSON file nga gibalik. Gigamit namon kini nga aplikasyon aron mahanduraw nga dali kutob sa mahimo kung unsang bersyon ang among gipakigsulti.
Repositori sa imprastraktura
Niini nga repository atong gamiton ang GitlabCI alang sa pag-deploy sa Kubernetes, .gitlab-ci.yml ang hitsura niini:
Rollout nagtrabaho sama sa Deployment. Kung dili kami magbutang usa ka estratehiya sa pag-update (sama sa canary dinhi) kini molihok sama sa default nga rolling-update Deployment.
Atong gihubit ang duha ka mga lakang sa yaml alang sa pag-deploy sa canary:
10% sa trapiko sa canary (paghulat alang sa manual OK)
50% nga trapiko sa canary (paghulat 2 minuto unya magpadayon sa 100%)
Pagbuhat sa inisyal nga pag-deploy
Pagkahuman sa inisyal nga pag-deploy, ang among mga kapanguhaan mahimong ingon niini:
Ug nakakuha kami usa ka tubag gikan lamang sa una nga bersyon sa aplikasyon:
Pagbuhat sa Canary Deployment
Lakang 1: 10% nga trapiko
Sa pagsugod sa usa ka canary deployment, kinahanglan lang nga usbon ang bersyon sa imahe sama sa naandan namong buhaton sa mga deployment:
Girekomenda gyud nako kini nga video, gipakita niini kung giunsa ang pagtrabaho sa Argo Rollouts ug Argo CI:
Ang resulta
Ganahan kaayo ko sa ideya sa paggamit sa mga CRD nga nagdumala sa paghimo og dugang nga mga matang sa pag-deploy o mga replicase, pag-redirect sa trapiko, ug uban pa. Ang pagtrabaho uban kanila hapsay. Sunod gusto nako nga sulayan ang panagsama sa Argo CI.
Bisan pa, adunay usa ka dako nga panagsama sa Argo CI ug Flux CI nga moabut, aron ako maghulat hangtod ang bag-ong pagpagawas mogawas: Argo Flux.