Upamo, da berete prvi del, kjer smo na kratko razložili, kaj so Canary Deployments. Pokazali smo tudi, kako ga implementirati s standardnimi viri Kubernetes.
Argo Rollouts
Argo Rollouts je izvorni krmilnik za uvajanje Kubernetes. Zagotavlja CRD (definicija virov po meri) za Kubernetes. Zahvaljujoč temu lahko uporabimo novo entiteto: Rollout, ki upravlja modro-zelene in kanarčke uvedbe z različnimi konfiguracijskimi možnostmi.
Krmilnik Argo Rollouts, ki ga uporablja vir po meri Rollout, Omogoča dodatne strategije uvajanja, kot sta modro-zelena in kanarček za Kubernetes. Vir Rollout zagotavlja enakovredno funkcionalnost Deployment, samo z dodatnimi strategijami uvajanja.
vir Deployments ima dve strategiji za uvajanje: RollingUpdate и Recreate. Čeprav so te strategije primerne za večino primerov, se za uvajanje v strežnike v zelo velikem obsegu uporabljajo dodatne strategije, kot sta modro-zelena ali kanarčkova, ki nista na voljo v krmilniku razmestitve. Za uporabo teh strategij v Kubernetesu so morali uporabniki napisati skripte poleg svojih uvedb. Argo Rollouts Controller izpostavlja te strategije kot preproste, deklarativne, nastavljive parametre. https://argoproj.github.io/argo-rollouts
Obstaja tudi Argo CI, ki ponuja priročen spletni vmesnik za uporabo z Rollouts, to si bomo ogledali v naslednjem članku.
To je zelo preprost API Python+Flask, ki vrne odgovor kot JSON. Paket bomo zgradili z uporabo GitlabCI in rezultat potisnili v register Gitlab. V registru imamo dve različni različici izdaje:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Edina razlika med njima je vrnjena datoteka JSON. To aplikacijo uporabljamo za čim lažjo vizualizacijo, s katero različico komuniciramo.
Repozitorij infrastrukture
V tem repozitoriju bomo uporabili GitlabCI za uvajanje v Kubernetes, .gitlab-ci.yml je videti takole:
Rollout deluje enako kot Deployment. Če ne nastavimo strategije posodabljanja (kot tukaj Canary), se bo obnašala kot privzeta uvedba tekočega posodabljanja.
V yamlu definiramo dva koraka za uvajanje kanarčka:
10 % prometa do kanarčka (počakajte na ročno OK)
50 % prometa do kanarčka (počakajte 2 minuti in nato nadaljujte do 100 %)
Izvajanje začetne uvedbe
Po začetni uvedbi bodo naši viri izgledali takole:
In dobimo odgovor samo iz prve različice aplikacije:
Izvajanje Canary Deployment
1. korak: 10 % prometa
Za začetek uvajanja kanarčka moramo le spremeniti slikovno različico, kot običajno počnemo pri uvajanjih:
Ta videoposnetek res priporočam, saj prikazuje, kako Argo Rollouts in Argo CI delujeta skupaj:
Skupaj
Resnično mi je všeč zamisel o uporabi CRD-jev, ki upravljajo ustvarjanje dodatnih vrst uvajanj ali replikasetov, preusmerjajo promet itd. Delo z njimi poteka gladko. Nato bi rad preizkusil integracijo z Argo CI.
Vendar se zdi, da prihaja velika združitev Argo CI in Flux CI, zato bom morda počakal, da izide nova izdaja: Argo Flux.