рдиреЛрдЯред рдЕрдиреБрд╡рд╛рджред:
рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдкрдирд┐ рд╕рдореНрдЭрд╛рдЙрдБрдЫреМрдВ рдХрд┐ рд▓реЗрдЦрд▓реЗ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВ (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░ рдЗрд╕реНрдЯрд┐рдпреЛрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХрдЯ рдЧрд░реНрджрдЫ) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред
рдЯреНрд░рд╛рдлрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
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 рд╣реЗрдбрд░ред рдЧрдиреНрддрд╡реНрдп рдирд┐рдпрдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд▓рд╛рдЧреВ рдЧрд░рд┐рдпреЛред
рдЧрдиреНрддрд╡реНрдп рдирд┐рдпрдорд╣рд░реВ
рдкрдЫрд┐ рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛ рдЗрдЪреНрдЫрд┐рдд рд╕реЗрд╡рд╛рдорд╛ рдЕрдиреБрд░реЛрдз рдкрдард╛рдЗрдпреЛ, рдЧрдиреНрддрд╡реНрдп рдирд┐рдпрдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╣рд╛рдореА рдиреАрддрд┐рд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдЬреБрди рдпрд╕ рд╕реЗрд╡рд╛рдХреЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЧрдиреНрддрд╡реНрдпрдорд╛ рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреЗрдЫ:
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
рднрдиреНрдиреБ: рд╣реЗрдбрд░рдорд╛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдирд╣рд░реВ рдердкреНрди рд░ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рд╕реАрдзрд╛ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди, рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдЧрдиреНрддрд╡реНрдп рдирд┐рдпрдорд╣рд░реВрдорд╛ рд▓реЛрдб рд╕рдиреНрддреБрд▓рдирдХреЛ рдХреНрд╖реЗрддреНрд░рдорд╛ рдЕрдзрд┐рдХ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдЫрдиреН - рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН
VirtualService рдХреЛ рдердк рдЕрдзреНрдпрдпрди рдЧрд░реНрдиреБ рдЕрдШрд┐, рдирд┐рдореНрди рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдПрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ "рд╣рд░рд┐рдпреЛ рд╕рдВрд╕реНрдХрд░рдг" рд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЯреНрд░рд╛рдлрд┐рдХ рджрд┐рд╢рд╛ рдирд┐рдпрдо рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН:
$ 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
рдорд┐рд░рд░рд┐рдЩ: рдЕрднреНрдпрд╛рд╕рдорд╛ рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛рд╣рд░реВ
рдЫрд╛рдпрд╛ ("рдХрд╡рдЪ") рд╡рд╛ рдорд┐рд░рд░рд┐рдЩ ("рдорд┐рд░рд░рд┐рдЩ") рд╣рд╛рдореА рдЕрдиреНрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЕрд╕рд░ рдирдЧрд░реА рдЙрддреНрдкрд╛рджрдирдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирдХреЛ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рдЪрд╛рд╣рдиреЗ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ: рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рджреЛрд╕реНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ ("рдорд┐рд░рд░") рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЧрд░реНрдЫреМрдВ рдЬрд╣рд╛рдБ рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред рд╕рд░рд▓ рд╢рдмреНрджрдорд╛ рднрдиреНрдиреБрдкрд░реНрджрд╛, рдпреЛ рддрдм рд╣реБрдиреНрдЫ рдЬрдм рддрдкрд╛рдЗрдБрдХреЛ рд╕рд╣рдХрд░реНрдореАрд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рдЫрд╛рдиреНрдЫ рд░ рдлреЛрд╣реЛрд░рдХреЛ рдпрддрд┐ рдареВрд▓реЛ рдЧрд╛рдБрдареЛрдХреЛ рд░реВрдкрдорд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ рдХрд┐ рдХрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рдореИ рд╕рдореАрдХреНрд╖рд╛ рдЧрд░реНрди рд╕рдХреНрджреИрдиред
рдпрд╕ рдкрд░рд┐рджреГрд╢реНрдпрд▓рд╛рдИ рдХрд╛рд░реНрдпрдорд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди, рдмрдЧрд╣рд░реВрд╕рдБрдЧ SA-Logic рдХреЛ рджреЛрд╕реНрд░реЛ рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ (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 рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ:
рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ VirtualService рдорд╛рд░реНрдлрдд 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
рдЕрдм рдЬрдм рд╕рдмрд╕реЗрдЯрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЫрдиреН, рд╣рд╛рдореА рдЕрдЧрд╛рдбрд┐ рдмрдвреНрди рд╕рдХреНрдЫреМрдВ рд░ рд╕рд╛-рд▓рдЬрд┐рдХрдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рдирд┐рдпрдорд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди VirtualService рд▓рд╛рдИ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВ:
- рдЙрдкрд╕рдореВрд╣рдорд╛ рд░реБрдЯ рдЧрд░рд┐рдпреЛ
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
Grafana рдорд╛ рдирддрд┐рдЬрд╛рд╣рд░реВ рд╣реЗрд░реМрдВ, рдЬрд╣рд╛рдБ рддрдкрд╛рдЗрдБ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдмрдЧрд╣рд░реВрдХреЛ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг (buggy
) ~ 60% рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╕рдлрд▓рддрд╛рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ, рддрд░ рдпреА рд╡рд┐рдлрд▓рддрд╛рд╣рд░реВ рдордзреНрдпреЗ рдХреБрдиреИрд▓реЗ рдкрдирд┐ рдЕрдиреНрддрд┐рдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрди рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕реЗрд╡рд╛рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдЗрдиреНрдЫред
sa-logic рд╕реЗрд╡рд╛рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВ
рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рджреЗрдЦреНрдпреМрдВ рдХрд┐ рдХрд╕рд░реА VirtualService рд╣рд╛рдореНрд░рд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рджреВрддрд╣рд░реВрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ: рдХрд╣рд┐рд▓реЗ sa-web-app
рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ sa-logic
, рдпреЛ рд╕рд╛рдЗрдбрдХрд╛рд░ рджреВрдд рдорд╛рд░реНрдлрдд рдЬрд╛рдиреНрдЫ, рдЬреБрди - VirtualService рдорд╛рд░реНрдлрдд - рдЕрдиреБрд░реЛрдзрд▓рд╛рдИ v1 рд╕рдмрд╕реЗрдЯрдорд╛ рд░реБрдЯ рдЧрд░реНрди рд░ рд╕реЗрд╡рд╛рдХреЛ v2 рдЙрдкрд╕рдореВрд╣рдорд╛ рдЕрдиреБрд░реЛрдз рдорд┐рд░рд░ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред sa-logic
.
рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рддрдкрд╛рдИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реЛрдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛рд╣рд░реВ рд╕рд░рд▓ рдЫред рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛, рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВ рдкрдирд┐ рд╕рд╛рдБрдЪреНрдЪреИ рдЙрддреНрдХреГрд╖реНрдЯ рдЫрдиреН рднрдиреА рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред
рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ
рдХреНрдпрд╛рдирд░реА рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рднрдиреЗрдХреЛ рдереЛрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рд░реЛрд▓ рдЖрдЙрдЯ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛред рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рдХрд┐ рд░рд┐рд▓реАрдЬрдорд╛ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдЫреИрди рд░ рддреНрдпрд╕ рдкрдЫрд┐ рдорд╛рддреНрд░, рдпрд╕рдХреЛ (рд░рд┐рд▓рд┐рдЬрдХреЛ) рдЧреБрдгрд╕реНрддрд░рдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд┐рд╢реНрд╡рд╕реНрдд рднрдПрд░, рдпрд╕рд▓рд╛рдИ рдЕрдиреНрдп рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред╨╛рдареВрд▓реЛ рджрд░реНрд╢рдХред
рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рд╣рд╛рдореА рдПрдЙрдЯрд╛ рдЙрдкрд╕рдореВрд╣рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫреМрдВ buggy
╤Г sa-logic
.
рдЯреНрд░рд╛рдЗрдлрд▓реНрд╕рдорд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирдЧрд░реМрдВ рд░ рддреБрд░реБрдиреНрддреИ 20% рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдмрдЧрд╣рд░реВрдХреЛ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН (рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫ), рд░ рдмрд╛рдБрдХреА 80% рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрд╡рд╛рдорд╛ред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдирд┐рдореНрди рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН (
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
рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛рд╣рд░реВрд▓реЗ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ рд╕рдХреНрд╖рдо рдкрд╛рд░реНрдЫ: рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рдкреНрд░рднрд╛рд╡рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░рдХреЛ реиреж% рдорд╛ рд╕реАрдорд┐рдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдЕрджреНрднреБрдд! рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЬрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдХреЛрдб рдмрд╛рд░реЗ рдирд┐рд╢реНрдЪрд┐рдд рдЫреИрдиреМрдВ (рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛ - рд╕рдзреИрдВ...), рд╣рд╛рдореА рдорд┐рд░рд░рд┐рдЩ рд░ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
рдЯрд╛рдЗрдордЖрдЙрдЯ рд░ рдкреБрди: рдкреНрд░рдпрд╛рд╕рд╣рд░реВ
рддрд░ рдмрдЧрд╣рд░реВ рд╕рдзреИрдВ рдХреЛрдбрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдБрджреИрдиред рд╕реВрдЪреАрдорд╛ рдмрд╛рдЯ "
рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫреМрдВ 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
рд░ Grafana рдЧреНрд░рд╛рдлрд╣рд░реВрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдорд╛рдерд┐ рдмрдвреЗрдХреЛ рдЫ:
рдЯрд╛рдЗрдордЖрдЙрдЯ рд░ рдкреБрди: рдкреНрд░рдпрд╛рд╕рд╣рд░реВ рдердкреЗрдкрдЫрд┐ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВрдорд╛ рд╕реБрдзрд╛рд░рд╣рд░реВ
рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБ рдЕрдШрд┐ (рд╡рд╛ рдмрд░реБ, рд▓реЗрдЦрдХреЛ рдЕрд░реНрдХреЛ рднрд╛рдЧрдорд╛, рдХрд┐рдирднрдиреЗ рдпрд╕рдорд╛ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╣реБрдиреЗрдЫреИрдирдиреН - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред), рдореЗрдЯрд╛рдЙрди sa-logic-buggy
рд░ рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛ рдирд┐рдореНрди рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдПрд░:
$ 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 рдмрд╛рдЯ рд╣реЛрдЗрдирдиреН)ред (рдиреЛрдЯ: рдврд╛рдБрдЪрд╛рдХреЛ рдердк рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐,
рдо рдпреА рдврд╛рдБрдЪрд╛рд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгрд╣рд░реВ рд╣рдЯрд╛рдЙрдиреЗрдЫреБ рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫрдиреН
рдЕрдиреБрд╡рд╛рджрдХрдмрд╛рдЯ PS
рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:
- "рдЗрд╕реНрдЯрд┐рдУрдХреЛ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВрдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реН":
рднрд╛рдЧ рез (рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрдХреЛ рдкрд░рд┐рдЪрдп) ,рднрд╛рдЧ рей (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг) ; - ┬л
рдХрдиреНрдбреНрдпреБрдЯ - Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд▓реНрдХрд╛ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ ┬╗; - ┬л
рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХреЗ рд╣реЛ рд░ рдорд▓рд╛рдИ рдХрд┐рди рдЪрд╛рд╣рд┐рдиреНрдЫ [рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рдХреЛ рд╕рд╛рде рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐]? "ред
рд╕реНрд░реЛрдд: www.habr.com