рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред : рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЗрд╕реНрддрд┐рдпреЛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛ред рдЕрдм рд╣рдо рдЗрд╕ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд╣рд▓реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрддрд▓реЗ рдЯреНрдпреВрдирд┐рдВрдЧ рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рд╣рдо рдЖрдкрдХреЛ рдпрд╣ рднреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЗрдЦ istio-mastery рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯреНрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдмрдВрдзрди
Istio рдХреЗ рд╕рд╛рде, рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ:
- рдЧрддрд┐рд╢реАрд▓ рдХреНрд╡реЗрд░реА рд░реВрдЯрд┐рдВрдЧ : рдХреИрдирд░реА рд░реЛрд▓рдЖрдЙрдЯ, рдП / рдмреА рдкрд░реАрдХреНрд╖рдг;
- рднрд╛рд░ рд╕рдВрддреБрд▓рди : рд╣реИрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд░рд▓ рдФрд░ рд╕реБрд╕рдВрдЧрдд;
- рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд░рд┐рдХрд╡рд░реА : рдЯрд╛рдЗрдордЖрдЙрдЯ, рд░рд┐рдЯреНрд░реАрдЯ, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░;
- рджреЛрд╖ рдЗрдирдкреБрдЯ : рд╡рд┐рд▓рдВрдм, рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╡реНрдпрд╡рдзрд╛рди, рдЖрджрд┐ред
рд▓реЗрдЦ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЪрдпрдирд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдкрд╣рд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛
DestinationRules
(рдпрд╛рдиреА рдЯреНрд░реИрдлрд╝рд┐рдХ / рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдпрдо - рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж) рд╣реЛрдЧреА , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдП / рдмреА рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред
рдП / рдмреА рдЯреЗрд╕реНрдЯрд┐рдВрдЧ: рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рдирд░рд▓реНрд╕ рдЗрди рдкреНрд░реИрдХреНрдЯрд┐рд╕
рдП / рдмреА рдкрд░реАрдХреНрд╖рдг рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╡реЗрджрди рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ (рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ) рдФрд░ рд╣рдо 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдХреМрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рддрдЪреАрдд рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рде рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред
рдП / рдмреА рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реАрдорд╛рдВрдд рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
$ 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
рд▓реЗрдмрд▓,
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
рдмрд╛рдж
VirtualService рд╡рд╛рдВрдЫрд┐рдд рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рд╣реИ, DestinationRules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╣рдо рдЙрди рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдд рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреА:
рдЗрд╕реНрдЯрд┐рдпреЛ рд░рд┐рд╕реЛрд░реНрд╕ рдЯреНрд░реИрдлрд┐рдХ рдореИрдиреЗрдЬрдореЗрдВрдЯрдиреЛрдЯ : рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░ 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
рдиреЛрдЯ : рд╣реЗрдбрд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
рдЗрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ Chrome
(рдпрд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рдЧрднрдЧ - рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рдиред) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЧрдВрддрд╡реНрдп рд╕рдВрддреБрд▓рди рд▓реЛрдб рд╕рдВрддреБрд▓рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рд╡рд┐рд╡рд░рдг рдХреЗ
рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
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
рдорд┐рд░рд░рд┐рдВрдЧ: рд╡рд░реНрдЪреБрдЕрд▓ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЗрди рдкреНрд░реИрдХреНрдЯрд┐рд╕
рд╢реИрдбрд┐рдВрдЧ
("рдкрд░рд┐рд░рдХреНрд╖рдг") рдпрд╛ рдорд┐рд░рд░рд┐рдВрдЧ
("рдорд┐рд░рд░рд┐рдВрдЧ") рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ ("рджрд░реНрдкрдг") рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦреЛред
рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдпрд╣ рддрдм рд╣реИ рдЬрдм рдЖрдкрдХрд╛ (рдП) рд╕рд╣рдпреЛрдЧреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЗ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрдВрджрдЧреА рдХреА рдЗрддрдиреА рдмрдбрд╝реА рдЧрд╛рдВрда рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдмрдЧреНрд╕ (
buggy
) рдХреЗ рд╕рд╛рде рдПрд╕рдП-рд▓реЙрдЬрд┐рдХ рдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml deployment.extensions/sa-logic-buggy created
рдФрд░ рдЕрдм рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐
app=sa-logic
рд╕рд╛рде рд╕рднреА рдЙрджрд╛рд╣рд░рдг
app=sa-logic
рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓
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 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдирд┐рдпрдо рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдмрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП VirtualService рдХреЗ рд╕рдмрд╕реЗрдЯ рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рд░реВрд▓реНрд╕ рдореЗрдВ рд╕рдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (
sa- рддрд░реНрдХ-рдЙрдкрд╕рдореБрдЪреНрдЪрдп-рдЧрдВрддрд╡реНрдп- рд╢реНрдпрд╛рдо) рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
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
рдирд┐рд░реНрдзрд╛рд░рд┐рдд host
рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдо рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдорд╛рд░реНрдЧ sa-logic
рдУрд░ рдЬрд╛рддрд╛ рд╣реИ;- рд╕рдмрд╕реЗрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд░реВрдЯ рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗрдЯ рдХрд╛ рдирд╛рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдПрдХ рд▓реЗрдмрд▓ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╡рд╛рд▓реЗ рдЬреЛрдбрд╝реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЙрдкрд╕рдореБрдЪреНрдЪрдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
$ 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
рдЖрдЗрдП рдЧреНрд░рд╛рдлреНрдирд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдЬрд╣рд╛рдВ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ 60% рдХреЗ рд▓рд┐рдП
buggy
рд╕рдВрд╕реНрдХрд░рдг рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреНрд░реИрд╢ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реЗрд╡рд╛ рд╣реИред
рд╕рд╛-рд▓реЙрдЬрд┐рдХ рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдлрд▓рддрд╛рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рджреЗрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ VirtualService рдХреЛ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рджреВрддреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЬрдм
sa-web-app
sa-logic
рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ sidecar Envoy рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЬреЛ - VirtualService рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рд╕рдмрд╕реЗрдЯ v1 рдФрд░ рджрд░реНрдкрдг рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд░реВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ sa-
sa-logic
рдХреЗ v2 рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдзред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рдерд╛ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╕рд░рд▓ рд╣реИрдВред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рд╣реИрдВред
рдХреИрдирд░реА рд░реЛрд▓
рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреА рдкрд░реНрдпрд╛рдкреНрдд (рд░рд┐рд▓реАрдЬ) рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕реЗ рдмрдбрд╝реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреИрдирд░реА рд░реЛрд▓рдЖрдЙрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
sa-logic
рдореЗрдВ
buggy
рд╕рдмрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред
рдЪрд▓реЛ рдЙрд╕ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВ рдФрд░ рддреБрд░рдВрдд 20% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреЗрдЬреЗрдВ (рдпрд╣ рд╣рдорд╛рд░реЗ рдХреИрдирд░реА рд░реЛрд▓рдЖрдЙрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛), рдФрд░ рд╢реЗрд╖ 80% рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд VirtualService (
sa- рддрд░реНрдХ-рдЙрдкрд╕рдореБрдЪреНрдЪрдп-рдХреИрдирд░реА-рдбрд┐рд╕рдорд┐рд▓ ) рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
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 рд╡рдЬрди рд╣реИ, рдЬреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯред
рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ
sa-logic
sa-
sa-logic
рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ VirtualService рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрджреНрдпрддрди рдХрд░реЗрдВ:
$ 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
VirtualServices рдХреИрдирд░реА рд░реЛрд▓рдЖрдЙрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рдХреЗ 20% рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ред рд╡рд╛рд╣! рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрд╢рд╛ ...), рд╣рдо рдорд┐рд░рд░рд┐рдВрдЧ рдФрд░ рдХреИрдирд┐рдВрдЧ рд░реЛрд▓рдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдордп рдФрд░ рд░рд┐рдЯреНрд░реАрдЯ
рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреАрдбрд╝реЗ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рд░ "
рд╡рд┐рддрд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ 8 рддреНрд░реБрдЯрд┐рдпрд╛рдВ " рдХреА рд╕реВрдЪреА рдореЗрдВ, рдЧрд▓рдд рд░рд╛рдп рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдХрд┐ "рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп
рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░
рд░рд┐рдЯреНрд░реАрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо
sa-logic
(
buggy
) рдХреЗ
sa-logic
рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдиреЗрдЯрд╡рд░реНрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдП рдмрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП 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-
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
рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ рдФрд░ рдмрд▓реНрдХрд╣реЗрдб рдкреИрдЯрд░реНрди
рд╣рдо рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЖрдк
рд╕реЗрд▓реНрдл-рд╣реАрд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ ("рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдРрд╕реА рд╕реЗрд╡рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрд╕реНрд╡рд╕реНрде рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рд╕реНрд╡рд╕реНрде рдЙрджрд╛рд╣рд░рдгреЛрдВ (рдЬреЛ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рдмрдврд╝рд╛рддрд╛ рд╣реИ) рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
(рдиреЛрдЯ: рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ ред)рдмрд▓реНрдХрд╣реЗрдб ("рд╡рд┐рднрд╛рдЬрди") рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╣рд╛рд░ рд╕реЗ рд╕реЗрд╡рд╛ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡рд╛ рдмреА рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреНрдп рд╕реЗрд╡рд╛ (рд╕реЗрд╡рд╛ рдмреА рдХрд╛ рдЧреНрд░рд╛рд╣рдХ) рд╕реЗрд╡рд╛ рдмреА рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рдЕрдкрдиреЗ рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рднрд▓реЗ рд╣реА рд╡реЗ рд╕реЗрд╡рд╛ рдмреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рди рд╣реЛрдВ)ред
(рдиреЛрдЯ: рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ ред)рдореИрдВ рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИрдВ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕ рдкрд░ рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕.
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ: