Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2

рдиреЛрдЯред рдЕрдиреБрд╡рд╛рджред: рдкрд╣рд┐рд▓реЛ рднрд╛рдЧ рдпреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ Istio рдХреНрд╖рдорддрд╛рд╣рд░реВ рдкрд░рд┐рдЪрдп рдЧрд░реНрди рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╛рд░реНрдпрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдорд░реНрдкрд┐рдд рдерд┐рдпреЛред рдЕрдм рд╣рд╛рдореА рдпреЛ рд╕реЗрд╡рд╛ рдЬрд╛рд▓рдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд░ рдкреНрд░рдпреЛрдЧрдХреЛ рдердк рдЬрдЯрд┐рд▓ рдкрдХреНрд╖рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдЯреНрдпреБрди рдЧрд░рд┐рдПрдХреЛ рд░реВрдЯрд┐рдЩ рд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░рд╛рдлрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирдХреЛ рдмрд╛рд░реЗрдорд╛ред

рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдкрдирд┐ рд╕рдореНрдЭрд╛рдЙрдБрдЫреМрдВ рдХрд┐ рд▓реЗрдЦрд▓реЗ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВ (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░ рдЗрд╕реНрдЯрд┐рдпреЛрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХрдЯ рдЧрд░реНрджрдЫ) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред istio-mastery.

рдЯреНрд░рд╛рдлрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

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

"рд╣рд░рд┐рдпреЛ рд╕рдВрд╕реНрдХрд░рдг" рдХреЛ рд▓рд╛рдЧреА рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯ рджреБрдИ рдард╛рдЙрдБрдорд╛ рдлрд░рдХ рдЫ:

  1. рдЫрд╡рд┐ рдлрд░рдХ рдЯреНрдпрд╛рдЧрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ - istio-green,
  2. рдкреЛрдбрдорд╛ рд▓реЗрдмрд▓ рдЫ version: green.

рдХрд┐рдирдХрд┐ рджреБрдмреИ рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдорд╛ рд▓реЗрдмрд▓ рдЫ app: sa-frontend, рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рд░реВрдЯ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ sa-external-services рд╕реЗрд╡рд╛рдХреЛ рд▓рд╛рдЧрд┐ sa-frontend, рдпрд╕рдХреЛ рд╕рдмреИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдкреБрди: рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧрд░рд┐рдиреЗрдЫ рд░ рд▓реЛрдб рдорд╛рд░реНрдлрдд рд╡рд┐рддрд░рдг рдЧрд░рд┐рдиреЗрдЫ рд░рд╛рдЙрдиреНрдб рд░реЛрдмрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдЬрд╕рд▓реЗ рдирд┐рдореНрди рдЕрд╡рд╕реНрдерд╛рдХреЛ рдиреЗрддреГрддреНрд╡ рдЧрд░реНрдиреЗрдЫ:

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2
рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд░реЗрдирдиреН

рдпреА рдлрд╛рдЗрд▓рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд░реЗрдирдиреН рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛ рдлрд░рдХ рдирд╛рдо рд░рд╛рдЦрд┐рдПрдХрд╛ рдЫрдиреНред рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реМрдВ:

$ 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 рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2
Istio рд╕реНрд░реЛрддрд╣рд░реБ рд╕рдВрдЧ рдЯреНрд░рд╛рдлрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

рднрдиреНрдиреБ: рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ Istio рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдкреНрд░рднрд╛рд╡рд▓рд╛рдИ рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛рд▓реЗ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдЫред рд╕рдЯреАрдХ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдХреБрди рдЙрджрд╛рд╣рд░рдгрдорд╛ рдЕрдиреБрд░реЛрдз рдкрдард╛рдЙрдиреЗ рдирд┐рд░реНрдгрдп рд╕реАрдЖрд░рдбреАрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЗрдирдЧреНрд░реЗрд╕ рдЧреЗрдЯрд╡реЗрдорд╛ рд░рд╛рдЬрджреВрддрджреНрд╡рд╛рд░рд╛ рдЧрд░рд┐рдиреНрдЫред

рдЧрдиреНрддрд╡реНрдп рдирд┐рдпрдорд╣рд░реВрдХреЛ рд╕рд╛рде, рд╣рд╛рдореА рд▓рдЧрд╛рддрд╛рд░ рд╣реНрдпрд╛рд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд┐рдЩ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рдЙрд╣реА рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдЙрд╣реА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдиреНрдЫред рдирд┐рдореНрди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ (destinationrule-sa-frontend.yaml):

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, рддреНрдпрд╕реИрд▓реЗ рд╕рдмреИ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕рдмреИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рд╡рд┐рддрд░рд┐рдд рдЧрд░рд┐рдиреЗрдЫ:

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2

... рддрд░ рд╣рд╛рдореА рдЕрдиреБрд░реЛрдзрд╣рд░реВ v1 рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдкрдард╛рдЙрди рд░ v2 рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ:

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2

рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ VirtualService рдорд╛рд░реНрдлрдд DestinationRule рдХреЛ рд╕рдВрдпреЛрдЬрдирдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╣рд╛рдБ рдирд┐рдпрдорд╣рд░реВрд▓реЗ VirtualService рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрд╕рдореВрд╣рдорд╛ рд╕рдмрд╕реЗрдЯ рд░ рдорд╛рд░реНрдЧрд╣рд░реВ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗрдЫред

рдЧрдиреНрддрд╡реНрдп рдирд┐рдпрдорд╣рд░реВрдорд╛ рдЙрдкрд╕реЗрдЯрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджреИ

рдЙрдкрд╕рдореВрд╣рд╣рд░реВ (рд╕рдмрд╕реЗрдЯ) рдирд┐рдореНрди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫ (sa-logic-subset-destinationrule.yaml):

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

  1. рд╣реЛрд╕реНрдЯ (host) рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫ рдХрд┐ рдпреЛ рдирд┐рдпрдо рдХреЗрд╡рд▓ рдорд╛рдорд┐рд▓рд╛рд╣рд░реВрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ рдЬрдм рдорд╛рд░реНрдЧ рд╕реЗрд╡рд╛ рддрд┐рд░ рдЬрд╛рдиреНрдЫ sa-logic;
  2. рд╢реАрд░реНрд╖рдХ (name) рдЙрдкрд╕рдореВрд╣рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рдЬрдм рд╕рдмрд╕реЗрдЯ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рд░рд╛рдЙрдЯ рдЧрд░реНрджрд╛;
  3. рд▓реЗрдмрд▓ (label) рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫ рдЬреБрди рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЙрдкрд╕реЗрдЯрдХреЛ рдЕрдВрд╢ рдмрдиреНрди рдорд┐рд▓реНрдиреБрдкрд░реНрдЫред

рдирд┐рдореНрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created

рдЕрдм рдЬрдм рд╕рдмрд╕реЗрдЯрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЫрдиреН, рд╣рд╛рдореА рдЕрдЧрд╛рдбрд┐ рдмрдвреНрди рд╕рдХреНрдЫреМрдВ рд░ рд╕рд╛-рд▓рдЬрд┐рдХрдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рдирд┐рдпрдорд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди VirtualService рд▓рд╛рдИ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВ:

  1. рдЙрдкрд╕рдореВрд╣рдорд╛ рд░реБрдЯ рдЧрд░рд┐рдпреЛ v1,
  2. рд╕рдмрд╕реЗрдЯрдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд v2.

рдирд┐рдореНрди рдШреЛрд╖рдгрд╛рдкрддреНрд░рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдлреНрдиреЛ рдпреЛрдЬрдирд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ (sa-logic-subset-shadowing-vs.yaml):

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% рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╕рдлрд▓рддрд╛рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ, рддрд░ рдпреА рд╡рд┐рдлрд▓рддрд╛рд╣рд░реВ рдордзреНрдпреЗ рдХреБрдиреИрд▓реЗ рдкрдирд┐ рдЕрдиреНрддрд┐рдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрди рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕реЗрд╡рд╛рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдЗрдиреНрдЫред

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2
sa-logic рд╕реЗрд╡рд╛рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВ

рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рджреЗрдЦреНрдпреМрдВ рдХрд┐ рдХрд╕рд░реА VirtualService рд╣рд╛рдореНрд░рд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рджреВрддрд╣рд░реВрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ: рдХрд╣рд┐рд▓реЗ sa-web-app рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ sa-logic, рдпреЛ рд╕рд╛рдЗрдбрдХрд╛рд░ рджреВрдд рдорд╛рд░реНрдлрдд рдЬрд╛рдиреНрдЫ, рдЬреБрди - VirtualService рдорд╛рд░реНрдлрдд - рдЕрдиреБрд░реЛрдзрд▓рд╛рдИ v1 рд╕рдмрд╕реЗрдЯрдорд╛ рд░реБрдЯ рдЧрд░реНрди рд░ рд╕реЗрд╡рд╛рдХреЛ v2 рдЙрдкрд╕рдореВрд╣рдорд╛ рдЕрдиреБрд░реЛрдз рдорд┐рд░рд░ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред sa-logic.

рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рддрдкрд╛рдИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реЛрдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛рд╣рд░реВ рд╕рд░рд▓ рдЫред рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛, рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВ рдкрдирд┐ рд╕рд╛рдБрдЪреНрдЪреИ рдЙрддреНрдХреГрд╖реНрдЯ рдЫрдиреН рднрдиреА рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред

рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ

рдХреНрдпрд╛рдирд░реА рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рднрдиреЗрдХреЛ рдереЛрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рд░реЛрд▓ рдЖрдЙрдЯ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛред рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рдХрд┐ рд░рд┐рд▓реАрдЬрдорд╛ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдЫреИрди рд░ рддреНрдпрд╕ рдкрдЫрд┐ рдорд╛рддреНрд░, рдпрд╕рдХреЛ (рд░рд┐рд▓рд┐рдЬрдХреЛ) рдЧреБрдгрд╕реНрддрд░рдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд┐рд╢реНрд╡рд╕реНрдд рднрдПрд░, рдпрд╕рд▓рд╛рдИ рдЕрдиреНрдп рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред╨╛рдареВрд▓реЛ рджрд░реНрд╢рдХред

рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рд╣рд╛рдореА рдПрдЙрдЯрд╛ рдЙрдкрд╕рдореВрд╣рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫреМрдВ buggy ╤Г sa-logic.

рдЯреНрд░рд╛рдЗрдлрд▓реНрд╕рдорд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирдЧрд░реМрдВ рд░ рддреБрд░реБрдиреНрддреИ 20% рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдмрдЧрд╣рд░реВрдХреЛ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН (рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫ), рд░ рдмрд╛рдБрдХреА 80% рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрд╡рд╛рдорд╛ред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдирд┐рдореНрди рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН (sa-logic-subset-canary-vs.yaml):

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

рднрд░реНрдЪреБрдЕрд▓ рд╕реЗрд╡рд╛рд╣рд░реВрд▓реЗ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ рд╕рдХреНрд╖рдо рдкрд╛рд░реНрдЫ: рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рдкреНрд░рднрд╛рд╡рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░рдХреЛ реиреж% рдорд╛ рд╕реАрдорд┐рдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдЕрджреНрднреБрдд! рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЬрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдХреЛрдб рдмрд╛рд░реЗ рдирд┐рд╢реНрдЪрд┐рдд рдЫреИрдиреМрдВ (рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛ - рд╕рдзреИрдВ...), рд╣рд╛рдореА рдорд┐рд░рд░рд┐рдЩ рд░ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред

рдЯрд╛рдЗрдордЖрдЙрдЯ рд░ рдкреБрди: рдкреНрд░рдпрд╛рд╕рд╣рд░реВ

рддрд░ рдмрдЧрд╣рд░реВ рд╕рдзреИрдВ рдХреЛрдбрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдБрджреИрдиред рд╕реВрдЪреАрдорд╛ рдмрд╛рдЯ "8 рд╡рд┐рддрд░рд┐рдд рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдмрд╛рд░реЗ рдЧрд▓рдд рдзрд╛рд░рдгрд╛"рдкрд╣рд┐рд▓реЛ рд╕реНрдерд╛рдирдорд╛ "рдиреЗрдЯрд╡рд░реНрдХ рднрд░рдкрд░реНрджреЛ рдЫ" рднрдиреНрдиреЗ рдЧрд▓рдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛред рд╡рд╛рд╕реНрддрд╡рдорд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЫреИрди рднрд░рдкрд░реНрджреЛ, рд░ рдпрд╕ рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЪрд╛рд╣рд┐рдиреНрдЫ (рдЯрд╛рдЗрдордЖрдЙрдЯ) рд░ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫ (рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕).

рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫреМрдВ sa-logic (buggy), рд░ рд╣рд╛рдореА рдЕрдирд┐рдпрдорд┐рдд рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдЕрдиреБрдХрд░рдг рдЧрд░реНрдиреЗрдЫред

рдмрдЧрд╣рд░реВрд╕рдБрдЧрдХреЛ рд╣рд╛рдореНрд░реЛ рд╕реЗрд╡рд╛рд▓рд╛рдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрдиреЗ 1/3 рдореМрдХрд╛, рдЖрдиреНрддрд░рд┐рдХ рд╕рд░реНрднрд░ рддреНрд░реБрдЯрд┐рдХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗ 1/3 рдореМрдХрд╛, рд░ рдкреГрд╖реНрдард▓рд╛рдИ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗ 1/3 рдореМрдХрд╛ рджрд┐рдиреБрд╣реЛрд╕реНред

рддреНрдпрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдкреНрд░рднрд╛рд╡рд▓рд╛рдИ рдХрдо рдЧрд░реНрди рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬреАрд╡рди рд░рд╛рдореНрд░реЛ рдмрдирд╛рдЙрди, рд╣рд╛рдореА рдирд┐рдореНрди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:

  1. рдЯрд╛рдЗрдордЖрдЙрдЯ рдердкреНрдиреБрд╣реЛрд╕реН рдпрджрд┐ рд╕реЗрд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди 8 рд╕реЗрдХреЗрдиреНрдб рднрдиреНрджрд╛ рдмрдвреА рд▓рд┐рдиреНрдЫ рднрдиреЗ,
  2. рдЕрдиреБрд░реЛрдз рдЕрд╕рдлрд▓ рднрдПрдорд╛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдирд┐рдореНрди рд╕реНрд░реЛрдд рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ (sa-logic-retry-timeouts-vs.yaml):

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

  1. рдЕрдиреБрд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ 8 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ;
  2. рдЕрдиреБрд░реЛрдзрд╣рд░реВ 3 рдкрдЯрдХ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдЧрд░рд┐рдиреНрдЫ;
  3. рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп 3 рд╕реЗрдХреЗрдиреНрдб рднрдиреНрджрд╛ рдмрдвреА рдЫ рднрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рдорд╛рдирд┐рдиреНрдЫред

рдпреЛ рдПрдХ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рд╣реЛ рдХрд┐рдирднрдиреЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ 8 рд╕реЗрдХреЗрдиреНрдб рднрдиреНрджрд╛ рдмрдвреА рдХреБрд░реНрдиреБ рдкрд░реНрджреИрди рд░ рд╣рд╛рдореА рдЕрд╕рдлрд▓ рднрдПрдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рддреАрдирд╡рдЯрд╛ рдирдпрд╛рдБ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВ, рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рдмрдврд╛рдЙрдБрджреИред

рдирд┐рдореНрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

рд░ Grafana рдЧреНрд░рд╛рдлрд╣рд░реВрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдорд╛рдерд┐ рдмрдвреЗрдХреЛ рдЫ:

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 2
рдЯрд╛рдЗрдордЖрдЙрдЯ рд░ рдкреБрди: рдкреНрд░рдпрд╛рд╕рд╣рд░реВ рдердкреЗрдкрдЫрд┐ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВрдорд╛ рд╕реБрдзрд╛рд░рд╣рд░реВ

рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБ рдЕрдШрд┐ (рд╡рд╛ рдмрд░реБ, рд▓реЗрдЦрдХреЛ рдЕрд░реНрдХреЛ рднрд╛рдЧрдорд╛, рдХрд┐рдирднрдиреЗ рдпрд╕рдорд╛ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╣реБрдиреЗрдЫреИрдирдиреН - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред), рдореЗрдЯрд╛рдЙрди 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

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди