ื ืืืืฅ. ืืจืึทื ืกื.:
ืืืจ ืืืื ืืขืจืืึธื ืขื ืืืจ ืึทื ืืขืจ ืึทืจืืืงื ื ืืฆื ืงืึทื ืคืืืืขืจืืืฉืึทื ื (ืืึทื ืืคืขืกืฅ ืคึฟืึทืจ Kubernetes ืืื Istio) ืคึฟืื ืื ืจืืคึผืึทืืึทืืึธืจื
ืคืึทืจืงืขืจ ืืึทื ืึทืืขืืขื ื
ืืื Istio, ื ืืึทืข ืงืืืคึผืึทืืืืึทืืื ืืขืจืฉืืึทื ืขื ืืื ืืขื ืงื ืืื ืฆื ืฆืืฉืืขืื:
- ืืื ืึทืืืฉ ืืขืื ืจืืืื ื: ืงืึทื ืึทืจื ืจืึธืืืึธืืืฅ, ื / ื ืืขืกืืื ื;
- ืืึทืกืข ืืึทืืึทื ืกืื ื: ืคึผืฉืื ืืื ืงืึธื ืกืืกืืขื ื, ืืืืืจื ืืืืฃ ืืึทืฉืขืก;
- ืึธืคึผืืื ื ืึธื ืคืืื: ืืืืืึทืืฅ, ืจืืืจืืขืก, ืงืจืืึทื ืืจืขืึทืงืขืจืก;
- ืื ืกืขืจืืื ื ืืกืจืื ืืช: ืืืืืื, ืืจืึทืคึผื ืจืืงืืืขืก, ืืื"ื ื.
ืืื ืืขืจ ืึทืจืืืงื ืืืื, ืื ืงืืืคึผืึทืืืืึทืืื ืืืขื ืืืื ืืืึทืกืืจืืืืื ืืื ืื ืืืืกืืขืงืืืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึท ืืืืฉืคึผืื ืืื ื ืืึทืข ืงืึทื ืกืขืคึผืก ืืืขื ืืืื ืื ืืจืึธืืืืกื ืฆืืืืืขื ืืขื ืืืขื. ืืขืจ ืขืจืฉืืขืจ ืึทืืึท ืืึทืืจืืฃ ืืืขื ืืืื DestinationRules
(ื.ื. ืึผืืืื ืืืขืื ืื ืืึทืงืืืขืจ ืคืื ืคืึทืจืงืขืจ / ืจืืงืืืขืก - ืืขืขืจืขื ืืจืึทื ืกื.), ืืื ืื ืืืืฃ ืคืื ืืืึธืก ืืืจ ืึทืงืืึทืืืืื ืึท / ื ืืขืกืืื ื.
ื / ื ืืขืกืืื ื: ืืขืกืืื ืึทืืืึธื ืจืืืขืก ืืื ืคืืจ
ื / ื ืืขืกืืื ื ืืื ืืขื ืืฆื ืืื ืงืึทืกืขืก ืืื ืขืก ืืขื ืขื ืฆืืืื ืืืขืจืกืืขืก ืคืื ืึท ืึทืคึผืืึทืงืืืฉืึทื (ืืืืฉืึทืืืึทืื ืืื ืืขื ืขื ืืืืืฉืืืึทืื ืึทื ืืขืจืฉ) ืืื ืืืจ ืืขื ืขื ื ืืฉื 100% ืืืืขืจ ืืืึธืก ืืืื ืขืจ ืืืขื ืคึฟืึทืจืืขืกืขืจื ืื ืืึทื ืืฆืขืจ ืืขืจืคืึทืจืื ื. ืืขืจืืืขืจ, ืืืจ ืืืืคื ืืืืืข ืืืขืจืกืืขืก ืกืืืืึทืืืืื ืืึทืกืื ืืื ืงืืืึทืื ืืขืืจืืงืก.
ืฆื ืฆืขืืืืงืืขื ืื ืจืืข ืืืขืจืกืืข ืคืื โโโโืื ืคืจืึธื ืืขื ื, ืคืืจืืื ืื ืคึฟืึทืจ ืืขืืึทื ืกืืจืืืฉืึทื ืคืื ืึท / ื ืืขืกืืื ื, ืืืืคื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
ืื ืืืคึผืืืืืึทื ื ืืึทื ืึทืคืขืกืืืืฉืึทื ืคึฟืึทืจ ืื ืืจืื ืืืขืจืกืืข ืืื ืึทื ืืขืจืฉ ืืื ืฆืืืื ืขืจืืขืจ:
- ืื ืืืื ืืื ืืืืืจื ืืืืฃ ืึท ืึทื ืืขืจืฉ ืงืืืืื -
istio-green
, - ืคึผืึธืืก ืืึธืื ืึท ืคืืจืืข
version: green
.
ืืื ื ืืืืืข ืืืคึผืืืืืึทื ืฅ ืืึธืื ืึท ืคืืจืืข app: sa-frontend
, ืจืืงืืืขืก ืจืึทืืืื ืืืจื ืืืืจืืืึทื ืืื ืกื sa-external-services
ืคึฟืึทืจ ืืื ืกื sa-frontend
, ืืืขื ืืืื ืจืืืขืจืขืงืืื ืฆื ืึทืืข ืืืึทื ืื ืกืืึทื ืกืื ืืื ืื ืืึทืกืข ืืืขื ืืืื ืคืื ืื ืืขืจืืขืืืืื ืืืจื
ืื ืืขืืขืื ืืขืงืขืก ืืขื ืขื ื ืืฉื ืืขืคืื ืขื
ืื ืืขืงืขืก ืืขื ืขื ื ืืฉื ืืขืคึฟืื ืขื ืืืืึทื ืืื ืืึธืื ืึท ืึทื ืืขืจืฉ ื ืึธืืขื ืืื ืคืึทืจืฉืืืขื ืข ืืืขืจืกืืขืก ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื. ืืื ืก ืืึทืื ืืืืขืจ ืคืื ืืขื:
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js
ืขืก ืืืื ืึทื index.html
, ืจืืงืืืขืกืืื ื ืืืื ืืืขืจืกืืข ืคืื โโืกืืึทืืืง ืืขืงืขืก, ืงืขื ืขื ืืืื ืืขืฉืืงื ืืืจื ืื ืืึทืกืข ืืึทืืึทื ืกืขืจ ืฆื ืคึผืึธืืก ืืืึธืก ืืึธืื ืึท ืึทื ืืขืจืฉ ืืืขืจืกืืข, ืืื, ืคึฟืึทืจ ืงืืึธืจ ืืื ืืขืจ ืืึธื ืกืืืืช, ืึทืืึท ืืขืงืขืก ืืึธื ื ืื ืขืงืกืืกืืืจื. ืืขืจืืืขืจ, ืืื ืกืืจ ืคึฟืึทืจ ืื ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืึทืจืืขืื, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืืขืื ืึท ืจืืกืืจืืงืฉืึทื: "ืืขืจ ืืขืืืืงืขืจ ืืืขืจืกืืข ืคืื โโโโืื ืึทืคึผืืึทืงืืืฉืึทื ืึทื ืืขืืื ื index.html ืืึธื ืืื ืขื ืกืึทืืกืึทืงืืืึทื ื ืจืืงืืืขืก'.
ืืืจ ืืืขืื ืืึทืงืืืขื ืืึธืจื ืืื ืงืึธื ืกืืกืืขื ื ืืึทืฉ-ืืืืืจื ืืึทืกืข ืืึทืืึทื ืกืื ื (ืงืึธื ืกืืกืืขื ื ืืึทืฉ ืืึธืืืืึทืืึทื ืกืื ื)... ืืื ืืขื ืคืึทื ืจืืงืืืขืก ืคืื ืืขืจ ืืขืืืืงืขืจ ืงืืืขื ื ืืขื ืขื ืืขืฉืืงื ืฆื ืืขืจ ืืขืืืืงืขืจ ืืึทืงืขื ื ืืืึทืฉืคึผืื, ืคึฟืึทืจ ืืืึธืก ืึท ืคึผืจืขืืขืคืื ืขื ืคืึทืจืืึธื ืืื ืืขื ืืฆื - ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืึท ืืืืคึผ ืืขืืขืจ. ืืืคึผืืึทืืขื ืึทื ืืื ืืขืกืืื ืึทืืืึธื ืจืืืขืก.
ืืขืกืืื ืึทืืืึธื ืจืืืขืก
ื ืึธื VirtualService ืืขืฉืืงื ืึท ืืงืฉื ืฆื ืื ืืขืืขืื ืืื ืกื, ื ืืฆื ืืขืกืืื ืึทืืืึธื ืจืืืขืก ืืืจ ืงืขื ืขื ืืขืคืื ืืจื ืคึผืึทืืึทืกืื ืืืึธืก ืืืขื ืืืื ืืขืืืขื ืื ืฆื ืคืึทืจืงืขืจ ืืึทืฉืขืจื ืคึฟืึทืจ ืื ืกืืึทื ืกืื ืคืื ืืขื ืืื ืกื:
ืคืึทืจืงืขืจ ืคืึทืจืืืึทืืืื ื ืืื Istio ืจืขืกืืจืกื
ืืึธื: ืื ืคึผืจืึทื ืคืื Istio ืจืขืกืืจืกื ืืืืฃ ื ืขืฅ ืคืึทืจืงืขืจ ืืื ืืขืจืืื ืื ืืืืฃ ืึท ืืืขื ืืืึธืก ืืื ืืจืื ื ืฆื ืคึฟืึทืจืฉืืืื. ืฆื ืืืื ืืขื ืื, ืืขืจ ืืึทืฉืืืก ืืืืฃ ืืืึธืก ืืืึทืฉืคึผืื ืฆื ืฉืืงื ืื ืืงืฉื ืืื ืืขืืืื ืืืจื ืื ืฉืืืืขืจ ืืื ืื ืื ืืจืขืกืก ืืึทืืขืืืืึท ืงืึทื ืคืืืืขืจื ืืื ืื CRD.
ืืื ืืขืกืืื ืึทืืืึธื ืจืืืขืก, ืืืจ ืงืขื ืขื ืงืึทื ืคืืืืขืจ ืืึทืกืข ืืึทืืึทื ืกืื ื ืฆื ื ืืฆื ืงืึธื ืกืืกืืขื ื ืืึทืฉืขืก ืืื ืขื ืฉืืจ ืึทื ืืขืจ ืืขืืืืงืขืจ ืืื ืกื ืืืึทืฉืคึผืื ืจืืกืคึผืึทื ืื ืฆื ืืขืจ ืืขืืืืงืขืจ ืืึทื ืืฆืขืจ. ืื ืคืืืืขื ืืข ืงืึทื ืคืืืืขืจืืืฉืึทื ืึทืืึทืื ืืืจ ืฆื ืืขืจืืจืืืื ืืขื (
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
, ืึทืืื ืึทืืข ืจืืงืืืขืก ืืืขื ืืืื ืคืื ืื ืืขืจืืขืืืืื ืฆืืืืฉื ืึทืืข ืื ืกืืึทื ืกืื:
... ืึธืืขืจ ืืืจ ืืืขืื ืึทื ืจืืงืืืขืก ืืึธื ืืืื ืืขืฉืืงื ืฆื ืื1 ืื ืกืืึทื ืกืื ืืื ืืืจืขืจื ืฆื ืื2 ืื ืกืืึทื ืกืื:
ืืืจ ืืืขืื ืืขืจืืจืืืื ืืขื ืืืจื VirtualService ืืื ืงืึธืืืื ืึทืฆืืข ืืื DestinationRule, ืืื ืื ืึผืืืื ืืืขื ืืึทืฉืืืกื ืื ืกืึทืืกืขืฅ ืืื ืจืืฅ ืคืื ืื VirtualService ืฆื ืึท ืกืคึผืขืฆืืคืืฉ ืกืึทืืกืขื.
ืืขืคืื ืืจื ืกืืืกืขืฅ ืืื ืืขืกืืื ืืืฉืึทื ืจืืืขืก
ืกืืืกืขืฅ (ืกืึทืืกืขืฅ) ืืขื ืขื ืืืฉืืืกื ืืืจื ืื ืคืืืืขื ืืข ืงืึทื ืคืืืืขืจืืืฉืึทื (
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-logic
spec:
host: sa-logic # 1
subsets:
- name: v1 # 2
labels:
version: v1 # 3
- name: v2
labels:
version: v2
- ืืึธืกื (
host
) ืืืคืืื ื ืึทื ืื ืืขืจืฉื ืึทืคึผืืืื ืืืืื ืฆื ืงืึทืกืขืก ืืืขื ืืขืจ ืืึทืจืฉืจืื ืืืื ืฆื ืื ืกืขืจืืืืกsa-logic
; - ืืืืืขื (
name
) ืกืึทืืกืขืฅ ืืขื ืขื ืืขื ืืฆื ืืืขื ืจืืืื ื ืฆื ืกืึทืืกืขื ืื ืกืืึทื ืกืื; - ืืืืื (
label
) ืืืคืืื ื ืื ืฉืืืกื-ืืืขืจื ืคึผืขืจื ืึทื ืื ืกืืึทื ืกืื ืืืื ืืืืึทืื ืฆื ืืืขืจื ืึท ืืืื ืคืื ืื ืกืึทืืกืขื.
ืฆืืืืืื ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created
ืืืฆื ืึทื ืื ืกืึทืืกืขืฅ ืืขื ืขื ืืืคืืื ื, ืืืจ ืงืขื ืขื ืืึทื ืืืืฃ ืืื ืงืึทื ืคืืืืขืจ ืื VirtualService ืฆื ืฆืืืืืื ืึผืืืื ืฆื ืจืืงืืืขืก ืฆื ืกืึท-ืืึธืืืง ืึทืืื ืึทื ืืื:
- ืจืืืฉื ืฆื ืึท ืกืืืกืขื
v1
, - ืฉืคึผืืื ืฆื ืึท ืกืืืกืขื
v2
.
ืื ืคืืืืขื ืืข ืืึทื ืืคืขืกืืึธ ืึทืืึทืื ืืืจ ืฆื ืืขืจืืจืืืื ืืืื ืคึผืืึทื ื (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
mirror:
host: sa-logic
subset: v2
ืงืืื ืืขืจืงืืขืจืื ื ืืืจืฃ ืืึธ, ืึทืืื ืืึธืื ืก ื ืึธืจ ืืขื ืขืก ืืื ืงืึทืืฃ:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
ืืึธืืืจ ืืืืื ืื ืืึทืกืข ืืืจื ืจืืคื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
ืืื ืก ืงืืง ืืื ืื ืจืขืืืืืึทืื ืืื Grafana, ืืื ืืืจ ืงืขื ืขื ืืขื ืึทื ืื ืืืขืจืกืืข ืืื ืืึทืื (buggy
) ืจืขืืืืืืื ืืื ืืืจืืคืึทื ืคึฟืึทืจ ~ 60% ืคืื ืจืืงืืืขืก, ืึธืืขืจ ืงืืื ืขืจ ืคืื ืื ืคืืืืืขืจื ืืืืจืงื ืกืืฃ ืืืืขืจื ืืื ืืื ืืขื ืขื ืจืืกืคึผืึทื ืืื ืืืจื ืึท ืคืืืกื ืืืง ืืื ืกื.
ืืขืจืึธืื ืจืขืกืคึผืึธื ืกืขืก ืคืื ืคืึทืจืฉืืืขื ืข ืืืขืจืกืืขืก ืคืื ืื ืกืึท-ืืึธืืืง ืืื ืกื
ืืึธ ืืืจ ืขืจืฉืืขืจ ืืขืืขื ืืื ืืืืจืืืึทื ืกืขืจืืืืก ืืื ืืขืืืขื ืื ืฆื ืื ืขื ืืืึธืืก ืคืื ืืื ืืืขืจ ืืึทืืื ืื ืืก: ืืืขื sa-web-app
ืืืื ืึท ืืงืฉื ืฆื sa-logic
, ืขืก ืืืื ืืืจื ืื ืกืืืืงืึทืจ ืขื ืืืื, ืืืึธืก - ืืืจื VirtualService - ืืื ืงืึทื ืคืืืืขืจื ืฆื ืืึทืจืฉืจืื ืื ืืขืื ืฆื ืื v1 ืกืึทืืกืขื ืืื ืฉืคึผืืื ืื ืืขืื ืฆื ืื v2 ืกืืืกืขื ืคืื ืื ืกืขืจืืืืก sa-logic
.
ืืื ืืืืกื, ืืืจ ืงืขื ืฉืืื ืืจืึทืืื ืึทื ืืืืจืืืึทื ืืึทืืื ืื ืืก ืืื ืคึผืฉืื. ืืื ืืขืจ ืืืืึทืืขืจ ืึธืคึผืืืืืื ื, ืืืจ ืืืขืื ืืงืกืคึผืึทื ื ืืืืฃ ืืขื ืืืจื ืืึธืื ืึทื ืืื ืืขื ืขื ืืืื ืืืืช ืืจืืืก.
ืงืึทื ืึทืจื ืจืึธืืึธืืืฅ
ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื ืืื ืืขืจ ืคึผืจืึธืฆืขืก ืคืื ืจืึธืืืื ื ืึท ื ืืึทืข ืืืขืจืกืืข ืคืื โโืึท ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืึท ืงืืืื ื ืืืขืจ ืคืื ืืืืขืจื. ืขืก ืืื ืืขื ืืฆื ืฆื ืืึทืื ืืืืขืจ ืึทื ืขืก ืืขื ืขื ืงืืื ืคืจืืืืขืืขื ืืื ืืขืจ ืืขืืืื ื ืืื ืืืืื ื ืึธื ืืขื, ืฉืืื ืืืืขืจ ืืื ืืืึทื (ืืขืืืื ื) ืงืืืึทืืืืขื, ืคืึทืจืฉืคึผืจืืืื ืขืก ืฆื ืื ืืขืจืข ืืืืขืจื.ะพืืจืขืกืขืจืข ืืืืขื.
ืฆื ืืึทืืืืึทืื ืงืึทื ืึทืจื ืจืึธืืืึทืื, ืืืจ ืืืขืื ืคืึธืจืืขืฆื ืฆื ืึทืจืืขืื ืืื ืึท ืกืึทืืกืขื buggy
ั sa-logic
.
ืืึธืืืจ ื ืืฉื ืืืืกื ืฆืืื ืืืืฃ ืงืืืื ืืงืืืื ืืื ืืืืื ืฉืืงื 20% ืคืื ืืืืขืจื ืฆื ืื ืืืขืจืกืืข ืืื ืืึทืื (ืืึธืก ืืืขื ืคืึธืจืฉืืขืื ืืื ืืืขืจ ืงืึทื ืึทืจื ืจืึธืืืึทืื), ืืื ืื ืจืืขื 80% ืฆื ืืขืจ ื ืึธืจืืึทื ืืื ืกื. ืฆื ืืึธื ืืึธืก, ื ืืฆื ืื ืคืืืืขื ืืข VirtualService (
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% ืคืื ืื ืืึทื ืืฆืขืจ ืืึทืืข. ืืืื ืืขืจืืขื! ืืืฆื, ืืื ืืขืืขืจ ืคืึทื ืืืขื ืืืจ ืืขื ืขื ื ืืฉื ืืืืขืจ ืคืื ืืื ืืืขืจ ืงืึธื (ืืื ืื ืืขืจืข ืืืขืจืืขืจ - ืฉืืขื ืืืง ...), ืืืจ ืงืขื ืขื ื ืืฆื ืืืจืขืจืื ื ืืื ืงืึทื ืึทืจื ืจืึธืืึธืืืฅ.
ืืืืืึทืืฅ ืืื ืจืืืจืืื
ืืืขืจ ืืึทืื ืืึธื ื ืื ืฉืืขื ืืืง ืกืืฃ ืึทืจืืืฃ ืืื ืื ืงืึธื. ืืื ืืขืจ ืจืฉืืื ืคืื "
ืคึฟืึทืจ ืืขืืึทื ืกืืจืืืฉืึทื ืืืจ ืืืขืื ืคืึธืจืืขืฆื ืฆื ื ืืฆื ืื ืืขืืืข ืคึผืจืึธืืืขื ืืืขืจืกืืข sa-logic
(buggy
), ืืื ืืืจ ืืืขืื ืกืืืืืืจื ืื ืึทื ืจืืืืืึทืืืืืื ืคืื ืื ื ืขืฅ ืืื ืืจืึทืค - ืคืืืืืขืจื.
ืืึธืื ืืื ืืืขืจ ืืื ืกื ืืื ืืึทืื ืืึธืื ืึท 1/3 ืืขืืขืื ืืืึทื ืฆื ื ืขืืขื ืฆื ืืึทื ื ืฆื ืจืืกืคึผืึทื ื, ืึท 1/3 ืืขืืขืื ืืืึทื ืฆื ืขื ืืืงื ืืื ืึทื ืืื ืขืจืืขืืขืจ ืกืขืจืืืืจืขืจ ืืขืืช, ืืื ืึท 1/3 ืืขืืขืื ืืืื ืฆื ืืฆืืื ืฆืืจืืงืงืืืขื ืืขื ืืืึทื.
ืฆื ืคืึทืจืืื ืขืจื ืื ืคึผืจืึทื ืคืื ืึทืืึท ืคึผืจืึธืืืขืืก ืืื ืืึทืื ืืขืื ืืขืกืขืจ ืคึฟืึทืจ ืืืืขืจื, ืืืจ ืงืขื ืขื:
- ืืืื ืึท ืืืืืึทืื ืืืื ืื ืกืขืจืืืืก ื ืขืื ืืขืจ ืืื 8 ืกืขืงืื ืืขืก ืฆื ืจืืกืคึผืึทื ื,
- ืคึผืจืืืืจื ืืืืืขืจ ืืืื ืื ืืงืฉื ืคืืืื.
ืคึฟืึทืจ ืืืคึผืืึทืืขื ืืืืฉืึทื, ืืืจ ืืืขืื ื ืืฆื ืื ืคืืืืขื ืืข ืืืื ืืขืคึฟืื ืืฆืืข (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 50
- destination:
host: sa-logic
subset: v2
weight: 50
timeout: 8s # 1
retries:
attempts: 3 # 2
perTryTimeout: 3s # 3
- ืื ืืืืืึทืื ืคึฟืึทืจ ืื ืืขืื ืืื ืืึทืฉืืืื ืฆื 8 ืกืขืงืื ืืขืก;
- ืจืืงืืืขืก ืืขื ืขื ืจืืืจืืื 3 ืืื;
- ืืื ืืขืืขืจ ืคึผืจืืืื ืืื ืืขืจืขืื ื ืืื ื ืื ืืขืจืึธืื ืืืื ืื ืขื ืืคืขืจ ืฆืืื ืืงืกืืื 3 ืกืขืงืื ืืขืก.
ืืึธืก ืืื ืึทื ืึทืคึผืืึทืืึทืืืืฉืึทื ืืืืึทื ืืขืจ ืืึทื ืืฆืขืจ ืืืขื ื ืืฉื ืืึธืื ืฆื ืืืึทืจืื ืืขืจ ืืื 8 ืกืขืงืื ืืขืก ืืื ืืืจ ืืืขืื ืืึทืื ืืจืื ื ืืึทืข ืคืจืืืื ืฆื ืืึทืงืืืขื ืึท ืขื ืืคืขืจ ืืื ืคืึทื ืคืื ืคืืืืืขืจื, ืื ืงืจืืกืื ื ืื ืืขืืขืื ืืืื ืคึฟืึทืจ ืึท ืืขืจืึธืื ืขื ืืคืขืจ.
ืฆืืืืืื ืื ืืขืจืืืึทื ืืืงื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured
ืืื ืืฉืขืง ืืื ืื Grafana ืืจืึทืคืก ืึทื ืื ื ืืืขืจ ืคืื ืืขืจืึธืื ืจืขืกืคึผืึธื ืกืขืก ืืื ืืขืืืืงืกื ืืืืื:
ืืืคึผืจืืืืืึทื ืฅ ืืื ืืฆืืื ืขื ืืคืขืจ ืกืืึทืืืกืืืง ื ืึธื ืึทืืื ื ืืืืืึทืืฅ ืืื ืจืืืจืืขืก
ืืืืืขืจ ืืืจ ืืึทื ืืืืฃ ืฆื ืืขืจ ืืืืึทืืขืจ ืึธืคึผืืืืืื ื (ืึธืืขืจ ืืึทื ืฅ, ืฆื ืืขืจ ืืืืึทืืขืจ ืืืื ืคืื ืืขื ืึทืจืืืงื, ืืืืึทื ืืื ืืขื ืขืก ืืืขื ืืืื ืงืืื ืืขืจ ืคึผืจืึทืงืืืฉ ืืงืกืคึผืขืจืึทืืึทื ืฅ - ืืขืขืจืขื ืืืืขืจืืขืฆืื ื), ืืืกืืขืงื 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
ืงืจืืึทื ืฆืืืืขื ืืื ืืึทืืงืืขืึทื ืคึผืึทืืขืจื ื
ืืืจ ืืขื ืขื ืืขืจืขืื ืืืขืื ืฆืืืื ืืืืืืืง ืคึผืึทืืขืจื ื ืืื ืืืงืจืึธืกืขืจืืืืก ืึทืจืงืึทืืขืงืืฉืขืจ ืืืึธืก ืืึธืื ืืืจ ืฆื ืืขืจืืจืืืื ืืื-ืจืขืงืึธืืืขืจื (ืืื ืืืืืื ื) ืืึทืืื ืื ืืขื.
ืฆืืืืขื ("ืงืจืืึทื ืฆืืืืขื") ืืขืืืืื ื ืฆื ืคืึทืจืขื ืืืงื ืจืืงืืืขืก ืืืึธืก ืงืืืขื ืฆื ืึท ืืืึทืฉืคึผืื ืคืื ืึท ืืื ืกื ืืืึธืก ืืื ืืขืืืืื ืึทื ืืขืืื ืืื ืืืงืขืจื ืขืก ืืฉืขืช ืงืืืขื ื ืจืืงืืืขืก ืืขื ืขื ืจืืืขืจืขืงืืื ืฆื ืืขืืื ื ืื ืกืืึทื ืกืื ืคืื ืื ืกืขืจืืืืก (ืืืึธืก ืื ืงืจืืกืื ืื ืคึผืจืึธืฆืขื ื ืคืื ืืขืจืึธืื ืจืขืกืคึผืึธื ืกืขืก). (ืืึทืืขืจืงืื ื: ื ืืขืจ ืืืืืืื ืืึทืฉืจืืึทืืื ื ืคืื ืืขื ืืืกืืขืจ ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื, ืืืฉื,
ืืึทืืงืืขื ("ืฆืขืืืืืื ื") ืืืึธืืึทืืขืก ืกืขืจืืืืก ืคืืืืืขืจื ืคืื ืึทืคืขืงืืื ื ืื ืืื ืฆืข ืกืืกืืขื. ืฆืื ืืืืฉืคึผืื, ืกืขืจืืืืก ื ืืื ืฆืขืืจืืื ืืื ืื ืื ืืขืจ ืกืขืจืืืืก (ืืขืจ ืงืืืขื ื ืคืื ืกืขืจืืืืก ื) ืืืื ืึท ืืงืฉื ืฆื ืกืขืจืืืืก ื, ืืืึธืก ืืืื ืขืก ืืืกืืึทืืขืจื ืืืื ืคืึธืืขื ืืขืงื ืืื ืงืขื ืขื ื ืืฉื ืืื ืขื ืื ืืขืจืข ืจืืงืืืขืก (ืืคืืื ืืืื ืืื ืืขื ืขื ื ืืฉื ืคึฟืื ืกืขืจืืืืก ื). (ืืึทืืขืจืงืื ื: ื ืืขืจ ืืืืืืื ืืึทืฉืจืืึทืืื ื ืคืื ืืขื ืืืกืืขืจ ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื, ืืืฉื,
ืืื ืืืขื ืืืืขืจืืึธืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืืขืืึทืืืก ืคืื ืื ืคึผืึทืืขืจื ื ืืืืึทื ืืื ืืขื ืขื ืืจืื ื ืฆื ืืขืคึฟืื ืขื ืืื
ืคึผืก ืคืื ืืืืขืจืืขืฆืขืจ
ืืืืขื ืขื ืืืื ืืืืฃ ืืื ืืืขืจ ืืืึธื:
- "ืฆืืจืืง ืฆื ืืืงืจืึธืกืขืจืืืืกืขืก ืืื Istio":
ืืืื 1 (ืืงืืื ืฆื ืื ืืืืคึผื ืคึฟืขืึดืงืืืื) ,ืืืื 3 (ืึธืืขื ืืึทืงืืืฉืึทื ืืื ืืขืจืืืืืขื ืืฉ) ; - ยซ
ืงืึทื ืืืื - ืืืืืืืืื ืืื ืกื ืืืื ืคึฟืึทืจ Kubernetes "; - ยซ
ืืืึธืก ืืื ืึท ืืื ืกื ืืขืฉ ืืื ืืืึธืก ืืึธื ืืื ืืึทืจืคึฟื ืืืื ืขืจ [ืคึฟืึทืจ ืึท ืืืึธืืงื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืืงืจืึธืกืขืจืืืืกืขืก]? '.
ืืงืืจ: www.habr.com