ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ към микроуслугитС с Istio. Част 2

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ към микроуслугитС с Istio. Част 2

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡ€Π΅Π²ΠΎΠ΄: ΠŸΡŠΡ€Π²Π°Ρ‚Π° част Ρ‚ΠΎΠ·ΠΈ Ρ†ΠΈΠΊΡŠΠ» бСшС посвСтСн Π½Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Istio ΠΈ дСмонстриранСто ΠΈΠΌ Π² дСйствиС. Π‘Π΅Π³Π° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΏΠΎ-слоТни аспСкти Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΌΡ€Π΅ΠΆΠ° Π½Π° услугата ΠΈ ΠΏΠΎ-спСциално Π·Π° Ρ„ΠΈΠ½ΠΎ настроСното ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° мрСТовия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° напомнямС, Ρ‡Π΅ статията ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (манифСсти Π·Π° Kubernetes ΠΈ Istio) ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ istio-майсторство.

ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°

Π‘ Istio към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° сС добавят Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π° Π΄Π° осигурят:

  • Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° заявки: Canary rollouts, 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. Част 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 Ρ…Π΅Π΄ΡŠΡ€. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° DestinationRules.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π·Π° мСстоназначСниС

Π‘Π»Π΅Π΄ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° услуга ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ заявка Π΄ΠΎ ΠΆΠ΅Π»Π°Π½Π°Ρ‚Π° услуга, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ DestinationRules ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ към Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° СкзСмпляри Π½Π° Ρ‚Π°Π·ΠΈ услуга:

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ към микроуслугитС с Istio. Част 2
Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° с рСсурси Π½Π° Istio

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° рСсурситС Π½Π° Istio Π²ΡŠΡ€Ρ…Ρƒ мрСТовия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π΅ прСдставСно Ρ‚ΡƒΠΊ Π² опростСна Ρ„ΠΎΡ€ΠΌΠ° Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π—Π° Π΄Π° бъдСм Ρ‚ΠΎΡ‡Π½ΠΈ, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄ΠΎ коя инстанция Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ заявката сС Π²Π·Π΅ΠΌΠ° ΠΎΡ‚ Envoy Π² Ingress Gateway, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π² CRD.

Π‘ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° мСстоназначСниС ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° настроим балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ послСдоватСлни Ρ…Π΅ΡˆΠΎΠ²Π΅ ΠΈ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° услугата отговаря Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π». Π‘Π»Π΅Π΄Π½Π°Ρ‚Π° конфигурация постига Ρ‚ΠΎΠ²Π° (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

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ стойности Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° ΠΈ Π΄Π° тСстватС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΎΠ²Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ към Chrome (Or с Ρ‚Π°Π·ΠΈ Π·Π° Firefox - ΠΏΡ€ΠΈΠ±Π». ΠΏΡ€Π΅Π²ΠΎΠ΄).

ΠšΠ°Ρ‚ΠΎ цяло, DestinationRules ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² областта Π½Π° балансиранСто Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ - ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ подробноститС Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΡƒΡ‡ΠΈΠΌ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ 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

Mirroring: Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ услуги Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Π·Π°Ρ‰Ρ€ΠΈΡ…ΠΎΠ²Π°Π½Π΅ ("Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅") ΠΈΠ»ΠΈ Mirroring ("отразяванС") сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² случаитС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искамС Π΄Π° тСствамС промяна Π² производството, Π±Π΅Π· Π΄Π° засягамС ΠΊΡ€Π°ΠΉΠ½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ: Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€Π°ΠΌΠ΅ (β€žΠΎΠ³Π»Π΅Π΄Π°Π»Π½ΠΈβ€œ) заявки към Π²Ρ‚ΠΎΡ€Π° инстанция, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ са Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΈ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ послСдствията. Казано ΠΏΠΎ-просто, Ρ‚ΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ»Π΅Π³Π° ΠΈΠ·Π±Π΅Ρ€Π΅ Π½Π°ΠΉ-критичния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈ заявка Π·Π° изтСглянС ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½Π° Ρ‚ΠΎΠΏΠΊΠ° ΠΌΡ€ΡŠΡΠΎΡ‚ΠΈΡ, Ρ‡Π΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° я ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°.

Π—Π° Π΄Π° тСствамС Ρ‚ΠΎΠ·ΠΈ сцСнарий Π² дСйствиС, Π½Π΅ΠΊΠ° създадСм Π²Ρ‚ΠΎΡ€ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° 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. Част 2

... Π½ΠΎ искамС заявкитС Π΄Π° сС насочват към инстанции v1 ΠΈ Π΄Π° сС отразяват към инстанции v2:

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ към микроуслугитС с Istio. Част 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 Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° към заявки към sa-logic, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Π΅:

  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. Част 2
УспСх Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° услугата sa-logic

Π’ΡƒΠΊ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚ видяхмС ΠΊΠ°ΠΊ VirtualService сС ΠΏΡ€ΠΈΠ»Π°Π³Π° към Π½Π°ΡˆΠ°Ρ‚Π° услуга Envoys: ΠΊΠΎΠ³Π° sa-web-app отправя ΠΌΠΎΠ»Π±Π° към sa-logic, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· sidecar Envoy, ΠΊΠΎΠΉΡ‚ΠΎ - Ρ‡Ρ€Π΅Π· VirtualService - Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π΄Π° насочва заявката към подмноТСството v1 ΠΈ Π΄Π° отразява заявката към подмноТСството v2 Π½Π° услугата sa-logic.

Π—Π½Π°ΠΌ: Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ…Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° помислитС, Ρ‡Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ услуги са прости. Π’ слСдващия Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ Ρ‚ΠΎΠ²Π° ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΊΠ°Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са наистина страхотни.

Canary Rollouts

Canary Deployment Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° пусканС Π½Π° Π½ΠΎΠ²Π° вСрсия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° малък Π±Ρ€ΠΎΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Използва сС, Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈ, Ρ‡Π΅ няма ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈ Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π°, ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ стС сигурни Π² Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ (ΠΈΠ·Π΄Π°Π½ΠΈΠ΅) качСство, Π³ΠΎ разпространСтС Π½Π°ΠΎΠΏΠΎ-голяма ΠΏΡƒΠ±Π»ΠΈΠΊΠ°.

Π—Π° Π΄Π° дСмонстрирамС внСдряванС Π½Π° Canary, Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ с подмноТСство buggy Ρƒ sa-logic.

НСка Π½Π΅ Π³ΡƒΠ±ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Π΄Ρ€Π΅Π±ΠΎΠ»ΠΈΠΈ ΠΈ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ 20% ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ към вСрсията с Π³Ρ€Π΅ΡˆΠΊΠΈ (тя Ρ‰Π΅ прСдставлява Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΊΠ°Π½Π°Ρ€Ρ‡Π΅), Π° останалитС 80% към Π½ΠΎΡ€ΠΌΠ°Π»Π½Π° услуга. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Ρ‚Π΅ слСдния VirtualService (sa-logic-подмноТСства-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

VirtualServices задСйстват внСдряванС Π½Π° ΠΊΠ°Π½Π°Ρ€Ρ‡Π΅Ρ‚Π°: Π² Ρ‚ΠΎΠ·ΠΈ случай стСснихмС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π΄ΠΎ 20% ΠΎΡ‚ потрСбитСлската Π±Π°Π·Π°. ЧудСсСн! Π‘Π΅Π³Π°, във всСки случай, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅ смС сигурни Π·Π° нашия ΠΊΠΎΠ΄ (с Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Π²ΠΈΠ½Π°Π³ΠΈ ...), ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ³Π»Π΅Π΄Π°Π»Π½ΠΈ ΠΈ ΠΊΠ°Π½Π°Ρ€ΠΈΡ‡Π½ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ.

Π’Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ

Но Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ сС ΠΎΠ·ΠΎΠ²Π°Π²Π°Ρ‚ Π² ΠΊΠΎΠ΄Π°. Π’ списъка ΠΎΡ‚8 ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΈ схващания Π² Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ‚Π΅ изчислСния” Π½Π° ΠΏΡŠΡ€Π²ΠΎ място Π΅ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡ‚ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Π΅ β€žΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π΅ надСТдна”. Π’ дСйствитСлност ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ (Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΈ) ΠΈ ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ (ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ).

Π—Π° дСмонстрация Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡŠΡ‰Π°Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° вСрсия sa-logic (buggy), Π° нСнадСТдността Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Ρ‰Π΅ бъдС симулирана ΠΎΡ‚ случайни ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ.

НСка Π½Π°ΡˆΠ°Ρ‚Π° услуга с Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈΠΌΠ° 1/3 шанс Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Ρ‚Π²ΡŠΡ€Π΄Π΅ дълго, 1/3 Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ с Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ 1/3 Π΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈ страницата ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Π—Π° Π΄Π° смСкчим Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ:

  1. Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚, Π°ΠΊΠΎ услугата отговаря ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 8 сСкунди,
  2. ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, Π°ΠΊΠΎ заявката Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π°.

Π—Π° изпълнСниС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ слСдната дСфиниция Π½Π° рСсурс (sa-logic-retries-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. Част 2
ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΡ Π² статистиката Π·Π° успСх слСд добавянС Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към слСдващия Ρ€Π°Π·Π΄Π΅Π» (ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½ΠΎ към слСдващата част Π½Π° статията, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² Ρ‚Π°Π·ΠΈ част няма Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ практичСски СкспСримСнти - ΠΏΡ€ΠΈΠ±Π». ΠΏΡ€Π΅Π².), Π˜Π·Ρ‚Ρ€ΠΈΠΉ 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, ΠΊΠΎΠ΅Ρ‚ΠΎ я ΠΊΠ°Ρ€Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° своя ΠΏΡƒΠ» ΠΎΡ‚ нишки ΠΈ Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° обслуТва Π΄Ρ€ΡƒΠ³ΠΈ заявки (Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Ρ‚Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ към услугата Π‘). (Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Π² ΠΏΡ€Π΅Π²ΠΎΠ΄Π°: По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ, Π½Π°ΠΏΡ€. Ρ‚ΡƒΠΊ.)

Π©Π΅ пропусна подробноститС Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ са лСсни Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° наистина искам Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° удостовСряванС ΠΈ оторизация, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ обсъдСни Π² слСдващата част Π½Π° статията.

PS ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€