Canary Deployment koristeći Jenkins-X Istio Flagger
Izvešćemo Canary implementaciju ručno preko GitOps-a i kreiramo/modifikujemo glavne Kubernetes resurse. Ovaj članak je prvenstveno namijenjen uvodu kako implementacija funkcioniše u Kubernetes Canary, budući da postoje efikasnije metode automatizacije, koje ćemo razmotriti u narednim člancima.
Sa Canary strategijom, ažuriranja se prvo primjenjuju samo na podskup korisnika. Kroz praćenje, podatke dnevnika, ručno testiranje ili druge kanale povratnih informacija, izdanje se testira prije nego što bude pušteno svim korisnicima.
Kubernetes implementacija (ažuriranje)
Zadana strategija za Kubernetes Deployment je stalno ažuriranje, gdje se određen broj podova pokreće s novim verzijama slika. Ako su kreirani bez problema, podovi sa starim verzijama slika se prekidaju, a novi podovi se kreiraju paralelno.
gitops
U ovom primjeru koristimo GitOps jer:
koristeći Git kao jedini izvor istine
koristimo Git Operations za izgradnju i implementaciju (nisu potrebne nikakve naredbe osim git tag/merge)
Primjer:
Uzmimo dobru praksu - da imamo jedno spremište za kod aplikacije i jedno za infrastrukturu.
Repozitorijum aplikacija
Ovo je vrlo jednostavan Python+Flask API koji vraća odgovor kao JSON. Napravit ćemo paket preko GitlabCI-a i gurnuti rezultat u Gitlab Registry. U registru imamo dvije različite verzije izdanja:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Jedina razlika između njih je promjena u vraćenom JSON fajlu. Koristimo ovu aplikaciju kako bismo što lakše vizualizirali s kojom verzijom komuniciramo.
Infrastrukturno spremište
U ovoj repi ćemo rasporediti preko GitlabCI na Kubernetes, .gitlab-ci.yml je sledeći:
Ove promjene guramo u spremište iz kojeg će početi implementacija (preko GitlabCI-a) i vidimo kao rezultat:
Naša usluga će ukazati na obje implementacije, budući da obje imaju selektor aplikacija. Zbog Kubernetes-ove zadane randomizacije, trebali bismo vidjeti različite odgovore za ~10% zahtjeva:
Trenutno stanje naše aplikacije (GitOps, preuzeto iz Gita kao jedinstvenog izvora istine) je prisustvo dvije implementacije sa aktivnim replikama, po jedna za svaku verziju.
~10% korisnika upozna se s novom verzijom i nenamjerno je testira. Sada je vrijeme da provjerite da li postoje greške u evidenciji i podacima praćenja kako biste pronašli probleme.
Korak 2: Objavite novu verziju za sve korisnike
Odlučili smo da je sve prošlo kako treba i sada trebamo izbaciti novu verziju svim korisnicima. Da bismo to učinili, jednostavno ažuriramo deploy.yaml instaliranje nove verzije slike i broj replika jednak 10. In deploy-canary.yaml vraćamo broj replika na 0. Nakon implementacije, rezultat će biti sljedeći:
Sumirati
Za mene, pokretanje implementacije ručno na ovaj način pomaže da shvatim koliko se lako može konfigurirati pomoću k8s-a. Budući da vam Kubernetes omogućava ažuriranje svega putem API-ja, ovi koraci se mogu automatizirati putem skripti.
Još jedna stvar koju treba implementirati je ulazna tačka testera (LoadBalancer ili preko Ingress-a) preko koje se može pristupiti samo novoj verziji. Može se koristiti za ručno pretraživanje.
U budućim člancima ćemo provjeriti druga automatizirana rješenja koja implementiraju većinu onoga što smo uradili.