Ke hoʻohana nei iā Istio+Kiali e hoʻomaka a nānā i kahi hoʻolaha Canary

ʻatikala ma kēia moʻo
- (Keia 'atikala)
- Hoʻohana ʻo Canary me ka hoʻohana ʻana iā Jenkins-X Istio Flagger
Hoʻokomo Canary
Manaʻo mākou e heluhelu ʻoe , kahi i wehewehe pōkole ai mākou i ke ʻano o nā hoʻolaha Canary a hōʻike i ka hoʻokō ʻana iā lākou me ka hoʻohana ʻana i nā kumuwaiwai Kubernetes maʻamau.
Istio
A ke manaʻo nei mākou ma ka heluhelu ʻana i kēia ʻatikala ua ʻike ʻoe i ka mea ʻo Istio. Inā ʻaʻole, a laila hiki iā ʻoe ke heluhelu e pili ana .
Noi no na hoao

Loaʻa i kēlā me kēia pod nā pahu ʻelua: kā mākou noi a me istio-proxy.
E hoʻohana mākou i kahi noi hoʻāʻo maʻalahi me ka frontend-nginx a me backend python pods. E hoʻihoʻi hou ka nginx pod i kēlā me kēia noi i ka backend pod a hana ma ke ʻano he koho. Hiki ke loaʻa nā kikoʻī ma kēia mau yaml:
Ke holo nei i ka palapala ho'āʻo iā ʻoe iho
Inā makemake ʻoe e hahai i kaʻu hiʻohiʻona a hoʻohana i kēia noi hoʻāʻo iā ʻoe iho, ʻike .
Hoʻokomo mua
Ke hoʻomaka nei mākou i ka Deployment mua, ʻike mākou he 2 mau pahu wale nō nā pods o kā mākou noi, ʻo ia hoʻi, ke hoʻokō ʻia nei ʻo Istio sidecar:

A ʻike pū mākou iā Istio Gateway Loadbalancer ma ka inoa inoa istio-system:

Hanau kaʻa
E hoʻohana mākou i ka IP aʻe e hana i nā kaʻa e loaʻa i nā pods frontend a hoʻouna ʻia i nā pods hope:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
E hoʻohui pū mākou frontend.istio-test i kā mākou waihona hoʻokipa.
Nānā Mesh ma o Kiali
Hoʻokomo mākou i ka noi hoʻāʻo a me Istio me Tracing, Grafana, Prometheus a me Kiali (e ʻike i lalo no nā kikoʻī). ). No laila hiki iā mākou ke hoʻohana iā Kiali ma:
istioctl dashboard kiali # admin:admin

ʻIke ʻo Kiali i nā kaʻa o kēia manawa ma o Mesh
E like me kā mākou e ʻike ai, hele ka 100% o ke kaʻa i ka lawelawe frontend, a laila i nā pods frontend me ka lepili v1, no ka mea ke hoʻohana nei mākou i kahi proxy nginx maʻalahi e hoʻihoʻi hou i nā noi i ka lawelawe backend, a laila e hoʻihoʻi hou iā lākou i nā pods backend. me ka lepili v1.
Hana maikaʻi ʻo Kiali me Istio a hāʻawi i kahi hopena hoʻoheheʻe Mesh pahu. Nui wale.
Hoʻokomo Canary
Ua loaʻa i kā mākou backend ʻelua mau hoʻolālā k8, hoʻokahi no v1 a hoʻokahi no v2. I kēia manawa pono mākou e haʻi iā Istio e hoʻouna i kekahi hapa o nā noi i v2.
Ka Papa 1: 10%
A ʻo nā mea a pau e pono ai mākou e hoʻoponopono i ke kaumaha o ka VirtualService i loko :
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 
ʻIke mākou ua hoʻohuli hou ʻia ka 10% o nā noi i v2.
Ka Papa 2: 50%
A i kēia manawa ua lawa ka hoʻonui ʻana iā 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 
Ka Papa 3: 100%
I kēia manawa hiki ke noʻonoʻo ʻia ka hoʻopau ʻana o Canary a hoʻohuli ʻia nā kaʻa āpau i v2:

E ho'āʻo lima iā Canary
E ʻōlelo mākou e hoʻouna mākou i 2% o nā noi āpau i ka v10 backend. He aha inā makemake mākou e hoʻāʻo lima iā v2 e hōʻoia i ka holo ʻana o nā mea āpau e like me kā mākou e manaʻo ai?
Hiki iā mākou ke hoʻohui i kahi lula pili kūikawā e pili ana i nā poʻomanaʻo 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: 10I kēia manawa me ka curl hiki iā mākou ke koi i kahi noi v2 ma ka hoʻouna ʻana i ke poʻo:
![]()
E alakaʻi ʻia nā noi me ke poʻo ʻole e ka ratio 1/10:

ʻO Canary no nā mana hilinaʻi ʻelua
I kēia manawa, e noʻonoʻo mākou i ke koho i loaʻa iā mākou ka mana v2 no ka frontend a me ka hope. No nā mea ʻelua, ua kuhikuhi mākou he 10% o ke kaʻa e hele i v2:

ʻIke mākou i kēlā frontend v1 a me v2 ʻelua i mua o ka neʻe ʻana ma ka ratio o 1/10 i hope v1 a me v2.
He aha inā inā pono mākou e hoʻouna i nā kaʻa mai frontend-v2 wale nō i backend-v2 no ka mea ʻaʻole kūpono ia me v1? No ka hana ʻana i kēia, e hoʻonoho mākou i kahi ratio 1/10 no ka frontend, nāna e hoʻokele i ka mea e hele ai i ka backend-v2 me ka hoʻohana ʻana i ke kūkākūkā. 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ʻO ka hopena, loaʻa iā mākou ka mea e pono ai mākou:

Nā ʻokoʻa mai ka manual Canary approach
В ʻO ka hapa mua Ua hana lima mākou i ka hoʻolaha ʻana o Canary, me ka hoʻohana ʻana i ʻelua mau hoʻolālā k8. Ma laila mākou i hoʻomalu ai i ka lakio o nā noi ma ka hoʻololi ʻana i ka helu o nā replicas. Ke hana nei kēia ala, akā he mau drawbacks koʻikoʻi.
Hiki iā Istio ke hoʻoholo i ka ratio o nā noi me ka nānā ʻole i ka nui o nā replicas. ʻO kēia ke ʻano, no ka laʻana, hiki iā mākou ke hoʻohana i nā HPA (Horizontal Pod Autoscalers) a ʻaʻole pono e hoʻonohonoho ʻia e like me ke kūlana o kēia manawa o ka deployment Canary.
ʻO ka hopena
Hana maikaʻi ʻo Istio a hoʻohana pū me Kiali i kahi hui ikaika loa. ʻO ka mea aʻe ma kaʻu papa inoa o nā mea hoihoi e hui pū ana iā Spinnaker me Istio no ka automation a me nā analytics Canary.
Source: www.habr.com
