Canary Deployment koristeći Jenkins-X Istio Flagger
Canary Deployment
Nadamo se da ste pročitali prvi dio, gdje smo ukratko objasnili šta su Canary Deployments. Takođe smo pokazali kako to implementirati koristeći standardne Kubernetes resurse.
Argo Rollouts
Argo Rollouts je Kubernetes izvorni kontroler implementacije. Pruža CRD (prilagođenu definiciju resursa) za Kubernetes. Zahvaljujući njemu, možemo koristiti novi entitet: Rollout, koji upravlja plavo-zelenim i kanarinskim implementacijama s različitim opcijama konfiguracije.
Argo Rollouts kontroler koji koristi prilagođeni resurs Rollout, Omogućava dodatne strategije implementacije kao što su plavo-zelena i kanarinac za Kubernetes. Resurs Rollout pruža ekvivalentnu funkcionalnost Deployment, samo uz dodatne strategije implementacije.
resurs Deployments ima dvije strategije za implementaciju: RollingUpdate и Recreate. Iako su ove strategije prikladne za većinu slučajeva, za implementaciju na servere u velikom obimu, koriste se dodatne strategije, poput plavo-zelenih ili kanarinca, koje nisu dostupne u kontroleru implementacije. Da bi koristili ove strategije u Kubernetesu, korisnici su morali da napišu skripte povrh svojih implementacija. Argo Rollouts Controller izlaže ove strategije kao jednostavne, deklarativne, konfigurabilne parametre. https://argoproj.github.io/argo-rollouts
Tu je i Argo CI, koji pruža zgodan web interfejs za upotrebu sa Rollouts-ima, to ćemo pogledati u sledećem članku.
U našoj infrastrukturnoj repi (vidi dolje) već smo dodali install.yaml kao i/k8s/argo-rollouts/install.yaml. Na ovaj način će ga GitlabCI instalirati u klaster.
Ovo je vrlo jednostavan Python+Flask API koji vraća odgovor kao JSON. Napravit ćemo paket koristeći GitlabCI 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 vraćeni JSON fajl. Koristimo ovu aplikaciju kako bismo što lakše vizualizirali s kojom verzijom komuniciramo.
Infrastrukturno spremište
U ovom spremištu ćemo koristiti GitlabCI za implementaciju u Kubernetes, .gitlab-ci.yml izgleda ovako:
Rollout radi isto kao i Deployment. Ako ne postavimo strategiju ažuriranja (kao što je kanarinac ovdje), ona će se ponašati kao zadana implementacija s ažuriranjem.
Definiramo dva koraka u yaml-u za implementaciju canary:
10% prometa ka kanarincu (pričekajte ručno OK)
50% prometa do kanarinca (sačekajte 2 minute pa nastavite do 100%)
Izvođenje početnog postavljanja
Nakon inicijalne implementacije, naši resursi će izgledati ovako:
A odgovor dobijamo samo od prve verzije aplikacije:
Izvođenje Canary implementacije
Korak 1: 10% prometa
Da bismo započeli implementaciju kanarinca, samo trebamo promijeniti verziju slike kao što to obično radimo s implementacijama:
Zaista preporučujem ovaj video, on pokazuje kako Argo Rollouts i Argo CI rade zajedno:
Rezultat
Stvarno mi se sviđa ideja korištenja CRD-ova koji upravljaju kreiranjem dodatnih tipova implementacija ili skupova replika, preusmjeravaju promet itd. Rad sa njima ide glatko. Sledeće bih želeo da testiram integraciju sa Argo CI.
Međutim, čini se da dolazi do velikog spajanja Argo CI i Flux CI, tako da bih mogao pričekati dok novo izdanje ne izađe: Argo Flux.
Jeste li imali iskustva s Argo Rollouts ili Argo CI?