Canary Deployment gamit ang Jenkins-X Istio Flagger
Atong ipahigayon ang Canary deployment sa mano-mano pinaagi sa GitOps ug paghimo/pag-usab sa nag-unang Kubernetes resources. Kini nga artikulo gituyo alang sa pasiuna kung giunsa ang pag-deploy sa Kubernetes Canary, tungod kay adunay mas epektibo nga mga pamaagi sa automation, nga atong hisgotan sa mosunod nga mga artikulo.
Uban sa estratehiya sa Canary, ang mga pag-update una nga gigamit sa usa lamang ka subset sa mga tiggamit. Pinaagi sa pagmonitor, log data, manual testing, o uban pang feedback channels, ang pagpagawas gisulayan sa dili pa kini ipagawas sa tanang tiggamit.
Kubernetes Deployment (rolling update)
Ang default nga estratehiya alang sa Kubernetes Deployment mao ang rolling-update, diin ang usa ka piho nga gidaghanon sa mga pod gilusad uban ang bag-ong mga bersyon sa mga hulagway. Kung gibuhat kini nga walaβy mga problema, ang mga pod nga adunay daan nga bersyon sa mga imahe gitapos, ug ang mga bag-ong pod gihimo nga managsama.
GitOps
Gigamit namo ang GitOps niini nga pananglitan tungod kay kami:
naggamit sa Git isip usa ka tinubdan sa kamatuoran
gigamit namo ang Git Operations alang sa pagtukod ug pag-deploy (walay mga sugo gawas sa git tag/merge ang gikinahanglan)
Pananglitan:
Atong buhaton ang usa ka maayong praktis - nga adunay usa ka repository alang sa code sa aplikasyon ug usa alang sa imprastraktura.
Repository sa aplikasyon
Kini usa ka yano nga Python + Flask API nga nagbalik usa ka tubag ingon JSON. Atong tukuron ang package pinaagi sa GitlabCI ug iduso ang resulta ngadto 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 pagbag-o sa gibalik nga JSON file. Gigamit namon kini nga aplikasyon aron mahanduraw nga dali kutob sa mahimo kung unsang bersyon ang among gipakigsulti.
Repositori sa imprastraktura
Niini nga singkamas atong i-deploy pinaagi sa GitlabCI ngadto sa Kubernetes, .gitlab-ci.yml ingon niini:
Timan-i nga ang app-deploy wala pa'y mga replika nga gihubit.
Pagbuhat sa inisyal nga pag-deploy
Aron masugdan ang inisyal nga pag-deploy, mahimo nimong sugdan ang GitlabCI pipeline nga mano-mano sa master branch. Human niadto kubectl kinahanglan nga output sa mosunod:
Atong makita app deployment nga adunay 10 ka replika ug app-canary nga adunay 0. Adunay usab LoadBalancer diin kita maka-access pinaagi sa curl pinaagi sa External IP:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Nakita namon nga ang among aplikasyon sa pagsulay nagbalik lamang sa "v1".
Pagpatuman sa Canary deployment
Lakang 1: buhian ang usa ka bag-ong bersyon alang sa pipila nga mga tiggamit
Gibutang namon ang gidaghanon sa mga replika sa 1 sa deploy-canary.yaml file ug ang bag-ong bersyon nga imahe:
Giduso namo kini nga mga pagbag-o sa repository diin magsugod ang pag-deploy (pinaagi sa GitlabCI) ug tan-awa ang resulta:
Ang among Serbisyo magpunting sa duha nga pag-deploy, tungod kay ang duha adunay tigpili sa app. Tungod sa default nga randomization sa Kubernetes, kinahanglan namong makita ang lainlaing mga tubag alang sa ~10% sa mga hangyo:
Ang kasamtangan nga kahimtang sa among aplikasyon (GitOps, gikuha gikan sa Git isip Usa ka Tinubdan sa Kamatuoran) mao ang presensya sa duha ka deployment nga adunay aktibong mga replika, usa alang sa matag bersyon.
~ 10% sa mga tiggamit nahimong pamilyar sa usa ka bag-ong bersyon ug wala tuyoa pagsulay niini. Karon na ang panahon sa pagsusi sa mga kasaypanan sa mga log ug pag-monitor sa datos aron makit-an ang mga problema.
Lakang 2: Ipagawas ang bag-ong bersyon sa tanang tiggamit
Nakahukom kami nga maayo ang tanan ug karon kinahanglan namon nga i-roll out ang bag-ong bersyon sa tanan nga tiggamit. Aron mahimo kini, nag-update lang kami deploy.yaml pagbutang og bag-ong bersyon sa hulagway ug ang gidaghanon sa mga replika nga katumbas sa 10. Sa deploy-canary.yaml atong gibutang ang gidaghanon sa mga replika balik sa 0. Human sa deployment, ang resulta mao ang mosunod:
Sa pag-summarize
Alang kanako, ang pagpadagan sa pag-deploy nga mano-mano niining paagiha makatabang aron masabtan kung unsa kadali kini ma-configure gamit ang k8s. Tungod kay gitugotan ka sa Kubernetes nga i-update ang tanan pinaagi sa usa ka API, kini nga mga lakang mahimong awtomatiko pinaagi sa mga script.
Ang laing butang nga kinahanglan ipatuman mao ang usa ka tester entry point (LoadBalancer o pinaagi sa Ingress) diin ang bag-ong bersyon lamang ang ma-access. Mahimo kini gamiton alang sa manual nga pag-browse.
Sa umaabot nga mga artikulo, among susihon ang ubang mga awtomatiko nga solusyon nga nagpatuman sa kadaghanan sa among nahimo.