рдиреЛрдВрдж. рдЕрдиреБрд╡рд╛рдж:
рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ рдХреА рд▓реЗрдЦ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЖрдгрд┐ рдЗрд╕реНрдЯрд┐рдУрд╕рд╛рдареА рдореЕрдирд┐рдлреЗрд╕реНрдЯ) рд╡рд╛рдкрд░рддреЛ.
рд╡рд╛рд╣рддреВрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
Istio рд╕рд╣, рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдирд╡реАрди рдХреНрд╖рдорддрд╛ рджрд┐рд╕реВрди рдпреЗрддрд╛рдд:
- рдбрд╛рдпрдиреЕрдорд┐рдХ рд╡рд┐рдирдВрддреА рд░рд╛рдЙрдЯрд┐рдВрдЧ: рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯреНрд╕, A/B рдЪрд╛рдЪрдгреА;
- рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ: рд╕рд╛рдзреЗ рдЖрдгрд┐ рд╕реБрд╕рдВрдЧрдд, рд╣реЕрд╢рд╡рд░ рдЖрдзрд╛рд░рд┐рдд;
- рдлреЙрд▓реНрд╕ рдирдВрддрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА: рдХрд╛рд▓рдмрд╛рд╣реНрдп, рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░;
- рджреЛрд╖ рдШрд╛рд▓рдгреЗ: рд╡рд┐рд▓рдВрдм, рд╕реЛрдбрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдЗ.
рд▓реЗрдЦ рдкреБрдвреЗ рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛, рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рд╕реНрдкрд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдорд╛рд░реНрдЧрд╛рдд рдирд╡реАрди рд╕рдВрдХрд▓реНрдкрдирд╛ рд╕рд╛рджрд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓. рдЕрд╢реА рдкрд╣рд┐рд▓реА рд╕рдВрдХрд▓реНрдкрдирд╛ рдЕрд╕реЗрд▓ DestinationRules
(рдореНрд╣рдгрдЬреЗ рд░рд╣рджрд╛рд░реА/рд╡рд┐рдирдВрддреНрдпрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рдВрдмрджреНрджрд▓рдЪреЗ рдирд┐рдпрдо - рдЕрдВрджрд╛рдЬреЗ рднрд╛рд╖рд╛рдВрддрд░.), рдЬреНрдпрд╛рдЪреНрдпрд╛ рдорджрддреАрдиреЗ рдЖрдореНрд╣реА A/B рдЪрд╛рдЪрдгреА рд╕рдХреНрд░рд┐рдп рдХрд░рддреЛ.
A/B рдЪрд╛рдЪрдгреА: рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдЧрдВрддрд╡реНрдп рдирд┐рдпрдо
A/B рдЪрд╛рдЪрдгреА рдЕрд╢рд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ рдЬрд┐рдереЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рджреЛрди рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрд╣реЗрдд (рд╕рд╣рд╕рд╛ рддреНрдпрд╛ рджреГрд╖реНрдпрджреГрд╖реНрдЯреНрдпрд╛ рднрд┐рдиреНрди рдЕрд╕рддрд╛рдд) рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ 100% рдЦрд╛рддреНрд░реА рдирд╛рд╣реА рдХреА рдХреЛрдгрддрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╕реБрдзрд╛рд░реЗрд▓. рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рджреЛрдиреНрд╣реА рдЖрд╡реГрддреНрддреНрдпрд╛ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЧреЛрд│рд╛ рдХрд░рддреЛ.
рдлреНрд░рдВрдЯрдПрдВрдбрдЪреА рджреБрд╕рд░реА рдЖрд╡реГрддреНрддреА рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, A/B рдЪрд╛рдЪрдгреАрдЪреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ, рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
рд╣рд┐рд░рд╡реНрдпрд╛ рдЖрд╡реГрддреНрддреАрд╕рд╛рдареА рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдореЕрдирд┐рдлреЗрд╕реНрдЯ рджреЛрди рдард┐рдХрд╛рдгреА рднрд┐рдиреНрди рдЖрд╣реЗ:
- рдкреНрд░рддрд┐рдорд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдЯреЕрдЧрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ -
istio-green
, - рд╢реЗрдВрдЧрд╛рдВрдирд╛ рдПрдХ рд▓реЗрдмрд▓ рдЕрд╕рддреЗ
version: green
.
рджреЛрдиреНрд╣реА рдЙрдкрдпреЛрдЬрдирд╛рдВрдирд╛ рдПрдХ рд▓реЗрдмрд▓ рдЕрд╕рд▓реНрдпрд╛рдиреЗ app: sa-frontend
,рдЖрднрд╛рд╕реА рд╕реЗрд╡реЗрджреНрд╡рд╛рд░реЗ рд╡рд┐рдирдВрддреНрдпрд╛ рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд sa-external-services
рд╕реЗрд╡реЗрд╕рд╛рдареА sa-frontend
, рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╡рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рд▓реЛрдб рд╡рд┐рддрд░реАрдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓
рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдИрд▓реНрд╕ рдЖрдврд│рд▓реНрдпрд╛ рдирд╛рд╣реАрдд
рдпрд╛ рдлрд╛рдпрд▓реА рдЖрдврд│рд▓реНрдпрд╛ рдирд╛рд╣реАрдд рдХрд╛рд░рдг рддреНрдпрд╛рдВрдирд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ рд╡реЗрдЧрд│реА рдирд╛рд╡реЗ рджрд┐рд▓реА рдЖрд╣реЗрдд. рдЪрд▓рд╛ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░реВрдпрд╛:
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js
рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА index.html
, рд╕реНрдЯреЕрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рдПрдХрд╛ рдЖрд╡реГрддреНрддреАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░реВрди, рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд░рджреНрд╡рд╛рд░реЗ рдкреЙрдбреНрд╕рд╡рд░ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЬреНрдпрд╛рдЪреА рднрд┐рдиреНрди рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ, рдЬреЗрдереЗ, рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ, рдЕрд╢рд╛ рдлрд╛рдЗрд▓реНрд╕ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╛рд╣реАрдд. рдореНрд╣рдгреВрди, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдирд┐рд░реНрдмрдВрдз рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ: тАЬindex.html рд╕рд░реНрд╡реНрд╣ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рддреНрдпрд╛рдЪ рдЖрд╡реГрддреНрддреАрдиреЗ рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рджрд┐рд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд┬╗.
рдЖрдореНрд╣реА рддреЗрдереЗ рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рд╣реЕрд╢-рдЖрдзрд╛рд░рд┐рдд рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧрд╕рд╣ рдкреЛрд╣реЛрдЪреВ (рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рд╣реЕрд╢ рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ)... рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рддреНрдпрд╛рдЪ рдХреНрд▓рд╛рдпрдВрдЯрдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рддреНрдпрд╛рдЪ рдмреЕрдХрдПрдВрдб рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рдЬреНрдпрд╛рд╕рд╛рдареА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЧреБрдгрдзрд░реНрдо рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, HTTP рд╢реАрд░реНрд╖рд▓реЗрдЦ. DestinationRules рд╡рд╛рдкрд░реВрди рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ.
рдЧрдВрддрд╡реНрдп рдирд┐рдпрдо
рдирдВрддрд░ рдЖрднрд╛рд╕реА рд╕реЗрд╡рд╛ рдЗрдЪреНрдЫрд┐рдд рд╕реЗрд╡реЗрд▓рд╛ рд╡рд┐рдирдВрддреА рдкрд╛рдард╡рд▓реА, DestinationRules рд╡рд╛рдкрд░реВрди рдЖрдореНрд╣реА рдзреЛрд░рдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ рдЬреА рдпрд╛ рд╕реЗрд╡реЗрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╛рдареА рдирд┐рдпрдд рд░рд╣рджрд╛рд░реАрд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рддреАрд▓:
Istio рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╕рд╣ рд░рд╣рджрд╛рд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
рд╢реЗрд░рд╛: рдиреЗрдЯрд╡рд░реНрдХ рд░рд╣рджрд╛рд░реАрд╡рд░ Istio рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдкреНрд░рднрд╛рд╡ рд╕рдордЬрдгреНрдпрд╛рд╕ рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдпреЗрдереЗ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рддрдВрддреЛрддрдВрдд рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рд╡рд┐рдирдВрддреА рдХреЛрдгрддреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдкрд╛рдард╡рд╛рдпрдЪреА рд╣рд╛ рдирд┐рд░реНрдгрдп рд╕реАрдЖрд░рдбреАрдордзреНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрдВрдЧреНрд░реЗрд╕ рдЧреЗрдЯрд╡реЗрдордзреАрд▓ рджреВрддрд╛рдиреЗ рдШреЗрддрд▓рд╛ рдЖрд╣реЗ.
рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рдирд┐рдпрдорд╛рдВрд╕рд╣, рдЖрдореНрд╣реА рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рд╣реЕрд╢ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рд╕рдорд╛рди рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рдорд╛рди рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддреЛ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░реВ рд╢рдХрддреЛ. рдЦрд╛рд▓реАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ (
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-frontend
spec:
host: sa-frontend
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: version # 1
1 - HTTP рд╢реАрд░реНрд╖рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕рд╛рдордЧреНрд░реАрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЕрд╢ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ version
.
рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢рд╛рд╕рд╣ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рд╛:
$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created
рдЖрддрд╛ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рд╣реЗрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдпреЛрдЧреНрдп рдлрд╛рдЗрд▓реНрд╕ рдорд┐рд│рд╛рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛ version
:
$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
рд╢реЗрд░рд╛: рд╣реЗрдбрд░рдордзреНрдпреЗ рднрд┐рдиреНрди рдореВрд▓реНрдпреЗ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдереЗрдЯ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, DestinationRules рдордзреНрдпреЗ рд▓реЛрдб рдмреЕрд▓реЗрдВрд╕рд┐рдВрдЧрдЪреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд рдЕрдзрд┐рдХ рдХреНрд╖рдорддрд╛ рдЖрд╣реЗрдд - рддрдкрд╢реАрд▓рд╛рдВрд╕рд╛рдареА рддрдкрд╛рд╕рд╛
рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд┐рд╕рдЪрд╛ рдкреБрдвреАрд▓ рдЕрднреНрдпрд╛рд╕ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡реВрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА "рдЧреНрд░реАрди рдЖрд╡реГрддреНрддреА" рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд░рд╣рджрд╛рд░реА рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдирд┐рдпрдо рд╣рдЯрд╡реВ:
$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions тАЬsa-frontend-greenтАЭ deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io тАЬsa-frontendтАЭ deleted
рдорд┐рд░рд░рд┐рдВрдЧ: рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдЖрднрд╛рд╕реА рд╕реЗрд╡рд╛
рдЫрд╛рдпрд╛ ("рд╕рдВрд░рдХреНрд╖рдг") рдХрд┐рдВрд╡рд╛ рдорд┐рд░рд░рд┐рдВрдЧ ("рдорд┐рд░рд┐рдВрдЧ") рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░рддрд╛ рдЙрддреНрдкрд╛рджрдирд╛рддреАрд▓ рдмрджрд▓рд╛рдЪреА рдЪрд╛рдЪрдгреА рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ: рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЗрдЪреНрдЫрд┐рдд рдмрджрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА (тАЬрдорд┐рд░рд░тАЭ) рд╡рд┐рдирдВрддреНрдпрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣рддреЛ. рд╕реЛрдкреНрдпрд╛ рднрд╛рд╖реЗрдд рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдЬреЗрд╡реНрд╣рд╛ рддреБрдордЪрд╛ рд╕рд╣рдХрд╛рд░реА рд╕рд░реНрд╡рд╛рдд рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рдбрддреЛ рдЖрдгрд┐ рдШрд╛рдгреАрдЪреНрдпрд╛ рдПрд╡рдвреНрдпрд╛ рдореЛрдареНрдпрд╛ рдврд┐рдЧрд╛рд▒реНрдпрд╛рдЪреНрдпрд╛ рд░реВрдкрд╛рдд рдЦреЗрдЪрдгреНрдпрд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ рддреЗрд╡реНрд╣рд╛ рдХреЛрдгреАрд╣реА рддреНрдпрд╛рдЪреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА.
рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪреА рдХреГрддреАрдд рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдмрдЧреНрд╕рд╕рд╣ рдПрд╕рдП-рд▓реЙрдЬрд┐рдХрдЪреЗ рджреБрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░реВрдпрд╛ (buggy
) рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡реВрди:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
рдЖрдгрд┐ рдЖрддрд╛ рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдгреЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡реВ app=sa-logic
рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╡реГрддреНрддреНрдпрд╛рдВрд╕рд╣ рд▓реЗрдмрд▓реЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд:
$ kubectl get pods -l app=sa-logic --show-labels
NAME READY LABELS
sa-logic-568498cb4d-2sjwj 2/2 app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c 2/2 app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66 2/2 app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz 2/2 app=sa-logic,version=v2
рд╕реЗрд╡рд╛ sa-logic
рд▓реЗрдмрд▓рд╕рд╣ рд╢реЗрдВрдЧрд╛рдВрдирд╛ рд▓рдХреНрд╖реНрдп рдХрд░рддреЗ app=sa-logic
, рдореНрд╣рдгреВрди рд╕рд░реНрд╡ рд╡рд┐рдирдВрддреНрдпрд╛ рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд┐рддрд░реАрдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓:
... рдкрд░рдВрддреБ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рдирдВрддреНрдпрд╛ v1 рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╡рд░ рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рд╡реНрдпрд╛рдд рдЖрдгрд┐ v2 рдШрдЯрдирд╛рдВрдордзреНрдпреЗ рдорд┐рд░рд░ рдХрд░рд╛рд╡реНрдпрд╛рдд рдЕрд╢реА рдЖрдордЪреА рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ:
рдЖрдореНрд╣реА DestinationRule рдЪреНрдпрд╛ рд╕рдВрдпреЛрдЬрдирд╛рдд VirtualService рджреНрд╡рд╛рд░реЗ рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░реВ, рдЬрд┐рдереЗ рдирд┐рдпрдо рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд┐рд╕рдЪреЗ рдЙрдкрд╕рдореВрд╣ рдЖрдгрд┐ рдорд╛рд░реНрдЧ рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрд╕рдВрдЪрд╛рд╕рд╛рдареА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреАрд▓.
рдЧрдВрддрд╡реНрдп рдирд┐рдпрдорд╛рдВрдордзреНрдпреЗ рдЙрдкрд╕рдВрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ
рдЙрдкрд╕рдВрдЪ (рдЙрдкрд╕рдВрдЪ) рдЦрд╛рд▓реАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирджреНрд╡рд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд (
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-logic
spec:
host: sa-logic # 1
subsets:
- name: v1 # 2
labels:
version: v1 # 3
- name: v2
labels:
version: v2
- рд╣реЛрд╕реНрдЯ (
host
) рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рдХреА рдЬреЗрд╡реНрд╣рд╛ рдорд╛рд░реНрдЧ рд╕реЗрд╡реЗрдХрдбреЗ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛рдЪ рд╣рд╛ рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЛsa-logic
; - рд╢реАрд░реНрд╖рдХреЗ (
name
) рдЙрдкрд╕рдВрдЪ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╛рдареА рд░рд╛рдЙрдЯ рдХрд░рддрд╛рдирд╛ рдЙрдкрд╕рдВрдЪ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд; - рд▓реЗрдмрд▓ (
label
) рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдЬреЛрдбреНрдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рдЬреНрдпрд╛ рдЙрдкрд╕рдВрдЪрд╛рдЪрд╛ рднрд╛рдЧ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдЙрджрд╛рд╣рд░рдгреЗ рдЬреБрд│рд▓реА рдкрд╛рд╣рд┐рдЬреЗрдд.
рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢рд╛рд╕рд╣ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рд╛:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created
рдЖрддрд╛ рдЙрдкрд╕рдВрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдЖрдореНрд╣реА рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрддреЛ рдЖрдгрд┐ рд╕рд╛-рд▓реЙрдЬрд┐рдХрдЪреНрдпрд╛ рд╡рд┐рдирдВрддреАрд╡рд░ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддреЛ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ:
- рдЙрдкрд╕рдореВрд╣рд╛рд╡рд░ рд░рд╛рдЙрдЯ рдХреЗрд▓реЗ
v1
, - рдПрдХрд╛ рдЙрдкрд╕рдореВрд╣рд╛рд╡рд░ рдорд┐рд░рд░ рдХреЗрд▓реЗ
v2
.
рдЦрд╛рд▓реАрд▓ рдЬрд╛рд╣реАрд░рдирд╛рдорд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдпреЛрдЬрдирд╛ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЛ (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
mirror:
host: sa-logic
subset: v2
рдпреЗрдереЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА, рдореНрд╣рдгреВрди рддреЗ рдлрдХреНрдд рдХреГрддреАрдд рдкрд╛рд╣реВрдпрд╛:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдХреЙрд▓ рдХрд░реВрди рд▓реЛрдб рдЬреЛрдбреВрдпрд╛:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
рдЪрд▓рд╛ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдордзреАрд▓ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣реВ, рдЬрд┐рдереЗ рдЖрдкрдг рдмрдЧреНрд╕ рдЕрд╕рд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА рдкрд╛рд╣реВ рд╢рдХрддрд╛ (buggy
).
sa-logic рд╕реЗрд╡реЗрдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдЪреЗ рдпрд╢рд╕реНрд╡реА рдкреНрд░рддрд┐рд╕рд╛рдж
рдЖрдордЪреНрдпрд╛ рд╕реЗрд╡рд╛рдВрдЪреНрдпрд╛ рджреВрддрд╛рдВрдирд╛ VirtualService рдХрд╢реА рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рддреЗ рд╣реЗ рдЖрдореНрд╣реА рдкреНрд░рдердо рдкрд╛рд╣рд┐рд▓реЗ: рдХрдзреА sa-web-app
рд▓рд╛ рд╡рд┐рдирдВрддреА рдХрд░рддреЛ sa-logic
, рд╣реЗ рд╕рд╛рдЗрдбрдХрд╛рд░ рдПрдиреНрд╡реЙрдпрдордзреВрди рдЬрд╛рддреЗ, рдЬреЗ - VirtualService рджреНрд╡рд╛рд░реЗ - рд╡рд┐рдирдВрддреАрд▓рд╛ v1 рдЙрдкрд╕рдореВрд╣рд╛рд╡рд░ рдЬрд╛рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд┐рдирдВрддреАрд▓рд╛ рд╕реЗрд╡реЗрдЪреНрдпрд╛ v2 рдЙрдкрд╕рдВрдЪрд╛рд╕рд╛рдареА рдорд┐рд░рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. sa-logic
.
рдорд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдкрд╛рд╕реВрди рд╡рд╛рдЯреЗрд▓ рдХреА рдЖрднрд╛рд╕реА рд╕реЗрд╡рд╛ рд╕реЛрдкреА рдЖрд╣реЗ. рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд, рдЖрдореНрд╣реА рддреЗ рдЦрд░реЛрдЦрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рд╕рд╛рдВрдЧреВрди рддреНрдпрд╛рдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВ.
рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯреНрд╕
рдХреЕрдирд░реА рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдереЛрдбреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЖрдгрдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ. рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ рдХреЛрдгрддреАрд╣реА рдЕрдбрдЪрдг рдпреЗрдд рдирд╛рд╣реА рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ, рддреНрдпрд╛рдЪреНрдпрд╛ (рд░рд┐рд▓реАрдЭрдЪреНрдпрд╛) рдЧреБрдгрд╡рддреНрддреЗрд╡рд░ рдЖрдзреАрдЪ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡реВрди, рддреЗ рдЗрддрд░ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рд╛.╨╛рдореЛрдареЗ рдкреНрд░реЗрдХреНрд╖рдХ.
рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЙрдкрд╕рдореВрд╣рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡реВ buggy
╤Г sa-logic
.
рдЪрд▓рд╛ рдХреНрд╖реБрд▓реНрд▓рдХ рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рд╡реЗрд│ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡реВ рдирдХрд╛ рдЖрдгрд┐ 20% рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдмрдЧрд╕рд╣ рдЖрд╡реГрддреНрддреАрд╡рд░ рддреНрд╡рд░рд┐рдд рдкрд╛рдард╡реВ (рд╣реЗ рдЖрдордЪреНрдпрд╛ рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрд▓), рдЖрдгрд┐ рдЙрд░реНрд╡рд░рд┐рдд 80% рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрд╡реЗрд╕рд╛рдареА. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЦрд╛рд▓реАрд▓ VirtualService рд╡рд╛рдкрд░рд╛ (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 80 # 1
- destination:
host: sa-logic
subset: v2
weight: 20 # 1
1 рд╡рдЬрди рдЖрд╣реЗ (weight
), рдЬреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рдХрдбреЗ рдХрд┐рдВрд╡рд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЙрдкрд╕рдВрдЪрд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рдЯрдХреНрдХреЗрд╡рд╛рд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ.
рд╕рд╛рдареА рдорд╛рдЧреАрд▓ VirtualService рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░реВрдпрд╛ sa-logic
рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢рд╛рд╕рд╣:
$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured
... рдЖрдгрд┐ рдЖрдореНрд╣реА рд▓рдЧреЗрдЪ рдкрд╛рд╣реВ рдХреА рдХрд╛рд╣реА рд╡рд┐рдирдВрддреНрдпрд╛ рдЕрдкрдпрд╢реА рдард░рддрд╛рдд:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}'
--silent -w "Time: %{time_total}s t Status: %{http_code}n"
-o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500
рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рд╕рдХреНрд╖рдо рдХрд░рддрд╛рдд: рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдореНрд╣реА рд╕рдорд╕реНрдпрд╛рдВрдЪрд╛ рд╕рдВрднрд╛рд╡реНрдп рдкреНрд░рднрд╛рд╡ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдмреЗрд╕рдЪреНрдпрд╛ 20% рдкрд░реНрдпрдВрдд рдХрдореА рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдЕрдкреНрд░рддрд┐рдо! рдЖрддрд╛, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдмрддреАрдд рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдХреЛрдбрдмрджреНрджрд▓ рдЦрд╛рддреНрд░реА рдирд╕рддреЗ (рджреБрд╕рд░реНтАНрдпрд╛ рд╢рдмреНрджрд╛рдд - рдиреЗрд╣рдореА...), рдЖрдореНрд╣реА рдорд┐рд░рд░рд┐рдВрдЧ рдЖрдгрд┐ рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ.
рдХрд╛рд▓рдмрд╛рд╣реНрдпрддрд╛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди
рдкрд░рдВрддреБ рдмрдЧ рдиреЗрд╣рдореАрдЪ рдХреЛрдбрдордзреНрдпреЗ рд╕рдВрдкрдд рдирд╛рд╣реАрдд. рдпрд╛рджреАрдд "
рдкреНрд░рд╛рддреНрдпрдХреНрд╖рд┐рдХрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдЖрд╡реГрддреНрддреА рд╡рд╛рдкрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡реВ sa-logic
(buggy
), рдЖрдгрд┐ рдЖрдореНрд╣реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдкрдпрд╢рд╛рдВрд╕рд╣ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддреЗрдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░реВ.
рдмрдЧрд╕рд╣ рдЖрдордЪреНрдпрд╛ рд╕реЗрд╡реЗрд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рд╡реЗрд│ рд▓рд╛рдЧрдгреНрдпрд╛рдЪреА 1/3 рд╕рдВрдзреА, рдЕрдВрддрд░реНрдЧрдд рд╕рд░реНрд╡реНрд╣рд░ рддреНрд░реБрдЯреАрд╕рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдгреНрдпрд╛рдЪреА 1/3 рд╕рдВрдзреА рдЖрдгрд┐ рдкреГрд╖реНрда рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдкрд░рдд рдпреЗрдгреНрдпрд╛рдЪреА 1/3 рд╕рдВрдзреА рдЕрд╕реВ рджреНрдпрд╛.
рдЕрд╢рд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪрд╛ рдкреНрд░рднрд╛рд╡ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЬреАрд╡рди рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╣реЗ рдХрд░реВ рд╢рдХрддреЛ:
- рд╕реЗрд╡реЗрд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдгреНрдпрд╛рд╕рд╛рдареА 8 рд╕реЗрдХрдВрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧрд▓реНрдпрд╛рд╕ рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЬреЛрдбрд╛,
- рд╡рд┐рдирдВрддреА рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛.
рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╡рд╛рдкрд░реВ.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 50
- destination:
host: sa-logic
subset: v2
weight: 50
timeout: 8s # 1
retries:
attempts: 3 # 2
perTryTimeout: 3s # 3
- рд╡рд┐рдирдВрддреАрдЪреА рдХрд╛рд▓рдмрд╛рд╣реНрдпрддрд╛ 8 рд╕реЗрдХрдВрджрд╛рдВрд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реА рдЖрд╣реЗ;
- рд╡рд┐рдирдВрддреНрдпрд╛ 3 рд╡реЗрд│рд╛ рдкреБрдиреНрд╣рд╛ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд;
- рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рд╡реЗрд│ 3 рд╕реЗрдХрдВрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рд▓реНрдпрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрддреНрди рдЕрдпрд╢рд╕реНрд╡реА рдорд╛рдирд▓рд╛ рдЬрд╛рддреЛ.
рд╣реЗ рдПрдХ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрд╣реЗ рдХрд╛рд░рдг рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ 8 рд╕реЗрдХрдВрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕ рдкреНрд░рддрд┐рд╕рд╛рдж рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рддреАрди рдирд╡реАрди рдкреНрд░рдпрддреНрди рдХрд░реВ, рдпрд╢рд╕реНрд╡реА рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рд╡рд╛рдврд╡реВ.
рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢рд╛рд╕рд╣ рдЕрджреНрдпрддрдирд┐рдд рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рд╛:
$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured
рдЖрдгрд┐ рдЧреНрд░рд╛рдлрдирд╛ рдЖрд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рддрдкрд╛рд╕рд╛ рдХреА рд╡рд░реАрд▓ рдпрд╢рд╕реНрд╡реА рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд▓реА рдЖрд╣реЗ:
рдХрд╛рд▓рдмрд╛рд╣реНрдпрддрд╛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдЬреЛрдбрд▓реНрдпрд╛рдирдВрддрд░ рдпрд╢рд╕реНрд╡реА рдкреНрд░рддрд┐рд╕рд╛рдж рдЖрдХрдбреЗрд╡рд╛рд░реАрдд рд╕реБрдзрд╛рд░рдгрд╛
рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛рдгреНрдпрд╛рдкреВрд░реНрд╡реА (рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдРрд╡рдЬреА, рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдкреБрдвреАрд▓ рднрд╛рдЧрд╛рдХрдбреЗ, рдХрд╛рд░рдг рдпрд╛рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рдпреЛрдЧ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реАрдд - рдЕрдВрджрд╛рдЬреЗ рднрд╛рд╖рд╛рдВрддрд░.), рд╣рдЯрд╡рд╛ sa-logic-buggy
рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡реВрди VirtualService:
$ kubectl delete deployment sa-logic-buggy
deployment.extensions тАЬsa-logic-buggyтАЭ deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io тАЬsa-logicтАЭ deleted
рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ рдЖрдгрд┐ рдмрд▓реНрдХрд╣реЗрдб рдирдореБрдиреЗ
рдЖрдореНрд╣реА рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреАрд▓ рджреЛрди рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдирдореБрдиреНрдпрд╛рдВрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рдд: рдЪреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд (рд╕реНрд╡-рдЙрдкрдЪрд╛рд░) рд╕реЗрд╡рд╛.
рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ ("рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░") рдЕрд╕реНрд╡рд╛рд╕реНрдереНрдпрдХрд░ рдорд╛рдирд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд╕реЗрд╡реЗрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреА рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ, рддрд░ рдХреНрд▓рд╛рдпрдВрдЯ рд╡рд┐рдирдВрддреНрдпрд╛ рддреНрдпрд╛ рд╕реЗрд╡реЗрдЪреНрдпрд╛ рдирд┐рд░реЛрдЧреА рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╡рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд (рдЬреНрдпрд╛рдореБрд│реЗ рдпрд╢рд╕реНрд╡реА рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдВрдЪреА рдЯрдХреНрдХреЗрд╡рд╛рд░реА рд╡рд╛рдврддреЗ). (рдЯреАрдк: рдирдореБрдирд╛рдЪреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдЖрдврд│реВ рд╢рдХрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде,
рдмрд▓реНрдХрд╣реЗрдб ("рд╡рд┐рднрд╛рдЬрди") рд╕рдВрдкреВрд░реНрдг рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рд╕реЗрд╡рд╛ рдЕрдкрдпрд╢рд╛рдВрдирд╛ рд╡реЗрдЧрд│реЗ рдХрд░рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реЗрд╡рд╛ B рддреБрдЯрд▓реЗрд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рджреБрд╕рд░реА рд╕реЗрд╡рд╛ (рд╕рд░реНрд╡реНрд╣рд┐рд╕ B рдЪрд╛ рдХреНрд▓рд╛рдпрдВрдЯ) рд╕рд░реНрд╡реНрд╣рд┐рд╕ B рд▓рд╛ рд╡рд┐рдирдВрддреА рдХрд░рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рддрд┐рдЪрд╛ рдереНрд░реЗрдб рдкреВрд▓ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдпреЗрддреЛ рдЖрдгрд┐ рдЗрддрд░ рд╡рд┐рдирдВрддреНрдпрд╛ (рдЬрд░реА рд╕реЗрд╡рд╛ B рдордзреАрд▓ рдирд╕рд▓реНрдпрд╛ рддрд░реАрд╣реА) рд╕реЗрд╡рд╛ рджреЗрдК рд╢рдХрдд рдирд╛рд╣реАрдд. (рдЯреАрдк: рдирдореБрдирд╛рдЪреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдЖрдврд│реВ рд╢рдХрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде,
рдореА рдпрд╛ рдирдореБрдиреНрдпрд╛рдВрдЪреЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рддрдкрд╢реАрд▓ рд╡рдЧрд│реЗрди рдХрд╛рд░рдг рддреЗ рд╢реЛрдзрдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ
рдЕрдиреБрд╡рд╛рджрдХрд╛рдХрдбреВрди рдкреБрдирд╢реНрдЪ
рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:
- "рдЗрд╕реНрдЯрд┐рдУрд╕рд╣ рдорд╛рдпрдХреНрд░реЛ рд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рдХрдбреЗ рдкрд░рдд рдЬрд╛":
рднрд╛рдЧ рез (рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪрд╛ рдкрд░рд┐рдЪрдп) ,рднрд╛рдЧ 3 (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддрд╛) ; - ┬л
рдХрдВрдбреНрдпреБрдЯ - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╕рд╛рдареА рд╣рд▓рдХреА рд╕реЗрд╡рд╛ рдЬрд╛рд│реА "; - ┬л
рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдореЗрд╢ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп рдЖрдгрд┐ рдорд▓рд╛ [рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рд╕рд╣ рдХреНрд▓рд╛рдЙрдб рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА] рдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЖрд╣реЗ? ┬╗.
рд╕реНрддреНрд░реЛрдд: www.habr.com