Upamo, da berete prvi del, kjer smo na kratko razložili, kaj so Canary uvedbe in pokazali, kako jih implementirati s standardnimi viri Kubernetes.
Istio
Predvidevamo, da z branjem tega članka že veste, kaj je Istio. Če ne, potem lahko preberete o tem tukaj.
Vloga za teste
Vsak pod vsebuje dva vsebnika: našo aplikacijo in istio-proxy.
Uporabili bomo preprosto preskusno aplikacijo s frontend-nginx in backend python pods. Pod nginx bo preprosto preusmeril vsako zahtevo v zaledni pod in deloval kot proxy. Podrobnosti najdete v naslednjih datotekah yaml:
Če želite slediti mojemu zgledu in sami uporabiti to testno aplikacijo, glejte projekt readme.
Začetna uvedba
Ko zaženemo prvo uvedbo, vidimo, da imajo sklopi naše aplikacije samo 2 vsebnika, kar pomeni, da se stranska prikolica Istio šele izvaja:
V imenskem prostoru vidimo tudi Istio Gateway Loadbalancer istio-system:
Generiranje prometa
Naslednji IP bomo uporabili za ustvarjanje prometa, ki ga bodo prejeli sprednji moduli in ga posredovali zalednim modulom:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
Dodali bomo tudi frontend.istio-test v našo datoteko gostiteljev.
Oglejte si mrežo prek Kialija
Namestili smo testno aplikacijo in Istio skupaj s Tracing, Grafana, Prometheus in Kiali (za podrobnosti glejte spodaj). projekt readme). Zato lahko Kiali uporabljamo prek:
istioctl dashboard kiali # admin:admin
Kiali vizualizira trenutni promet skozi Mesh
Kot lahko vidimo, gre 100 % prometa v čelno storitev, nato v čelne pode z oznako v1, saj uporabljamo preprost proxy nginx, ki preusmeri zahteve v zaledno storitev, ta pa jih preusmeri na zaledne pode. z oznako v1.
Kiali odlično deluje z Istio in ponuja rešitev za upodabljanje Mesh v škatli. Res super.
Canary Deployment
Naše zaledje že ima dve uvedbi k8s, eno za v1 in eno za v2. Zdaj moramo reči Istio, naj posreduje določen odstotek zahtev v v2.
1. korak: 10 %
In vse, kar moramo storiti, je prilagoditi težo VirtualService istio.yaml:
Zdaj lahko z uporabo curl vsilimo zahtevo v2 tako, da pošljemo glavo:
Za zahteve brez glave bo še vedno veljalo razmerje 1/10:
Canary za dve odvisni različici
Zdaj bomo razmislili o možnosti, kjer imamo različico v2 za sprednji in zadnji del. Za oba smo določili, da mora 10 % prometa iti na v2:
Vidimo, da sprednji del v1 in v2 posredujeta promet v razmerju 1/10 proti zalednemu delu v1 in v2.
Kaj pa, če bi morali posredovati promet iz frontend-v2 samo v backend-v2, ker ni združljiv z v1? Da bi to naredili, bomo nastavili razmerje 1/10 za sprednji del, ki nadzoruje, kakšen promet pride do zaledja-v2 z uporabo pogajanj sourceLabels :
В 1. del Razmestitev Canaryja smo izvedli ročno, prav tako z uporabo dveh uvedb k8s. Tam smo razmerje zahtev nadzirali s spreminjanjem števila replik. Ta pristop deluje, vendar ima resne pomanjkljivosti.
Istio omogoča ugotavljanje razmerja zahtev ne glede na število replik. To na primer pomeni, da lahko uporabljamo HPA (Horizontal Pod Autoscalers) in jih ni treba konfigurirati glede na trenutno stanje uvedbe Canary.
Skupaj
Istio deluje odlično in njegova uporaba skupaj s Kiali je zelo močna kombinacija. Naslednji na seznamu mojih zanimanj je kombinacija Spinnakerja z Istio za avtomatizacijo in analitiko Canary.