Uvajanje Canaryja bomo izvedli ročno prek GitOps in ustvarjanja/spreminjanja glavnih virov Kubernetes. Ta članek je namenjen predvsem uvodu s tem, kako deluje uvajanje v Kubernetes Canary, saj obstajajo bolj učinkovite metode avtomatizacije, ki jih bomo obravnavali v naslednjih člankih.
Pri strategiji Canary se posodobitve najprej uporabijo samo za podmnožico uporabnikov. S spremljanjem, dnevniškimi podatki, ročnim testiranjem ali drugimi povratnimi kanali se izdaja testira, preden se izda vsem uporabnikom.
Uvajanje Kubernetes (tekoča posodobitev)
Privzeta strategija za uvajanje Kubernetes je tekoče posodabljanje, kjer se določeno število podov zažene z novimi različicami slik. Če so bili ustvarjeni brez težav, se podi s starimi različicami slik prekinejo in vzporedno se ustvarijo novi podi.
GitOps
V tem primeru uporabljamo GitOps, ker:
uporabo Gita kot edinega vira resnice
za gradnjo in uvajanje uporabljamo Git Operations (ukazi razen git tag/merge niso potrebni)
Primer
Vzemimo dobro prakso – imeti en repozitorij za aplikacijsko kodo in enega za infrastrukturo.
Repozitorij aplikacij
To je zelo preprost API Python+Flask, ki vrne odgovor kot JSON. Paket bomo zgradili prek 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 sprememba v vrnjeni datoteki JSON. To aplikacijo uporabljamo za čim lažjo vizualizacijo, s katero različico komuniciramo.
Repozitorij infrastrukture
V tej repi bomo prek GitlabCI uvedli v Kubernetes, .gitlab-ci.yml je naslednji:
Te spremembe potisnemo v repozitorij, iz katerega se bo začela uvedba (prek GitlabCI), in kot rezultat vidimo:
Naša storitev bo kazala na obe uvedbi, saj imata obe izbirnik aplikacij. Zaradi privzete randomizacije Kubernetes bi morali videti različne odgovore za ~10 % zahtev:
Trenutno stanje naše aplikacije (GitOps, vzeto iz Git kot en sam vir resnice) je prisotnost dveh uvedb z aktivnimi replikami, po ena za vsako različico.
~10 % uporabnikov se seznani z novo različico in jo nenamerno preizkusi. Zdaj je čas, da preverite napake v dnevnikih in podatkih spremljanja, da poiščete težave.
2. korak: izdajte novo različico za vse uporabnike
Odločili smo se, da je šlo vse dobro in zdaj moramo novo različico uvesti za vse uporabnike. Da bi to naredili, preprosto posodobimo deploy.yaml namestitev nove različice slike in število replik enako 10. In deploy-canary.yaml nastavimo število replik nazaj na 0. Po uvedbi bo rezultat naslednji:
Če povzamemo:
Zame ročno izvajanje uvajanja na ta način pomaga razumeti, kako preprosto ga je mogoče konfigurirati z uporabo k8s. Ker Kubernetes omogoča posodobitev vsega prek API-ja, je te korake mogoče avtomatizirati s skripti.
Druga stvar, ki jo je treba implementirati, je vstopna točka testerja (LoadBalancer ali prek Ingressa), prek katere je mogoče dostopati samo do nove različice. Uporablja se lahko za ročno brskanje.
V prihodnjih člankih bomo preverili druge avtomatizirane rešitve, ki izvajajo večino tega, kar smo naredili.