Wy sille de Kanaryske ynset manuell útfiere fia GitOps en de wichtichste Kubernetes-boarnen oanmeitsje / wizigje. Dit artikel is benammen bedoeld foar ynlieding mei hoe't ynset wurket yn Kubernetes Canary, om't d'r effektiver metoaden binne foar automatisearring, dy't wy sille beskôgje yn 'e folgjende artikels.
Mei de Kanaryske strategy wurde updates earst tapast op mar in subset fan brûkers. Troch tafersjoch, loggegevens, manuele testen, of oare feedbackkanalen, wurdt de frijlitting hifke foardat it wurdt frijjûn oan alle brûkers.
Kubernetes Deployment (rôljende update)
De standertstrategy foar Kubernetes Deployment is rolling-update, wêrby't in bepaald oantal pods wurde lansearre mei nije ferzjes fan 'e ôfbyldings. As se sûnder problemen binne makke, wurde pods mei âlde ferzjes fan ôfbyldings beëinige, en nije pods wurde parallel oanmakke.
GitOps
Wy brûke GitOps yn dit foarbyld om't wy:
Git brûke as ienige boarne fan wierheid
wy brûke Git Operations foar bouwen en ynset (gjin oare kommando's dan git tag / merge binne nedich)
Foarbyld:
Litte wy in goede praktyk nimme - ien repository hawwe foar applikaasjekoade en ien foar ynfrastruktuer.
Applikaasje repository
Dit is in heul ienfâldige Python + Flask API dy't in antwurd as JSON weromjout. Wy sille it pakket bouwe fia GitlabCI en triuwe it resultaat nei de Gitlab Registry. Yn it register hawwe wy twa ferskillende release ferzjes:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
It ienige ferskil tusken har is de feroaring yn it weromjûne JSON-bestân. Wy brûke dizze applikaasje om sa maklik mooglik te visualisearjen mei hokker ferzje wy kommunisearje.
Ynfrastruktuer repository
Yn dizze raap sille wy fia GitlabCI ynsette nei Kubernetes, .gitlab-ci.yml sjocht dit sa:
Wy drukke dizze wizigingen nei it repository wêrfan de ynset sil begjinne (fia GitlabCI) en sjogge as gefolch:
Us tsjinst sil ferwize nei beide ynset, om't beide de app-selektor hawwe. Fanwegen de standert randomisaasje fan Kubernetes moatte wy ferskate antwurden sjen foar ~10% fan oanfragen:
De hjoeddeistige tastân fan ús applikaasje (GitOps, nommen út Git as in Single Source Of Truth) is de oanwêzigens fan twa ynset mei aktive replika's, ien foar elke ferzje.
~ 10% fan brûkers wurde bekend mei in nije ferzje en test it ûnbedoeld. No is it tiid om te kontrolearjen op flaters yn 'e logs en tafersjochgegevens om problemen te finen.
Stap 2: Release de nije ferzje foar alle brûkers
Wy besletten dat alles goed gie en no moatte wy de nije ferzje útrolje foar alle brûkers. Om dit te dwaan, aktualisearje wy gewoan deploy.yaml it ynstallearjen fan in nije ferzje fan de ôfbylding en it oantal replika's gelyk oan 10. In deploy-canary.yaml wy sette it oantal replika's werom op 0. Nei ynset sil it resultaat as folgjend wêze:
To summarize
Foar my helpt it útfieren fan de ynset op dizze manier om te begripen hoe maklik it kin wurde konfigureare mei k8s. Sûnt Kubernetes kinne jo alles bywurkje fia in API, dizze stappen kinne wurde automatisearre troch skripts.
In oar ding dat moat wurde ymplementearre is in tester yngongspunt (LoadBalancer of fia Ingress) troch dêr't allinnich de nije ferzje kin wurde tagong. It kin brûkt wurde foar hânmjittich blêdzjen.
Yn takomstige artikels sille wy oare automatisearre oplossingen kontrolearje dy't it measte fan wat wy hawwe dien ymplementearje.