Uchishandisa Istio + Kiali kutanga uye kuona kuendeswa kweCanary
Zvinyorwa munhevedzano iyi
Canary Deployment muKubernetes #1: Gitlab CI Canary Deployment muKubernetes #2: Argo Rollouts - (Chinyorwa ichi)
- Canary Deployment uchishandisa Jenkins-X Istio Flagger
Canary Deployment
Tinovimba wakaverenga
Istio
Uye isu tinofungidzira kuti nekuverenga chinyorwa ichi unotoziva kuti Istio chii. Kana zvisina kudaro, iwe unogona kuverenga nezvazvo
Kunyorera bvunzo
Imwe neimwe pod ine midziyo miviri: yedu yekushandisa uye istio-proxy.
Isu tichashandisa yakapusa bvunzo application ine frontend-nginx uye backend python pods. Iyo nginx pod inongoendesa chikumbiro chega chega kubackend pod uye kushanda semumiriri. Ruzivo runowanikwa mune anotevera yamls:
Kumhanyisa bvunzo application iwe pachako
Kana iwe uchida kutevedzera muenzaniso wangu uye shandisa iyi bvunzo application iwe, ona
Kutanga Deployment
Patinotangisa Deployment yekutanga, tinoona kuti mapods echikumbiro chedu ane midziyo miviri chete, kureva kuti, Istio sidecar iri kungoitwa:
Uye isu zvakare tinoona Istio Gateway Loadbalancer munzvimbo yezita istio-system
:
Traffic generation
Isu tichashandisa iyo inotevera IP kugadzira traffic inozogamuchirwa nemapodhi ekumberi uye kuendeswa kune yekumashure pods:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
Tichawedzerawo frontend.istio-test
kune yedu faira faira.
View Mesh via Kiali
Isu takaisa bvunzo app uye Istio pamwe neTracing, Grafana, Prometheus uye Kiali (ona pazasi kuti uwane ruzivo).
istioctl dashboard kiali # admin:admin
Kiali anoona traffic iripo kuburikidza neMesh
Sezvatinoona, 100% yetraffic inoenda kumberi sevhisi, yozoenda kumberi mapodhi ane label v1, sezvo isu tiri kushandisa iri nyore nginx proxy iyo inodzosera zvikumbiro kune yekumashure sevhisi, iyo inozodzoreredza ivo kubackend pods. ine chinyorwa v1.
Kiali inoshanda zvikuru neIstio uye inopa mhinduro yebhokisi reMesh rendering. Zvakanaka chete.
Canary Deployment
Yedu yekumashure yatove neyaviri k8s deployments, imwe yev1 uye imwe yev2. Zvino isu tinongoda kuudza Istio kuti itumire imwe muzana yezvikumbiro kuv2.
Nhanho 1: 10%
Uye zvese zvatinoda kuita kugadzirisa huremu hweVirtualService mukati
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
Isu tinoona kuti 10% yezvikumbiro inotungamirwa kuv2.
Nhanho 2: 50%
Uye zvino zvakakwana kungowedzera kusvika 50%:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
...
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 50
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 50
Nhanho 3: 100%
Iye zvino Canary deployment inogona kutariswa yakakwana uye traffic yese inotungamirwa kuv2:
Kuedza Canary nemaoko
Ngatitii isu ikozvino tinotumira gumi muzana yezvese zvikumbiro kune v2 backend. Ko kana isu tichida kuyedza nemaoko v10 kuti tive nechokwadi chekuti zvese zvinoshanda sezvatinotarisira?
Tinogona kuwedzera mutemo wakakosha wekuenzanisa wakavakirwa paHTTP misoro:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- headers:
canary:
exact: "canary-tester"
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
Iye zvino tichishandisa curl tinogona kumanikidza chikumbiro chev2 nekutumira musoro:
Zvikumbiro zvisina musoro zvicharamba zvichifambiswa nechiyero che1/10:
Canary yemhando mbiri dzinotsamira
Iye zvino tichafunga nezvesarudzo yatine vhezheni v2 kune ese emberi uye backend. Kune ese ari maviri, isu takatsanangura kuti gumi muzana yetraffic inofanira kuenda kuv10:
Isu tinoona iyo yekumberi v1 uye v2 zvese zviri mberi traffic pachiyero che 1/10 kubackend v1 uye v2.
Ko kana isu taida kuendesa mberi traffic kubva kumberi-v2 chete kubackend-v2 nekuti haienderane nev1? Kuti tiite izvi, isu tichaisa chiyero che1/10 chemberi, iyo inodzora izvo traffic inosvika kubackend-v2 tichishandisa nhaurirano. sourceLabels
:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
...
- match:
- sourceLabels:
app: frontend
version: v2
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
Somugumisiro, tinowana zvatinoda:
Misiyano kubva kubhuku reCanary maitiro
Π kutanga chikamu Isu takaita Canary deployment nemaoko, zvakare tichishandisa maviri k8s deployments. Ikoko takadzora reshiyo yezvikumbiro nekushandura nhamba yezvinyorwa. Iyi nzira inoshanda, asi ine zvipingamupinyi zvakakomba.
Istio inoita kuti zvikwanise kuona chiyero chezvikumbiro zvisinei nenhamba yezvinyorwa. Izvi zvinoreva, semuenzaniso, kuti isu tinogona kushandisa HPAs (Horizontal Pod Autoscalers) uye haidi kugadziridzwa zvinoenderana nemamiriro ezvino eCanary deployment.
Mugumisiro
Istio inoshanda zvikuru uye kuishandisa pamwe chete neKiali inoita musanganiswa une simba kwazvo. Inotevera pane yangu runyorwa rwezvido kubatanidza Spinnaker neIstio ye automation uye Canary analytics.
Source: www.habr.com