Kusetshenziswa i-Istio+Kiali ukwethula nokubona ngeso lengqondo ukuthunyelwa kwe-Canary
Izihloko kulolu chungechunge
Ukuthunyelwa kwe-Canary e-Kubernetes #1: Gitlab CI Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo - (Lesi sihloko)
- Ukuthunyelwa kwe-Canary kusetshenziswa i-Jenkins-X Istio Flagger
Ukuthunyelwa kwe-Canary
Sithemba ukuthi ufunda
Istio
Futhi sicabanga ukuthi ngokufunda lesi sihloko usuvele wazi ukuthi i-Istio iyini. Uma kungenjalo, khona-ke ungafunda ngakho
Isicelo sokuhlolwa
I-pod ngayinye iqukethe iziqukathi ezimbili: uhlelo lwethu lokusebenza kanye ne-istio-proxy.
Sizosebenzisa uhlelo lokuhlola olulula olunama-frontend-nginx nama-backend python pods. I-nginx pod izovele iqondise kabusha isicelo ngasinye ku-backend pod futhi isebenze njengommeleli. Imininingwane ingatholakala kulawa ma-yaml alandelayo:
Ukuqalisa uhlelo lokusebenza lokuhlola ngokwakho
Uma ufuna ukulandela isibonelo sami futhi usebenzise lolu hlelo lokusebenza lokuhlola ngokwakho, bona
Ukuthunyelwa Kwasekuqaleni
Lapho sethula Ukuthunyelwa kokuqala, sibona ukuthi ama-pods wesicelo sethu aneziqukathi ezi-2 kuphela, okungukuthi, i-Istio sidecar isanda kuqaliswa:
Futhi sibona i-Istio Gateway Loadbalancer endaweni yamagama istio-system
:
Ukwakhiwa kwethrafikhi
Sizosebenzisa i-IP elandelayo ukuze sikhiqize ithrafikhi ezotholwa yi-frontend pods futhi idluliselwe kuma-backend pods:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
Sizongeza futhi frontend.istio-test
kufayela labasingathi bethu.
Buka i-Mesh nge-Kiali
Sifake uhlelo lokuhlola kanye ne-Istio kanye ne-Tracing, Grafana, Prometheus kanye ne-Kiali (bona ngezansi ukuze uthole imininingwane).
istioctl dashboard kiali # admin:admin
I-Kiali ibona ngeso lengqondo ithrafikhi yamanje nge-Mesh
Njengoba sibona, i-100% yethrafikhi iya kusevisi ye-frontend, bese ifinyelela kuma-pods angaphambili anelebula v1, njengoba sisebenzisa ummeleli we-nginx olula oqondisa kabusha izicelo kusevisi ye-backend, ebuye iqondise kabusha kuma-backend pods. nge ilebula v1.
I-Kiali isebenza kahle nge-Istio futhi inikeza isixazululo esinebhokisi le-Mesh yokunikeza. Kuhle nje.
Ukuthunyelwa kwe-Canary
I-backend yethu isivele inokuthunyelwa kwe-k8s okubili, eyodwa ye-v1 nenye ye-v2. Manje sidinga ukutshela i-Istio ukuthi idlulisele iphesenti elithile lezicelo ku-v2.
Isinyathelo 1: 10%
Futhi konke okudingeka sikwenze ukulungisa isisindo se-VirtualService ku
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
Siyabona ukuthi u-10% wezicelo uqondiswe kabusha ku-v2.
Isinyathelo 2: 50%
Futhi manje kwanele nje ukukhuphula kube ngu-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
Isinyathelo 3: 100%
Manje ukuthunyelwa kwe-Canary kungabhekwa njengokuphelele futhi yonke ithrafikhi iqondiswe kabusha ku-v2:
Ukuhlola i-Canary mathupha
Ake sithi manje sithumela u-2% wazo zonke izicelo ku-v10 backend. Kuthiwani uma sifuna ukuhlola i-v2 mathupha ukuze siqiniseke ukuthi yonke into isebenza njengoba silindele?
Singangeza isimiso esikhethekile sokufanisa esisuselwe kumaheda e-HTTP:
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
Manje sisebenzisa i-curl singaphoqa isicelo se-v2 ngokuthumela unhlokweni:
Izicelo ezingenayo unhlokweni zisazoqhutshwa isilinganiso esingu-1/10:
I-Canary yezinguqulo ezimbili ezincike
Manje sizocubungula inketho lapho sinenguqulo ye-v2 yazo zombili i-frontend ne-backend. Kukho kokubili, sicacise ukuthi u-10% wethrafikhi kufanele uye ku-v2:
Sibona ukuthi i-frontend v1 kanye ne-v2 kokubili ithrafikhi eya phambili ngesilinganiso esingu-1/10 kuya ku-backend v1 ne-v2.
Kuthiwani uma besidinga ukudlulisa ithrafikhi kusuka ku-frontend-v2 kuphela kuya ku-backend-v2 ngoba ayihambisani ne-v1? Ukwenza lokhu, sizobeka isilinganiso esingu-1/10 se-frontend, elawula ukuthi iyiphi ithrafikhi efika ku-backend-v2 sisebenzisa ukuxoxisana. 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
Ngenxa yalokho, sithola esikudingayo:
Umehluko endleleni ye-Canary manual
В ingxenye yokuqala Senze ukuthunyelwa kwe-Canary mathupha, futhi sisebenzisa ama-k8s amabili. Lapho silawule isilinganiso sezicelo ngokushintsha inani lezifaniso. Le ndlela iyasebenza, kodwa inezinkinga ezinkulu.
I-Istio yenza kube nokwenzeka ukunquma isilinganiso sezicelo kungakhathaliseki inani lezifaniso. Lokhu kusho, isibonelo, ukuthi singasebenzisa ama-HPA (Horizontal Pod Autoscaler) futhi akudingeki ukuba simiswe ngokuvumelana nesimo samanje sokuthunyelwa kweCanary.
Umphumela
I-Istio isebenza kahle futhi ukuyisebenzisa kanye ne-Kiali yenza inhlanganisela enamandla kakhulu. Okulandelayo ohlwini lwami lwezithakazelo ukuhlanganisa i-Spinnaker ne-Istio ye-automation kanye ne-Canary analytics.
Source: www.habr.com