ืฆื•ืจื™ืง ืฆื• ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก ืžื™ื˜ Istio. ื˜ื™ื™ืœ 2

ืฆื•ืจื™ืง ืฆื• ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก ืžื™ื˜ Istio. ื˜ื™ื™ืœ 2

ื ืื˜ื™ืฅ. ื˜ืจืึทื ืกืœ.: ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ ื“ื™ ืกืขืจื™ืข ืื™ื– ื’ืขื•ื•ืขืŸ ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืฆื• ื™ื ื˜ืจืึธื•ื“ื•ืกื™ื ื’ Istio ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื•ืŸ ื“ืขืžืึทื ืกื˜ืจื™ื™ื˜ื™ื ื’ ื–ื™ื™ ืื™ืŸ ืงืึทืžืฃ. ืื™ืฆื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ืึทืกืคึผืขืงืฅ ืคื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ื ื•ืฆืŸ ืคื•ืŸ ื“ืขื ื“ื™ื ืกื˜ ื™ื™ื’ืœ, ืื•ืŸ ืกืคึผืขืฆื™ืขืœ ื•ื•ืขื’ืŸ ืคื™ื™ื ืœื™ ื˜ื•ื ื“ ืจื•ื˜ื™ื ื’ ืื•ืŸ ื ืขืฅ ืคืึทืจืงืขืจ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’.

ืžื™ืจ ืื•ื™ืš ื“ืขืจืžืึธื ืขืŸ ืื™ืจ ืึทื– ื“ืขืจ ืึทืจื˜ื™ืงืœ ื ื™ืฆื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– (ืžืึทื ื™ืคืขืกืฅ ืคึฟืึทืจ Kubernetes ืื•ืŸ Istio) ืคึฟื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื™ืกื˜ื™ืึธ-ืžืึทืกื˜ืขืจื™.

ืคืึทืจืงืขืจ ืžืึทื ืึทื’ืขืžืขื ื˜

ืžื™ื˜ Istio, ื ื™ื™ึทืข ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื“ืขืจืฉื™ื™ึทื ืขืŸ ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ ืฆื• ืฆื•ืฉื˜ืขืœืŸ:

  • ื“ื™ื ืึทืžื™ืฉ ื‘ืขื˜ืŸ ืจื•ื˜ื™ื ื’: ืงืึทื ืึทืจื™ ืจืึธื•ืœืึธื•ื•ืฅ, ื / ื‘ ื˜ืขืกื˜ื™ื ื’;
  • ืžืึทืกืข ื‘ืึทืœืึทื ืกื™ื ื’: ืคึผืฉื•ื˜ ืื•ืŸ ืงืึธื ืกื™ืกื˜ืขื ื˜, ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื”ืึทืฉืขืก;
  • ืึธืคึผื–ื•ืš ื ืึธืš ืคืืœืŸ: ื˜ื™ื™ืžืึทื•ืฅ, ืจื™ื˜ืจื™ืขืก, ืงืจื™ื™ึทื– ื‘ืจืขืึทืงืขืจืก;
  • ื™ื ืกืขืจื˜ื™ื ื’ ื—ืกืจื•ื ื•ืช: ื“ื™ืœื™ื™ื–, ื“ืจืึทืคึผื˜ ืจื™ืงื•ื•ืขืก, ืืื–"ื• ื•.

ื•ื•ื™ ื“ืขืจ ืึทืจื˜ื™ืงืœ ื”ืืœื˜, ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื™ืœืึทืกื˜ืจื™ื™ื˜ื™ื“ ืžื™ื˜ ื“ื™ ืื•ื™ืกื’ืขืงืœื™ื‘ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ื™ ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืื•ืŸ ื ื™ื™ึทืข ืงืึทื ืกืขืคึผืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื™ื ื˜ืจืึธื•ื“ื•ืกื˜ ืฆื•ื–ืืžืขืŸ ื“ืขื ื•ื•ืขื’. ื“ืขืจ ืขืจืฉื˜ืขืจ ืึทื–ืึท ื‘ืึทื’ืจื™ืฃ ื•ื•ืขื˜ ื–ื™ื™ืŸ DestinationRules (ื“.ื”. ื›ึผืœืœื™ื ื•ื•ืขื’ืŸ ื“ื™ ื‘ืึทืงื•ืžืขืจ ืคื•ืŸ ืคืึทืจืงืขืจ / ืจื™ืงื•ื•ืขืก - ื‘ืขืขืจืขืš ื˜ืจืึทื ืกืœ.), ืžื™ื˜ ื“ื™ ื”ื™ืœืฃ ืคื•ืŸ ื•ื•ืึธืก ืžื™ืจ ืึทืงื˜ืึทื•ื•ื™ื™ื˜ ืึท / ื‘ ื˜ืขืกื˜ื™ื ื’.

ื / ื‘ ื˜ืขืกื˜ื™ื ื’: ื“ืขืกื˜ื™ื ืึทื˜ื™ืึธืŸ ืจื•ืœืขืก ืื™ืŸ ืคื™ืจ

ื / ื‘ ื˜ืขืกื˜ื™ื ื’ ืื™ื– ื’ืขื ื™ืฆื˜ ืื™ืŸ ืงืึทืกืขืก ื•ื•ื• ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ (ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื–ื™ื™ ื–ืขื ืขืŸ ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ ืึทื ื“ืขืจืฉ) ืื•ืŸ ืžื™ืจ ื–ืขื ืขืŸ ื ื™ืฉื˜ 100% ื–ื™ื›ืขืจ ื•ื•ืึธืก ืื™ื™ื ืขืจ ื•ื•ืขื˜ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ื“ืขืจืคืึทืจื•ื ื’. ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ืœื•ื™ืคืŸ ื‘ื™ื™ื“ืข ื•ื•ืขืจืกื™ืขืก ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ ืื•ืŸ ืงืœื™ื™ึทื‘ืŸ ืžืขื˜ืจื™ืงืก.

ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ื“ื™ ืจื’ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืคืจืึธื ื˜ืขื ื“, ืคืืจืœืื ื’ื˜ ืคึฟืึทืจ ื“ืขืžืึทื ืกื˜ืจื™ื™ืฉืึทืŸ ืคื•ืŸ ืึท / ื‘ ื˜ืขืกื˜ื™ื ื’, ืœื•ื™ืคืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ:

$ 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 ื–ืึธืœ ื“ื™ื ืขืŸ ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ืจื™ืงื•ื•ืขืก'.

ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืงื•ืžืขืŸ ื“ืึธืจื˜ ืžื™ื˜ ืงืึธื ืกื™ืกื˜ืขื ื˜ ื”ืึทืฉ-ื‘ืื–ื™ืจื˜ ืžืึทืกืข ื‘ืึทืœืึทื ืกื™ื ื’ (ืงืึธื ืกื™ืกื˜ืขื ื˜ ื”ืึทืฉ ืœืึธื•ื“ื‘ืึทืœืึทื ืกื™ื ื’)... ืื™ืŸ ื“ืขื ืคืึทืœ ืจื™ืงื•ื•ืขืก ืคื•ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืงืœื™ืขื ื˜ ื–ืขื ืขืŸ ื’ืขืฉื™ืงื˜ ืฆื• ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื‘ืึทืงืขื ื“ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืคึฟืึทืจ ื•ื•ืึธืก ืึท ืคึผืจืขื“ืขืคื™ื ืขื“ ืคืึทืจืžืึธื’ ืื™ื– ื’ืขื ื™ืฆื˜ - ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึท ื”ื˜ื˜ืคึผ ื›ืขื“ืขืจ. ื™ืžืคึผืœืึทืžืขื ืึทื“ ืžื™ื˜ ื“ืขืกื˜ื™ื ืึทื˜ื™ืึธืŸ ืจื•ืœืขืก.

ื“ืขืกื˜ื™ื ืึทื˜ื™ืึธืŸ ืจื•ืœืขืก

ื ืึธืš VirtualService ื’ืขืฉื™ืงื˜ ืึท ื‘ืงืฉื” ืฆื• ื“ื™ ื’ืขื‘ืขื˜ืŸ ื“ื™ื ืกื˜, ื ื™ืฆืŸ ื“ืขืกื˜ื™ื ืึทื˜ื™ืึธืŸ ืจื•ืœืขืก ืžื™ืจ ืงืขื ืขืŸ ื“ืขืคื™ื ื™ืจืŸ ืคึผืึทืœืึทืกื™ื– ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ืขื ื“ื˜ ืฆื• ืคืึทืจืงืขืจ ื‘ืึทืฉืขืจื˜ ืคึฟืึทืจ ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื“ืขื ื“ื™ื ืกื˜:

ืฆื•ืจื™ืง ืฆื• ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก ืžื™ื˜ Istio. ื˜ื™ื™ืœ 2
ืคืึทืจืงืขืจ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืžื™ื˜ Istio ืจืขืกื•ืจืกืŸ

ื˜ืึธืŸ: ื“ื™ ืคึผืจืึทืœ ืคื•ืŸ Istio ืจืขืกื•ืจืกืŸ ืื•ื™ืฃ ื ืขืฅ ืคืึทืจืงืขืจ ืื™ื– ื“ืขืจืœืื ื’ื˜ ืื•ื™ืฃ ืึท ื•ื•ืขื’ ื•ื•ืึธืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ. ืฆื• ื–ื™ื™ืŸ ื’ืขื ื•ื™, ื“ืขืจ ื‘ืึทืฉืœื•ืก ืื•ื™ืฃ ื•ื•ืึธืก ื‘ื™ื™ึทืฉืคึผื™ืœ ืฆื• ืฉื™ืงืŸ ื“ื™ ื‘ืงืฉื” ืื™ื– ื’ืขืžืื›ื˜ ื“ื•ืจืš ื“ื™ ืฉืœื™ื™ืขืจ ืื™ืŸ ื“ื™ ื™ื ื’ืจืขืกืก ื’ืึทื˜ืขื•ื•ื™ื™ึท ืงืึทื ืคื™ื’ื™ืขืจื“ ืื™ืŸ ื“ื™ 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 - ื”ืึทืฉ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื”ื˜ื˜ืคึผ ื›ืขื“ืขืจ version.

ืฆื•ืœื™ื™ื’ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ:

$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created

ืื™ืฆื˜ ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ืื•ื ื˜ืŸ ืื•ืŸ ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืจืขื›ื˜ ื˜ืขืงืขืก ื•ื•ืขืŸ ืื™ืจ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื›ืขื“ืขืจ version:

$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main

ื˜ืึธืŸ: ืฆื• ืœื™ื™ื’ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืึทืœื•ืขืก ืื™ืŸ ื“ื™ ื›ืขื“ืขืจ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื’ืœื™ื™ืš ืื™ืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ, โ€‹โ€‹โ€‹โ€‹ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ืขื ืคืึทืจืœืขื ื’ืขืจื•ื ื’ ืฆื• ืงืจืึธื•ื (ืึธื“ืขืจ ืžื™ื˜ ื“ืขื ืคึฟืึทืจ ืคื™ืจืขืคืึธืงืก - ืึทืคึผืคึผืจืึธืงืก. ืื™ื‘ืขืจื–ืขืฆืŸ).

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, DestinationRules ื”ืื˜ ืžืขืจ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื™ืŸ ื“ื™ ื’ืขื’ื ื˜ ืคื•ืŸ ืžืึทืกืข ื‘ืึทืœืึทื ืกื™ื ื’ - ื˜ืฉืขืง ืคึฟืึทืจ ื“ืขื˜ืึทื™ืœืก ืื™ืŸ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ืื™ื™ื“ืขืจ ืื™ืจ ืœืขืจื ืขืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืกืขืจื•ื•ื™ืก ื•ื•ื™ื™ึทื˜ืขืจ, ืœืึธื–ืŸ ืื•ื ื“ื– ื•ื™ืกืžืขืงืŸ ื“ื™ "ื’ืจื™ืŸ ื•ื•ืขืจืกื™ืข" ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืคืึทืจืงืขืจ ืจื™ื›ื˜ื•ื ื’ ื”ืขืจืฉืŸ ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึทืžืึทื ื“ื–:

$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions โ€œsa-frontend-greenโ€ deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io โ€œsa-frontendโ€ deleted

ืžื™ืจืขืจื™ื ื’: ื•ื•ื™ืจื˜ื•ืึทืœ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื™ืŸ ืคื™ืจ

ืฉืึทื“ืึธื•ื™ื ื’ ("ืฉื™ืœื“ื™ื ื’") ืึธื“ืขืจ ืžื™ืจืขืจื™ื ื’ ("ืฉืคึผื™ื’ืœืขืŸ") ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ ืงืึทืกืขืก ื•ื•ืขืŸ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืึท ืขื ื“ืขืจื•ื ื’ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืึธืŸ ืึทืคืขืงื˜ื™ื ื’ ื“ื™ ืกื•ืฃ ื ื™ืฆืขืจืก: ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื“ื•ืคึผืœื™ืงืึทื˜ ("ืฉืคึผื™ื’ืœ") ืจื™ืงื•ื•ืขืก ืฆื• ืึท ืฆื•ื•ื™ื™ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ ื•ื•ื• ื“ื™ ื’ืขื‘ืขื˜ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ื–ืขื ืขืŸ ื’ืขืžืื›ื˜, ืื•ืŸ ืงื•ืง ืื™ืŸ ื“ื™ ืงืึทื ืกืึทืงื•ื•ืขื ืกืึทื–. ืกื™ืžืคึผืœื™ ืฉื˜ืขืœืŸ, ื“ืึธืก ืื™ื– ื•ื•ืขืŸ ื“ื™ื™ืŸ ืงืึธืœืขื’ืข ืคึผื™ืงืก ื“ื™ ืžืขืจืกื˜ ืงืจื™ื˜ื™ืฉ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื•ืŸ ืžืึทื›ืŸ ืึท ืฆื™ืขืŸ ื‘ืขื˜ืŸ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึทื–ืึท ืึท ืจื™ื–ื™ืง ืฉื˜ื™ืง ืคื•ืŸ ืฉืžื•ืฅ ืึทื– ืงื™ื™ืŸ ืื™ื™ื ืขืจ ืงืขืŸ ื˜ืึทืงืข ืึธืคึผืฉืึทืฆืŸ ืขืก.

ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ื“ืขื ืกืฆืขื ืึทืจ ืื™ืŸ ืงืึทืžืฃ, ืœืึธื–ืŸ ืื•ื ื“ื– ืฉืึทืคึฟืŸ ืึท ืฆื•ื•ื™ื™ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ 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

... ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ืึทื– ืจื™ืงื•ื•ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ื’ืขืฉื™ืงื˜ ืฆื• ื•ื•1 ื™ื ืกื˜ืึทื ืกื™ื– ืื•ืŸ ืžื™ืจืขืจื“ ืฆื• ื•ื•2 ื™ื ืกื˜ืึทื ืกื™ื–:

ืฆื•ืจื™ืง ืฆื• ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก ืžื™ื˜ Istio. ื˜ื™ื™ืœ 2

ืžื™ืจ ื•ื•ืขืœืŸ ื“ืขืจื’ืจื™ื™ื›ืŸ ื“ืขื ื“ื•ืจืš VirtualService ืื™ืŸ ืงืึธืžื‘ื™ื ืึทืฆื™ืข ืžื™ื˜ DestinationRule, ื•ื•ื• ื“ื™ ื›ึผืœืœื™ื ื•ื•ืขื˜ ื‘ืึทืฉืœื™ืกืŸ ื“ื™ ืกืึทื‘ืกืขืฅ ืื•ืŸ ืจื•ืฅ ืคื•ืŸ ื“ื™ VirtualService ืฆื• ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืกืึทื‘ืกืขื˜.

ื“ืขืคื™ื ื™ืจืŸ ืกื•ื‘ืกืขืฅ ืื™ืŸ ื“ืขืกื˜ื™ื ื™ื™ืฉืึทืŸ ืจื•ืœืขืก

ืกื•ื‘ืกืขืฅ (ืกืึทื‘ืกืขืฅ) ื–ืขื ืขืŸ ื‘ืืฉืœืืกืŸ ื“ื•ืจืš ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ (sa-logic-subsets-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-subsets-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-web-app ืžืื›ื˜ ืึท ื‘ืงืฉื” ืฆื• sa-logic, ืขืก ื’ื™ื™ื˜ ื“ื•ืจืš ื“ื™ ืกื™ื™ื“ืงืึทืจ ืขื ื•ื•ื•ื™, ื•ื•ืึธืก - ื“ื•ืจืš VirtualService - ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืžืึทืจืฉืจื•ื˜ ื“ื™ ื‘ืขื˜ืŸ ืฆื• ื“ื™ v1 ืกืึทื‘ืกืขื˜ ืื•ืŸ ืฉืคึผื™ื’ืœ ื“ื™ ื‘ืขื˜ืŸ ืฆื• ื“ื™ v2 ืกื•ื‘ืกืขื˜ ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ื™ืก sa-logic.

ืื™ืš ื•ื•ื™ืกืŸ, ืื™ืจ ืงืขืŸ ืฉื•ื™ืŸ ื˜ืจืึทื›ื˜ืŸ ืึทื– ื•ื•ื™ืจื˜ื•ืึทืœ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื™ื– ืคึผืฉื•ื˜. ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’, ืžื™ืจ ื•ื•ืขืœืŸ ื™ืงืกืคึผืึทื ื“ ืื•ื™ืฃ ื“ืขื ื“ื•ืจืš ื–ืึธื’ืŸ ืึทื– ื–ื™ื™ ื–ืขื ืขืŸ ืื•ื™ืš ื‘ืืžืช ื’ืจื•ื™ืก.

ืงืึทื ืึทืจื™ ืจืึธืœืึธื•ื•ืฅ

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ื“ืขืจ ืคึผืจืึธืฆืขืก ืคื•ืŸ ืจืึธื•ืœื™ื ื’ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ืึท ืงืœื™ื™ืŸ ื ื•ืžืขืจ ืคื•ืŸ ื™ื•ื–ืขืจื–. ืขืก ืื™ื– ื’ืขื ื•ืฆื˜ ืฆื• ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ ืื™ืŸ ื“ืขืจ ืžืขืœื“ื•ื ื’ ืื•ืŸ ื‘ืœื•ื™ื– ื ืึธืš ื“ืขื, ืฉื•ื™ืŸ ื–ื™ื›ืขืจ ืื™ืŸ ื–ื™ื™ึทืŸ (ืžืขืœื“ื•ื ื’) ืงื•ื•ืึทืœื™ื˜ืขื˜, ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืขืก ืฆื• ืื ื“ืขืจืข ื™ื•ื–ืขืจื–.ะพื’ืจืขืกืขืจืข ื•ื™ืœืขื.

ืฆื• ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืงืึทื ืึทืจื™ ืจืึธื•ืœืึทื•ื˜, ืžื™ืจ ื•ื•ืขืœืŸ ืคืึธืจื–ืขืฆืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืึท ืกืึทื‘ืกืขื˜ buggy ัƒ sa-logic.

ืœืึธืžื™ืจ ื ื™ืฉื˜ ื•ื•ื™ืกื˜ ืฆื™ื™ื˜ ืื•ื™ืฃ ืงืœื™ื™ื ื™ืงื™ื™ื˜ืŸ ืื•ืŸ ื’ืœื™ื™ืš ืฉื™ืงืŸ 20% ืคื•ืŸ ื™ื•ื–ืขืจื– ืฆื• ื“ื™ ื•ื•ืขืจืกื™ืข ืžื™ื˜ ื‘ืึทื’ื– (ื“ืึธืก ื•ื•ืขื˜ ืคืึธืจืฉื˜ืขืœืŸ ืื•ื ื“ื–ืขืจ ืงืึทื ืึทืจื™ ืจืึธื•ืœืึทื•ื˜), ืื•ืŸ ื“ื™ ืจื•ืขืŸ 80% ืฆื• ื“ืขืจ ื ืึธืจืžืึทืœ ื“ื™ื ืกื˜. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื ื•ืฆืŸ ื“ื™ ืคืืœื’ืขื ื“ืข VirtualService (sa-logic-subsets-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

ื•ื•ื™ืจื˜ื•ืึทืœ ืกืขืจื•ื•ื™ืกืขืก ื’ืขื‘ืŸ ืงืึทื ืึทืจื™ ืจืึธื•ืœืึทื•ื˜: ืื™ืŸ ื“ืขื ืคืึทืœ, ืžื™ืจ ื”ืึธื‘ืŸ ื ืขืจืึธื•ื“ ื“ื™ ืคึผืึธื˜ืขื ืฆื™ืขืœ ืคึผืจืึทืœ ืคื•ืŸ ื“ื™ ื™ืฉื•ื– ืฆื• 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

ืงืจื™ื™ึทื– ืฆื•ื™ืžืขืŸ ืื•ืŸ ื‘ืึทืœืงื›ืขืึทื“ ืคึผืึทื˜ืขืจื ื–

ืžื™ืจ ื–ืขื ืขืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ืฆื•ื•ื™ื™ ื•ื•ื™ื›ื˜ื™ืง ืคึผืึทื˜ืขืจื ื– ืื™ืŸ ืžื™ืงืจืึธืกืขืจื•ื•ื™ืก ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ื•ื•ืึธืก ืœืึธื–ืŸ ืื™ืจ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื–ื™ืš-ืจืขืงืึธื•ื•ืขืจื™ (ื–ื™ืš ื”ื™ื™ืœื•ื ื’) ื‘ืึทื“ื™ื ื•ื ื’ืขืŸ.

ืฆื•ื™ืžืขืŸ ("ืงืจื™ื™ึทื– ืฆื•ื™ืžืขืŸ") ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ ืจื™ืงื•ื•ืขืก ื•ื•ืึธืก ืงื•ืžืขืŸ ืฆื• ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืึท ื“ื™ื ืกื˜ ื•ื•ืึธืก ืื™ื– ื’ืขื”ืืœื˜ืŸ ืึทื ื›ืขืœื˜ื™ ืื•ืŸ ื•ืžืงืขืจืŸ ืขืก ื‘ืฉืขืช ืงืœื™ืขื ื˜ ืจื™ืงื•ื•ืขืก ื–ืขื ืขืŸ ืจื™ื“ืขืจืขืงื˜ื™ื“ ืฆื• ื’ืขื–ื•ื ื˜ ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ื™ืก (ื•ื•ืึธืก ื™ื ืงืจื™ืกื™ื– ื“ื™ ืคึผืจืึธืฆืขื ื˜ ืคื•ืŸ ื’ืขืจืึธื˜ืŸ ืจืขืกืคึผืึธื ืกืขืก). (ื‘ืึทืžืขืจืงื•ื ื’: ื ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื“ืขื ืžื•ืกื˜ืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ, ืœืžืฉืœ, ื“ืึธ.)

ื‘ืึทืœืงื›ืขื“ ("ืฆืขื˜ื™ื™ืœื•ื ื’") ื™ื–ืึธืœืึทื˜ืขืก ืกืขืจื•ื•ื™ืก ืคื™ื™ืœื™ืขืจื– ืคื•ืŸ ืึทืคืขืงื˜ื™ื ื’ ื“ื™ ื’ืื ืฆืข ืกื™ืกื˜ืขื. ืฆื•ื ื‘ื™ื™ืฉืคึผื™ืœ, ืกืขืจื•ื•ื™ืก ื‘ ืื™ื– ืฆืขื‘ืจืื›ืŸ ืื•ืŸ ืืŸ ืื ื“ืขืจ ืกืขืจื•ื•ื™ืก (ื“ืขืจ ืงืœื™ืขื ื˜ ืคื•ืŸ ืกืขืจื•ื•ื™ืก ื‘) ืžืื›ื˜ ืึท ื‘ืงืฉื” ืฆื• ืกืขืจื•ื•ื™ืก ื‘, ื•ื•ืึธืก ืžืื›ื˜ ืขืก ื•ื™ืกืžืึทื˜ืขืจืŸ ื–ื™ื™ืŸ ืคืึธื“ืขื ื‘ืขืงืŸ ืื•ืŸ ืงืขื ืขืŸ ื ื™ืฉื˜ ื“ื™ื ืขืŸ ืื ื“ืขืจืข ืจื™ืงื•ื•ืขืก (ืืคื™ืœื• ืื•ื™ื‘ ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืคึฟื•ืŸ ืกืขืจื•ื•ื™ืก ื‘). (ื‘ืึทืžืขืจืงื•ื ื’: ื ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื“ืขื ืžื•ืกื˜ืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ, ืœืžืฉืœ, ื“ืึธ.)

ืื™ืš ื•ื•ืขืœ ืื™ื‘ืขืจืœืึธื–ืŸ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ื“ื™ ืคึผืึทื˜ืขืจื ื– ื•ื•ื™ื™ึทืœ ื–ื™ื™ ื–ืขื ืขืŸ ื’ืจื™ื ื’ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืื™ืŸ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ, ืื•ืŸ ืื™ืš ืื•ื™ืš ื˜ืึทืงืข ื•ื•ื™ืœืŸ ืฆื• ื•ื•ื™ื™ึทื–ืŸ ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ืกืงืึทืกื˜ ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ืคึผืก ืคื•ืŸ ืื™ื‘ืขืจื–ืขืฆืขืจ

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’