เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 2

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 2

เด•เตเดฑเดฟเดชเตเดชเต. เดตเดฟเดตเตผเดคเตเดคเดจเด‚.: เด†เดฆเตเดฏ เดญเดพเด—เด‚ เดˆ เดธเต€เดฐเต€เดธเต เด‡เดธเตเดคเดฟเดฏเต‹ เด•เดดเดฟเดตเตเด•เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดชเตเดฐเด•เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเดพเดฏเดฟ เดธเดฎเตผเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เดธเต‡เดตเดจ เดฎเต†เดทเดฟเตปเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตปเตเดฑเต†เดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดตเดถเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต, เดจเดจเตเดจเดพเดฏเดฟ เดŸเตเดฏเต‚เตบ เดšเต†เดฏเตเดค เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เดฟเดจเต†เดฏเตเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดŸเตเดฐเดพเดซเดฟเด•เต เดฎเดพเดจเต‡เดœเตเดฎเต†เตปเตเดฑเดฟเดจเต†เดฏเตเด‚ เด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เดฒเต‡เด–เดจเด‚ เดถเต‡เด–เดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เตพ (เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดจเตเด‚ เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตเด•เตเด•เตเด‚ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเตเด•เตพ) เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เดจเดฟเด™เตเด™เดณเต† เด“เตผเดฎเตเดฎเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. istio-mastery.

เดŸเตเดฐเดพเดซเดฟเด•เต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต

Istio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดชเตเดคเดฟเดฏ เด•เดดเดฟเดตเตเด•เตพ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚:

  • เดกเตˆเดจเดพเดฎเดฟเด•เต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เต: เด•เดพเดจเดฑเดฟ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ, เดŽ/เดฌเดฟ เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต;
  • เดฒเต‹เดกเต เดฌเดพเดฒเตปเดธเดฟเด™เต: เดฒเดณเดฟเดคเดตเตเด‚ เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณเดคเตเด‚, เดนเดพเดทเตเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเตเด‚;
  • เดตเต€เดดเตเดšเดฏเตเด•เตเด•เต เดถเต‡เดทเด‚ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตฝ: เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตฝ, เดตเต€เดฃเตเดŸเตเด‚ เดถเตเดฐเดฎเดฟเด•เตเด•เตฝ, เดธเตผเด•เตเดฏเต‚เดŸเตเดŸเต เดฌเตเดฐเต‡เด•เตเด•เดฑเตเด•เตพ;
  • เดชเดฟเดดเดตเตเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต: เด•เดพเดฒเดคเดพเดฎเดธเด‚, เด‰เดชเต‡เด•เตเดทเดฟเดšเตเดš เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดฎเตเดคเดฒเดพเดฏเดต.

เดฒเต‡เด–เดจเด‚ เดคเตเดŸเดฐเตเดฎเตเดชเต‹เตพ, เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เด•เดดเดฟเดตเตเด•เตพ เดšเดฟเดคเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดคเดฟเดฏ เด†เดถเดฏเด™เตเด™เตพ เดตเดดเดฟเดฏเดฟเตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด†เดถเดฏเด‚ เด†เดฆเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ DestinationRules (เด…เดคเดพเดฏเดคเต เดŸเตเดฐเดพเดซเดฟเด•เต/เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดธเตเดตเต€เด•เตผเดคเตเดคเดพเดตเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดจเดฟเดฏเดฎเด™เตเด™เตพ - เดเด•เดฆเต‡เดถเด‚. เดตเดฟเดตเตผเดคเตเดคเดจเด‚.), เด…เดคเดฟเตปเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดžเด™เตเด™เตพ 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, เด…เดคเดฟเตปเตเดฑเต† เดŽเดฒเตเดฒเดพ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฒเต‹เดกเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚ เดฑเต—เดฃเตเดŸเต เดฑเต‹เดฌเดฟเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚, เด‡เดคเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เดจเดฏเดฟเด•เตเด•เตเด‚:

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 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 เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต. เดกเต†เดธเตเดฑเตเดฑเดฟเดจเต‡เดทเตป เดฑเต‚เตพเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดคเต.

เดฒเด•เตเดทเตเดฏ เดจเดฟเดฏเดฎเด™เตเด™เตพ

เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดตเต†เตผเดšเตเดตเตฝ เดธเต‡เดตเดจเด‚ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดšเตเดšเต, เดกเต†เดธเตเดฑเตเดฑเดฟเดจเต‡เดทเตป เดฑเต‚เตพเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดˆ เดธเต‡เดตเดจเดคเตเดคเดฟเตปเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดณเตเดณ เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเต เดฌเดพเดงเด•เดฎเดพเด•เตเดจเตเดจ เดจเดฏเด™เตเด™เตพ เดจเดฎเตเด•เตเด•เต เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดพเด‚:

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 2
เด‡เดธเตเดคเดฟเดฏเต‹ เดตเดฟเดญเดตเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดซเดฟเด•เต เดฎเดพเดจเต‡เดœเตเดฎเต†เตปเตเดฑเต

เด…เดญเดฟเดชเดพเดฏเดชเตเดชเต†เดŸเตเด•: เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเตฝ เด‡เดธเตเดคเดฟเดฏเต‹ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดพเดงเต€เดจเด‚ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเตเดณเตเดณ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‡เดตเดฟเดŸเต† เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เดธเดฟเด†เตผเดกเดฟเดฏเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‡เตปเด—เตเดฐเต†เดธเต เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡เดฏเดฟเดฒเต† เดฆเต‚เดคเดจเดพเดฃเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸ เด•เดพเดฐเตเดฏเด‚ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเดคเต.

เดกเต†เดธเตเดฑเตเดฑเดฟเดจเต‡เดทเตป เดฑเต‚เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดนเดพเดทเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เดฒเต‹เดกเต เดฌเดพเดฒเตปเดธเดฟเด‚เด—เต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เดคเต‡ เดธเต‡เดตเดจ เดธเด‚เดญเดตเด‚ เด’เดฐเต‡ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต‹เดŸเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด‡เดคเต เดจเต‡เดŸเดพเตป เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (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-เดฒเต‡เด•เตเด•เต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เดคเดฟเดจเต‡เดพเดŸเต†เดพเดชเตเดชเด‚ Firefox-เดจเต - เดเด•เดฆเต‡เดถเด‚. เดชเดฐเดฟเดญเดพเดท.).

เดชเตŠเดคเตเดตเต‡, เดกเต†เดธเตเดฑเตเดฑเดฟเดจเต‡เดทเตป เดฑเต‚เตพเดธเดฟเดจเต เดฒเต‹เดกเต เดฌเดพเดฒเตปเดธเดฟเด‚เด—เต เดฎเต‡เด–เดฒเดฏเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เด•เดดเดฟเดตเตเด•เดณเตเดฃเตเดŸเต - เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด• เด”เดฆเตเดฏเต‹เด—เดฟเด• เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป.

เดตเต†เตผเดšเตเดตเตฝ เดธเตผเดตเต€เดธเต เด•เต‚เดŸเตเดคเตฝ เดชเด เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดšเตเดšเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตปเตเดฑเต† "เดชเดšเตเดš เดชเดคเดฟเดชเตเดชเตเด‚" เด…เดจเตเดฌเดจเตเดง เดŸเตเดฐเดพเดซเดฟเด•เต เดฆเดฟเดถเดพ เดจเดฟเดฏเดฎเดตเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดพเด‚:

$ 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, เด…เดคเดฟเดจเดพเตฝ เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเด‚ เดŽเดฒเตเดฒเดพ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเดฒเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด‚:

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 2

... เดŽเดจเตเดจเดพเตฝ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ v1 เดธเด‚เดญเดตเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเดจเตเด‚ v2 เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดฟเดฑเตผ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต:

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 2

DestinationRule-เดฎเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเต VirtualService-เดฒเต‚เดŸเต† เดžเด™เตเด™เตพ เด‡เดคเต เดจเต‡เดŸเตเด‚, เด…เดตเดฟเดŸเต† เดจเดฟเดฏเดฎเด™เตเด™เตพ 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

เด‡เดชเตเดชเต‹เตพ เด‰เดชเดธเต†เดฑเตเดฑเตเด•เตพ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดธเดพ-เดฒเต‹เดœเดฟเด•เตเด•เดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพเด•เตเด•เต เดจเดฟเดฏเดฎเด™เตเด™เตพ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดตเดฟเตผเดšเตเดšเตเดตเตฝ เดธเตผเดตเต€เดธเต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดจเดฎเตเด•เตเด•เต เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.

  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

เด—เตเดฐเดพเดซเดพเดจเดฏเดฟเดฒเต† เดซเดฒเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚, เด…เดตเดฟเดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฌเด—เตเด•เดณเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚ (buggy) ~60% เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพเด•เตเด•เต เดชเดฐเดพเดœเดฏเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดˆ เดชเดฐเดพเดœเดฏเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด…เดจเตเดคเดฟเดฎ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เดฌเดพเดงเดฟเด•เตเด•เดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด…เดตเตผ เด’เดฐเต เดฑเตบ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‚เดŸเต† เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 2
sa-logic เดธเต‡เดตเดจเดคเตเดคเดฟเตปเตเดฑเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เดณเตเดŸเต† เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เตพ

เดžเด™เตเด™เดณเตเดŸเต† เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เดฆเต‚เดคเดจเตเดฎเดพเตผเด•เตเด•เต เดตเต†เตผเดšเตเดตเตฝ เดธเตผเดตเต€เดธเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เด‡เดตเดฟเดŸเต† เด•เดฃเตเดŸเต: เดŽเดชเตเดชเต‹เตพ sa-web-app เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเตเดจเตเดจเต sa-logic, เด‡เดคเต เดธเตˆเดกเตเด•เดพเตผ เดŽเตปเดตเต‹เดฏเต เดตเดดเดฟ เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจเต, เด…เดคเต - VirtualService เดตเดดเดฟ - v1 เด‰เดชเดธเต†เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฑเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดธเต‡เดตเดจเดคเตเดคเดฟเตปเตเดฑเต† v2 เด‰เดชเดธเต†เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. sa-logic.

เดŽเดจเดฟเด•เตเด•เดฑเดฟเดฏเดพเด‚, เดตเต†เตผเดšเตเดตเตฝ เดธเต‡เดตเดจเด™เตเด™เตพ เดฒเดณเดฟเดคเดฎเดพเดฃเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดšเดฟเดจเตเดคเดฟเดšเตเดšเต‡เด•เตเด•เดพเด‚. เด…เดŸเตเดคเตเดค เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ, เด…เดตเดฐเตเด‚ เดฎเดฟเด•เดšเตเดšเดตเดฐเดพเดฃเต†เดจเตเดจเต เดชเดฑเดžเตเดžเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด…เดคเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เตเด‚.

เด•เดพเดจเดฑเดฟ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ

เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดŽเดฃเตเดฃเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตปเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เตเดจเตเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดพเดฃเต เด•เดพเดจเดฑเดฟ เดตเดฟเดจเตเดฏเดพเดธเด‚. เดฑเดฟเดฒเต€เดธเดฟเตฝ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดฎเดพเดคเตเดฐเดฎเต‡, เด…เดคเดฟเตปเตเดฑเต† (เดฑเดฟเดฒเต€เดธเดฟเตปเตเดฑเต†) เดฎเดคเดฟเดฏเดพเดฏ เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเดคเตเดคเดฟเตฝ เด‡เดคเดฟเดจเด•เด‚ เด†เดคเตเดฎเดตเดฟเดถเตเดตเดพเดธเด‚ เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ, เดฎเดฑเตเดฑเต เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด‡เดคเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด•.ะพเดตเดฒเดฟเดฏ เดชเตเดฐเต‡เด•เตเดทเด•เตผ.

เด•เดพเดจเดฑเดฟ เดฑเต‹เตพเด”เดŸเตเดŸเตเด•เตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เด’เดฐเต เด‰เดชเดตเดฟเดญเดพเด—เดตเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเด‚ buggy ัƒ sa-logic.

เดจเดฟเดธเตเดธเดพเดฐเด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดธเดฎเดฏเด‚ เดชเดพเดดเดพเด•เตเด•เดฐเตเดคเต, 20% เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เดฌเด—เตเด•เดณเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเตป เด…เดฏเดฏเตเด•เตเด•เตเด• (เด‡เดคเต เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดจเดฑเดฟ เดฑเต‹เตพเด”เดŸเตเดŸเดฟเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเด‚), เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ 80% เดธเดพเดงเดพเดฐเดฃ เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฟเตผเดšเตเดšเตเดตเตฝ เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• (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), เด‡เดคเต เด’เดฐเต เดธเตเดตเต€เด•เตผเดคเตเดคเดพเดตเดฟเดฒเต‡เด•เตเด•เต‹ เดธเตเดตเต€เด•เตผเดคเตเดคเดพเดตเดฟเตปเตเดฑเต† เด’เดฐเต เด‰เดชเดตเดฟเดญเดพเด—เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต‹ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดถเดคเดฎเดพเดจเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เดฎเตเดฎเตเดชเดคเตเดคเต† เดตเดฟเตผเดšเตเดšเตเดตเตฝ เดธเตผเดตเต€เดธเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ 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-retriries-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

เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เดฎเตเด•เดณเดฟเตฝ เดตเตผเดฆเตเดงเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต เด—เตเดฐเดพเดซเดพเดจ เด—เตเดฐเดพเดซเตเด•เดณเดฟเตฝ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•:

เด‡เดธเตเดคเดฟเดฏเต‹เดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•. เดญเดพเด—เด‚ 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•