Siv Istio + Kiali los tso tawm thiab pom lub Canary xa tawm
Cov lus hauv no series
Canary Deployment hauv Kubernetes #1: Gitlab CI Canary Deployment hauv Kubernetes #2: Argo Rollouts - (Cov kab lus no)
- Canary Deployment siv Jenkins-X Istio Flagger
Canary Deployment
Peb vam tias koj nyeem
Istio
Thiab peb xav tias los ntawm kev nyeem cov kab lus no koj twb paub tias Istio yog dab tsi. Yog tias tsis yog, koj tuaj yeem nyeem txog nws
Daim ntawv thov rau kev xeem
Txhua lub pod muaj ob lub thawv: peb daim ntawv thov thiab istio-proxy.
Peb yuav siv daim ntawv thov sim yooj yim nrog frontend-nginx thiab backend python pods. Lub nginx pod yuav tsuas redirect txhua qhov kev thov mus rau lub backend pod thiab ua hauj lwm raws li ib tug proxy. Cov ntsiab lus tuaj yeem pom hauv yamls hauv qab no:
Khiav daim ntawv thov kev xeem koj tus kheej
Yog tias koj xav ua raws li kuv qhov piv txwv thiab siv daim ntawv thov xeem no koj tus kheej, saib
Kev xa tawm thawj zaug
Thaum peb tso tawm thawj Kev Tshaj Tawm, peb pom tias cov pods ntawm peb daim ntawv thov tsuas muaj 2 lub thawv, uas yog, Istio sidecar tsuas yog ua tiav:
Thiab peb kuj pom Istio Gateway Loadbalancer hauv lub npe istio-system
:
Kev tsim tsheb
Peb yuav siv tus IP hauv qab no los tsim cov tsheb thauj mus los uas yuav tau txais los ntawm cov pods frontend thiab xa mus rau tom qab pods:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
Peb kuj yuav ntxiv frontend.istio-test
rau peb cov ntaub ntawv hosts.
Saib Mesh ntawm Kiali
Peb tau teeb tsa daim ntawv thov xeem thiab Istio nrog rau Tracing, Grafana, Prometheus thiab Kiali (saib hauv qab kom paub meej).
istioctl dashboard kiali # admin:admin
Kiali pom cov tsheb khiav tam sim no los ntawm Mesh
Raws li peb tuaj yeem pom, 100% ntawm cov tsheb khiav mus rau qhov kev pabcuam pem hauv ntej, tom qab ntawd mus rau pem hauv ntej pods nrog daim ntawv lo v1, txij li thaum peb tab tom siv nginx proxy yooj yim uas redirects thov mus rau qhov kev pabcuam backend, uas tig rov qab lawv mus rau lub backend pods. nrog daim ntawv v1.
Kiali ua haujlwm zoo nrog Istio thiab muab lub thawv mesh rendering tov. Zoo heev.
Canary Deployment
Peb lub backend twb muaj ob qhov kev xa tawm k8s, ib qho rau v1 thiab ib qho rau v2. Tam sim no peb tsuas yog xav qhia Istio kom xa ib feem pua ββββntawm kev thov rau v2.
Kauj Ruam 1: 10%
Thiab txhua yam peb yuav tsum tau ua yog kho qhov hnyav ntawm VirtualService hauv
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
Peb pom tias 10% ntawm kev thov raug xa mus rau v2.
Kauj Ruam 2: 50%
Thiab tam sim no nws txaus tsuas yog nce nws mus rau 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
Kauj Ruam 3: 100%
Tam sim no Canary xa tawm tuaj yeem suav tias ua tiav thiab tag nrho cov tsheb khiav mus rau v2:
Kuaj Canary manually
Cia peb hais tias tam sim no peb xa 2% ntawm tag nrho cov kev thov mus rau v10 backend. Yuav ua li cas yog tias peb xav manually sim v2 kom paub tseeb tias txhua yam ua haujlwm raws li peb xav tau?
Peb tuaj yeem ntxiv txoj cai tshwj xeeb sib xws raws li HTTP headers:
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
Tam sim no siv curl peb tuaj yeem yuam kev thov v2 los ntawm kev xa cov header:
Kev thov yam tsis muaj header tseem yuav tau tsav los ntawm 1/10 piv:
Canary rau ob txoj kev vam meej
Tam sim no peb yuav xav txog qhov kev xaiv uas peb muaj version v2 rau ob qho tib si frontend thiab backend. Rau ob qho tib si, peb tau hais tias 10% ntawm cov tsheb yuav tsum mus rau v2:
Peb pom tias frontend v1 thiab v2 ob qho tib si rau pem hauv ntej ntawm qhov sib piv ntawm 1/10 rau backend v1 thiab v2.
Yuav ua li cas yog tias peb xav tau kev xa mus los ntawm frontend-v2 tsuas yog rau backend-v2 vim nws tsis sib haum nrog v1? Txhawm rau ua qhov no, peb yuav teeb tsa 1/10 piv rau frontend, uas tswj cov tsheb khiav mus rau backend-v2 siv kev sib tham. 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
Yog li ntawd, peb tau txais yam peb xav tau:
Qhov sib txawv ntawm phau ntawv Canary mus kom ze
Π thawj ntu Peb tau ua Canary xa tawm manually, kuj siv ob k8s xa tawm. Nyob ntawd peb tswj qhov piv txwv ntawm kev thov los ntawm kev hloov tus lej ntawm cov replicas. Txoj kev no ua haujlwm, tab sis muaj teeb meem loj.
Istio ua rau nws muaj peev xwm txiav txim siab qhov piv ntawm kev thov tsis hais tus naj npawb ntawm replicas. Qhov no txhais tau hais tias, piv txwv li, peb tuaj yeem siv HPAs ( Kab rov tav Pod Autoscalers ) thiab tsis tas yuav tsum tau teeb tsa raws li lub xeev tam sim no ntawm Canary xa tawm.
Qhov no
Istio ua haujlwm zoo thiab siv nws ua ke nrog Kiali ua rau kev sib xyaw ua ke muaj zog heev. Tom ntej no ntawm kuv daim ntawv teev cov kev txaus siab yog sib txuas Spinnaker nrog Istio rau automation thiab Canary analytics.
Tau qhov twg los: www.hab.com