
ááŸááșáá»ááșá ááŹááŹááŒááș: á€á
áźážááźážáááș Istio á
áœááșážáááșáá»áŹážááᯠááááșáááșááŒáźáž áááșážáááŻá·ááᯠáááșááœá±á·áááŻááșááŒáááș áááșááœááșááŹážáááșá áááŻáá»áœááșáŻááșáááŻá·áááș á€áááșáá±áŹááșááŸáŻ mesh áááœáČá·á
ááșážááŻá¶ááŸáá·áșáĄááŻá¶ážááŒáŻááŸáŻááááŻáááŻááŸáŻááșááœá±ážáá±áŹááŸáŻáá±áŹáá·áșáá»áŹážáĄááŒá±áŹááșážááŸáá·áș áĄáá°ážáááŒáá·áșá áá±áá»áŹá
áœáŹááŒááșáááșááŹážáá±áŹáááșážááŒá±áŹááșážááŸáá·áșááœááșáááșáááșážááŒá±áŹááșážá
áźáá¶ááá·áșááœáČááŸáŻáĄááŒá±áŹááșážááŒá±áŹáá«áááșá
áá±áŹááșážáá«ážáááș repository á០configurations ( Kubernetes ááŸáá·áș Istio áĄááœááș manifests áá»áŹáž) ááᯠáĄááŻá¶ážááŒáŻááŒá±áŹááșáž ááá·áșáĄáŹáž áá»áœááșáŻááșáááŻá· ááááá±ážáá«áááșá .
áááșážá ááșážáááșáž á áźáá¶ááá·áșááœáČááŸáŻ
Istio ááŒáá·áșá áá¶á·áááŻážáá±ážáááșáĄááœááș áĄá áŻáĄáá±ážááœááș á áœááșážáááșáĄáá áșáá»áŹážáá±á«áșááŹáááș-
- áááŻááșážááá áș áá±áŹááșážáááŻááŸáŻáááșážááŒá±áŹááșáž: Canary ááŒáá·áșáá»áááŸáŻáá»áŹážá A/B á ááșážáááșááŒááșážá
- Load áá»áááșááœááșáá»áŸáŹ: hashes áááŻáĄááŒá±áá¶á áááŻážááŸááșážááŒáźáž áááŻááșááźáá±áŹá
- ááŒáŻááșáá»ááŒáźážáá±áŹááș ááŒááșáááșáá°áá±áŹááșáá±ážáĄáá»áááșááŻááșááŒááșážá áááșá ááșážááŒááșážá circuit breakers;
- áĄááŸáŹážáĄááœááșážáá»áŹážááᯠááá·áșááœááșážááŒááșážá- ááŸá±áŹáá·áșááŸá±ážááŸáŻá áá»áááșážááœáŹážáá±áŹ áá±áŹááșážáááŻááŸáŻáá»áŹážá á áááșáááŻá·á
áá±áŹááșážáá«ážááœááș áááșáááșáá±áŹáșááŒááŹážáááșááŸáá·áșáĄáá»áŸ á€á
áœááșážáááșáá»áŹážááᯠááœá±ážáá»ááșááŹážáá±áŹ áĄááșááșááźáá±ážááŸááșážááᯠáĄááŻá¶ážááŒáŻá ááá°ááŹáĄááŒá
áș áááŻááșáá±áŹáșáááșááŒá
áșááŒáźáž áááșážáá
áșáá»áŸá±áŹááșááœááș ááá±áŹáááŹážáĄáá
áșáá»áŹážááᯠááááșáááșáá«áááșá áááááŻá¶ážáá±áŹ áĄáá°áĄáááŒá
áșáááá·áșáááșá DestinationRules (áááŻáááŻáááșááŸáŹ áĄááœáŹážáĄááŹ/áá±áŹááșážáááŻááŸáŻáá»áŹáž áááșáá¶áááŸááá°ááŸáá·áșáááșáááșááá·áș á
ááșážáá»ááșážáá»áŹáž - ááá·áșááŸááșážááŒá± ááŹááŹááŒááșáá»ááșá)A/B á
ááșážáááșááŒááșážááĄáá°áĄááźááŒáá·áșá
A/B á ááșážáááșááŒááșáž- áááșááœá±á·ááœááș DestinationRules
A/B á ááșážáááșááŒááșážááᯠáĄááșáááźáá±ážááŸááșážáá áșááŻá ááŹážááŸááșážááŸá áșáá»ááŻážááŸá (áá»áŹážáá±áŹáĄáŹážááŒáá·áș áááșážáááŻá·áááș áĄááŒááșáĄáŹážááŒáá·áș ááœáČááŒáŹážáááș) ááŸáá·áș áááșááá·áșáĄááŹáááș áĄááŻá¶ážááŒáŻáá°áĄááœá±á·áĄááŒáŻá¶ááᯠáááŻáááŻáá±áŹááșážááœááșá á±áááșááᯠáá»áœááșáŻááșáááŻá· 100% ááá±áá»áŹáá«á áááŻá·ááŒá±áŹáá·áșá áá»áœááșáŻááșáááŻá·áááș ááŹážááŸááșážááŸá áșáá»ááŻážááŻá¶ážááᯠáá áșááŒááŻááșáááș ááŻááșáá±áŹááșááŒáźáž áááșááá áșáá»áŹážááᯠá áŻáá±áŹááșážáá«áááșá
A/B á ááșážáááșááŸáŻáááŻááșááŒáááșáĄááœááș áááŻáĄááșáá±áŹ Frontend á ááŻáááááŹážááŸááșážááᯠáĄááŻá¶ážáá»áááș áĄá±áŹááșáá« command ááᯠrun áá«á
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green createdáĄá áááșážáá±áŹááșááŹážááŸááșážáĄááœááș ááŒáá·áșáá»ááșááŸáŻáááș áá±ááŹááŸá áșááŻááœááș ááœáČááŒáŹážáááș-
- ááŻá¶áááș ááá°ááźáá±áŹ tag áááŻáĄááŒá±áá¶áááș -
istio-green, - áá°ážáá»áŹážááœááș áĄááœáŸááșážáá«ááŸááá«áááșá
version: green.
ááŒáá·áșáá»ááșááŸáŻááŸá
áșááŻááŻá¶ážááœááș áá¶ááááșáá
áșááŻááŸááá±áŹááŒá±áŹáá·áșááŒá
áșáááșá app: sa-frontendá virtual áááșáá±áŹááșááŸáŻááŒáá·áș áááșážááŒá±áŹááșážááŒááŹážáá±áŹ áá±áŹááșážáááŻáá»ááșáá»áŹáž 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.htmlstatic áááŻááșáá»áŹážá ááŹážááŸááșážáá
áșááŻáĄáŹáž áá±áŹááșážáááŻááŒááșážááŒáá·áșá ááá°ááźáá±áŹ ááŹážááŸááșážááŸáááá·áș pods áá»áŹážáá¶áááŻá· load balancer á០áá±ážáááŻá·áááŻááșáááșá áááșááŸáŹážáá±áŹ áĄááŒá±áŹááșážáá»áŹážááŒá±áŹáá·áșá áááŻáááŻá·áá±áŹáááŻááșáá»áŹáž áááŸááá«á áááŻá·ááŒá±áŹáá·áș áá»áŸá±áŹááșááœáŸáŹáá»áŹáž áĄááŻááșááŻááșáááŻááșáááș ááá·áșáááșáá»ááșáá
áșáᯠáááșááŸááșáááș áááŻáĄááșáááș-"index.html áááșáá±áŹááșááŸáŻáá±ážáá±áŹ áĄáááźáá±ážááŸááșážá áá°ááźáá±áŹááŹážááŸááșážáááș áá±áŹááșáááșááœáČáá±áŹááșážáááŻááŸáŻáá»áŹážááᯠáá±áŹááșááœááșáá±ážááá·áșáááșá"á
áááááșáááșáž hash-based load balancing ááŒáá·áș áááŻáá±ááŹááᯠáá±áŹááșáá«áááșá (áá áșááááșáááșáž Hash Loadbalancing)... ááźááá áčá ááŸáŹ áá°ááźáá±áŹ client á០áá±áŹááșážáááŻáá»ááșáá»áŹážááᯠáá°ááźáá±áŹ backend instance áááŻá· áá±ážáááŻá·áá«áááșáááŒááŻáááșáááșááŸááșááŹážáá±áŹ áááŻááșáááŻááșááŸáŻááᯠáĄááŻá¶ážááŒáŻááŹážááá·áșáĄááœááș - á„ááᏠHTTP áá±á«ááșážá áźážáá áșááŻá DestinationRules ááᯠáĄááŻá¶ážááŒáŻá áĄáá±áŹááșáĄáááșáá±áŹáșááČá·áááșá
ááœáŹážááá·áșáá±áᏠá ááșážáááșážáá»áŹáž
áááșážááŒáźážáá±áŹááș VirtualService DestinationRules ááᯠáĄááŻá¶ážááŒáŻá áĄáááŻááŸááá±áŹ áááșáá±áŹááșááŸáŻáááŻá· áá±áŹááșážáááŻáá»ááșáá áșáᯠáá±ážáááŻá·ááŒáźážá á€áááșáá±áŹááșááŸáŻá á„áááŹáá»áŹážáĄááœááș áŠážáááșááŹážáá±áŹ áĄááœáŹážáĄááŹáĄááœááș áĄááŻá¶ážááŒáŻááá·áș áá°áá«ááá»áŹážááᯠáá»áœááșáŻááșáááŻá· áááșááŸááșáááŻááșáááș-

Istio áĄáááșážáĄááŒá
áșáá»áŹážááŒáá·áș áááșážááŒá±áŹááșážá
áźáá¶ááá·áșááœáČááŸáŻ
ááœá±áŹáááŻâ ááœááșáááșáĄááœáŹážáĄááŹáĄáá±á«áș Istio áĄáááșážáĄááŒá áșáá»áŹážá áááșáá±áŹááșááŸáŻááᯠááŹážáááșáááœááșáá°áá±áŹáááșážáááșážááŒáá·áș á€áá±ááŹááœááș áááșááŒááŹážáááșá áááá»á áœáŹááŒá±áŹááá»áŸááș CRD ááœááșááá·áșááœááșážááŹážáá±áŹ Ingress Gateway ááŸá áá¶ááááșá០áá±áŹááșážáááŻáá»ááșááᯠáá±ážáááŻá·áááș áááșááá·áșá„áááŹááᯠáá±ážáááŻá·ááááșááᯠáááá»á áœáŹááŻá¶ážááŒááșáááșá
Destination Rules ááŒáá·áșá áá°ááźáá±áŹ hashe áá»áŹážáááŻáĄááŻá¶ážááŒáŻáááș load balancing ááᯠconfigure áááŻááșááŒáźáž áá°ááźáá±áŹ service instance áááș áá°ááźáá±áŹ user áááŻááŻá¶á·ááŒááșááŒá±áŹááșážáá±áá»áŹá á±áá«áááșá áĄá±áŹááșáá«ááœáČá·á ááșážááŻá¶áááș ááá·áșáĄáŹáž áááșážáááŻáĄá±áŹááșááŒááșáááșááœáá·áșááŒáŻáááș ():
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-frontend
spec:
host: sa-frontend
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: version # 1 1 - HTTP header á áĄááŒá±áŹááșážáĄááŹáá»áŹážáĄáá±á«áș áĄááŒá±áá¶á hash ááᯠááŻááșáá±ážáá«áááșá version.
áĄá±áŹááșáá« command ááŒáá·áș configuration áááŻáĄááŻá¶ážááŒáŻáá«-
$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created ááᯠáĄá±áŹááșáá« command ááᯠrun ááŒáźáž header ááᯠáááșááŸááșáá±áŹáĄáá« ááŸááșáááșáá±áŹ áááŻááșáá»áŹáž áááŸáááŒá±áŹááșáž áá±áá»áŹáá«á
á±á version:
$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep mainááœá±áŹáááŻ: header ááœááș ááá°ááźáá±áŹáááșáááŻážáá»áŹážááá·áșáááșááŸáá·áș browser ááœááș áááŻááșáááŻááșááááșáá»áŹážááᯠá ááșážáááșáááșá áááșááŻá¶ážáááŻááșáááșá Chrome áááŻá· (áááŻá·áááŻááș Firefox áĄááœááș - ááá·áșááŸááșážááŒá±á ááŹááŹááŒááșá).
áá±áá°áá»áĄáŹážááŒáá·áșá DestinationRules áááș load balancing á§ááááŹááœááșáááŻáááŻááŻááșáá±áŹááșáááŻááșá áœááșážááŸááááș - áĄáá±ážá áááșáááŻá á áșáá±ážáá«á .
VirtualService ááᯠáááșáá¶ááá±á·ááŹááźá áĄá±áŹááșáá« command áá»áŹážááᯠááŻááșáá±áŹááșááŒááșážááŒáá·áș áĄáááźáá±ážááŸááșážá "áĄá áááșážáá±áŹááșááŹážááŸááșáž" ááŸáá·áș áááșáááŻááșáᏠááŹááșáááșážááŒá±áŹááșáž á ááșážáááșážááᯠáá»ááșááŒáá«á ááŻá·á
$ 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â deletedMirroring- áááșááœá±á·ááœááș Virtual Services
áĄááááș ("áĄááŹáĄáá¶") áááŻá·áááŻááș ááŒá±ážááŻá¶ááŒááșááŒááșážá ("ááŸááșááŒá±áŹááșáž") áĄááŻá¶ážááŒáŻáá°áá»áŹážáĄáá±á«áș ááááááŻááșá á±ááČ ááŻááșááŻááșááŸáŻááŒá±áŹááșážááČááŸáŻááᯠá ááșážáááșáááŻááá·áșááá áčá áá»áŹážááœááș áĄááŻá¶ážááŒáŻáááș- áááșážáááŻááŻááșáá±áŹááșáááșáĄááœááș áá»áœááșáŻááșáááŻá·áááș ("ááŒá±ážááŻá¶") áá±áŹááșážáááŻááŸáŻáá»áŹážááᯠáááŻáá»ááșáá±áŹáĄááŒá±áŹááșážáĄááČáá»áŹážááŒáŻááŻááșááČá·ááá·áș ááŻáááá„áááŹáá áșááŻáááŻá· áá°ážáá°ááŒáźáž áĄáá»ááŻážáááșáá»áŹážáááŻááŒáá·áșáá«á áááŻážáááŻážááŸááșážááŸááșážááŒá±áŹááá»áŸááșá áááșáááŻááșáá±áŹáșáááŻááșáááșáááș áááșážááᯠáĄááŸááșááááșááŒááșáááșááŻá¶ážáááșááááááŻááșáá±áŹ á€áá»áŸááŒáźážááŹážáá±áŹáĄááŻáĄáá áșááŻá¶á á¶ááŒáá·áș ááœáČáááșáá±áŹááșážáááŻááŸáŻááŒáŻááŻááșááá·áșáĄáá«ááœááș áááșáááŻááșáá±áŹáșáááŻááșáááșáááș áĄáá±ážááŒáźážááŻá¶ážááŒáżááŹááᯠááœá±ážáá»ááșáááŻááșááŒááșážááŒá áșáááșá
ááŻááșáá±áŹááșáá»ááșááœááș á€ááŹááșáááșážááᯠá
ááșážáááșáááșáĄááœááș SA-Logic á ááŻáááá„áááŹááᯠbugs ááŒáá·áș áááșááźážááŒáá«á
ááŻá· (buggyáĄá±áŹááșáá« command ááᯠrun ááŒááșážááŒáá·áș)
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created áááŻááœááș instances áĄáŹážááŻá¶ážááᯠáá±áá»áŹáĄá±áŹááș command ááᯠrun ááŒáá«á
ááŻá· 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áááŻá·ááŒá±áŹáá·áș áá±áŹááșážáááŻáá»ááșáĄáŹážááŻá¶ážááᯠááŒá
áșáááșáĄáŹážááŻá¶ážááŒáŹážááœááș ááŒáá·áșáá±áá«áááș-

... áááŻá·áá±áŹáș áá»áœááșáŻááșáááŻá·áááș áá±áŹááșážáááŻáá»ááșáá»áŹážááᯠv1 instances áá»áŹážáááŻá· áá±ážáááŻá·ááŒáźáž v2 instances áá»áŹážáááŻá· ááŒá±áŹááșážááŒááșááŸááșá
á±áááŻáááș-

á
ááșážáá»ááșážáá»áŹážáááș VirtualService á áááșážááŒá±áŹááșážááœáČáá»áŹážááŸáá·áș áááșážááŒá±áŹááșážáá»áŹážááᯠáááșáááșááŸááșááŸááșááœáČáá
áșááŻáááŻá· áááșááŸááșáá±ážááá·áș DestinationRule ááŸáá·áș áá±á«ááșážá
ááșááŹážáá±áŹ VirtualService ááŸáááá·áș áááșážááᯠáĄá±áŹááșááŒááșáá«áááșá
Destination á ááșážáá»ááșážáá»áŹážááœááș áĄáááŻááșážááœáČáá»áŹážááᯠáááșááŸááșááŒááșážá
áĄáááŻááșážáá»áŹáž (áĄááœáČáá»áŹáž) áĄá±áŹááșáá« configuration áĄáŹážááŒáá·áșááŻá¶ážááŒááșááŒáááș ():
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) áĄá áŻááœáČá áĄá áááșáĄáááŻááșážáá áșááŻááŒá áșááŹáááș ááŹáááá»áŹážááŸáá·áș áááŻááșááźááááșááŒá áșáá±áŹ áá±áŹá·áááșáááŻážáĄááœáČáá»áŹážááᯠáááșááŸááșáááșá
áĄá±áŹááșáá« command ááŒáá·áș configuration áááŻáĄááŻá¶ážááŒáŻáá«-
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic createdáĄáááŻááșážááœáČáá»áŹážááᯠáááŻáááșááŸááșáááŻááșáá±áŹáĄáá«á áá»áœááșáŻááșáááŻá·áááș áááșážáááŻá·áĄáŹáž sa-logic áááŻá· áá±áŹááșážáááŻááŸáŻáá»áŹážáĄááœááș á ááșážáá»ááșážáá»áŹážááᯠáĄááŻá¶ážááŒáŻáááș 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áĄá±áŹááșáá« command áááŻáá±á«áșáááŻááŒááșážááŒáá·áș load áááŻááá·áșááŒáá«á ááŻá·á
$ 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-logic áááșáá±áŹááșááŸáŻá ááá°ááźáá±áŹááŹážááŸááșážáá»áŹážá áĄá±áŹááșááŒááșáá±áŹááŻá¶á·ááŒááșááŸáŻáá»áŹáž
á€ááœááș áá»áœááșáŻááșáááŻá·ááááșáá±áŹááșááŸáŻáá»áŹážá áá¶ááááșáá»áŹážáĄááœááș VirtualService ááᯠáááșáááŻá·áĄááŻá¶ážáá»áááșááᯠáá»áœááșáŻááșáááŻá· áááááŻá¶ážááŒááșááœá±á·áááŻááșááááș- áááșáĄáá»áááș sa-web-app áá±áŹááșážáááŻáá»ááșáá
áșááŻááŒáŻááŻááșáááșá sa-logicá VirtualService ááŸáá
áșááá·áș - áá±áŹááșážáááŻáá»ááșááᯠv1 áĄá
áŻááœáČáááŻá· áááșážááŒá±áŹááșážááŒá±áŹááșážáááșááŸáá·áș áááșáá±áŹááșááŸáŻá v2 áĄááœáČáááŻá· áá±áŹááșážáááŻáá»ááșáĄáŹáž ááŒááșááŒá±áŹááșážáááș ááŒááșáááșááŹážááá·áș sidecar Envoy ááŸáááá·áș ááŒááșáááșážáá«áááșá sa-logic.
Virtual Services áááș áááŻážááŸááșážáááșáᯠáááș áááșáá±áŹááșážáááșáááŻááșáááș á áá±áŹááșáĄáááŻááșážááŸáŹáá±áŹá· áá°áááŻá·á ááááșáá±áŹááșážáááșáááŻá· ááŒá±áŹááŒááșážáĄáŹážááŒáá·áș áĄáČáá«ááᯠáĄáá»ááșáá»áČá·ááŒá±áŹáá«áááșá
ááááčáááź ááŒáá·áșáá»ááá±áž
Canary Deployment áááș áĄááŻá¶ážááŒáŻáá°áĄáááșážá áŻáá¶áááŻá· áĄááșáááźáá±ážááŸááșážááŹážááŸááșážáĄáá áșááᯠááŒáá·áșáá»áááá·áșááŻááșáááșážá ááșááŒá áșáááșá ááŻááșáá±ááŸáŻááœááș ááŒáżááŹáááŸáááŒá±áŹááșáž áá±áá»áŹá á±áááșáĄááœááș áááșážááᯠáĄááŻá¶ážááŒáŻááŒáźážááŸáᏠáááșážá (ááŒáá·áșáá»áááŸáŻ) áĄáááșáĄááœá±ážááᯠááŻá¶ááŒááșááŒáźáž áĄááŒáŹážáĄááŻá¶ážááŒáŻáá°áá»áŹážáá¶ ááŒáá·áșáá±áá«áĐŸáááááșáááșááŒáźážá
Canary ááŒáá·áșáá»áááŸáŻáá»áŹážááᯠáááŻááșááŒáááșá áá»áœááșáŻááșáááŻá·áááș áĄáááŻááșážááœáČáá
áșááŻááŒáá·áș áááșáááșááŻááșáá±áŹááșááœáŹážáá«áááșá buggy Ń sa-logic.
áĄáá±ážáĄááœáŸáŹážááá áčá áá»áŹážááœááș áĄáá»áááșáááŒáŻááșážááČ ááŻá¶ážá áœáČáá° 20% ááᯠbug áá»áŹážááŒáá·áș ááŹážááŸááșážáááŻá· áá»ááșááŒááșážáááŻá·áá« (áááșážá áá»áœááșáŻááșáááŻá·á canary rollout ááᯠáááŻááșá áŹážááŒáŻáááș) ááŸáá·áș áá»ááș 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 áĄá±áŹááșáá« command ááŒáá·áș
$ 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: 500VirtualServices áááș Canary ááŒáá·áșáá»áááŸáŻáá»áŹážááᯠááŻááșáá±áŹááșáááŻááșáááș- á€ááá áčá ááœááșá áá»áœááșáŻááșáááŻá·áááș ááŒáżááŹáá»áŹážá ááŒá áșáááŻááșááŒá±ááŸááá±áŹ áááșáá±áŹááșááŸáŻááᯠáĄááŻá¶ážááŒáŻáá°áĄááŒá±áá¶á 20% áááŻá· áá»ááșážááŒá±áŹááșážááœáŹážáá«áááșá áĄá¶á·ááŒááœááș! áááŻá áá»áœááșáŻááșáááŻá·áááŻááșááᯠááá±áá»áŹááá·áșáĄáá«áááŻááșáž (áá áșáááșážáĄáŹážááŒáá·áș - áĄááŒáČáááșáž...)á áá»áœááșáŻááșáááŻá·áááș mirroring ááŸáá·áș canary rollouts áááŻááŻá¶ážáááŻááșáááșá
áĄáá»áááșááŻááșááŒáźáž ááŒááșá ááșážáá«á
áááŻá·áá±áŹáș bug áá»áŹážáááș ááŻááșááœááș áĄááŒáČáááŻá¶ážáá«á á áŹáááșážááČááŸáŹ ""ááááá±ááŹááœááș "ááœááșáááșáááș ááŻá¶ááŒááșá áááșáá»ááá±áŹ" áá°áá±áŹ ááŸáŹážááœááșážáá±áŹááŻá¶ááŒááșáá»ááșááŒá áșáááșá ááááșáá±áŹá· ááœááșáááș áááŻááș ááŻá¶ááŒááșá áááșáá»ááá±áŹá á€áĄááŒá±áŹááșážááŒá±áŹáá·áș áá»áœááșáŻááșáááŻá·áááș áĄáá»áááșááŻááșáááș áááŻáĄááșáá«áááșá (áĄáá»áááșááŻááșááœáŹážáááș) áááșááŒááŻážá áŹážáááșá (áááșá ááșážáá«).
áááŻááșááŒáááșáĄááœááș áá»áœááșáŻááșáááŻá·áááș áá°ááźáá±áŹááŒáżááŹááŹážááŸááșážááᯠáááșáááșáĄááŻá¶ážááŒáŻáá«áááșá sa-logic (buggy) ááŸáá·áș áá»áœááșáŻááșáááŻá·áááș áá»áááșážáá»ááșááœááșááŸáŻáá»áŹážááŒáá·áș ááœááșáááșá áááŻá¶ááŒááșáááŻááșááŸáŻááᯠáĄááŻáá°áá«áááșá
bug áá»áŹážááŒáá·áș áá»áœááșáŻááșáááŻá·ááááșáá±áŹááșááŸáŻáááș ááŻá¶á·ááŒááșáááș 1/3 ááŒáŹááŒáá·áșááá·áșáĄááœáá·áșáĄáá±ážá Internal Server Error ááŸáá·áș áĄááŻá¶ážáááșáááș 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 á ááčááá·áșáááș áááŻá á±áŹáá·áșáááŻááșážáááș ááááŻáĄááșáá±áŹááŒá±áŹáá·áș áááŻáááŻáá±áŹááșážááœááșáĄá±áŹááșááŒáŻááŻááșááŒááșážááŒá áșááŒáźáž áá»ááșááœááșááŸáŻáá»áŹážááŸááá«á ááŻá¶á·ááŒááșááŸáŻáĄáá áșááŻá¶ážááŒáááșááŒáŻááŻááșáᏠáĄá±áŹááșááŒááșáá±áŹááŻá¶á·ááŒááșááŸáŻáĄááœáá·áșáĄáááșážááᯠáááŻážááŒáá·áșáá±ážáááșááŒá áșáááșá
áĄá±áŹááșáá« command ááŒáá·áș áĄááșááááșááŻááșááŹážáá±áŹ ááœáČá·á ááșážááŸáŻááŻá¶á á¶ááᯠáĄááŻá¶ážááŒáŻáá«-
$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configuredáĄáááșááœááș áĄá±áŹááșááŒááșáá±áŹ ááŻá¶á·ááŒááșááŸáŻáĄáá±áĄááœááș áááŻážááŹááŒá±áŹááșáž Grafana ááááșáá»áŹážááᯠá á áșáá±ážáá«-

áĄáá»áááșááŻááșááŒááșážááŸáá·áș áááșáá«áááșáá« áá±á«ááșážááá·áșááŒáźážáá±áŹááș áĄá±áŹááșááŒááșáá±áŹ ááŻá¶á·ááŒááșááŸáŻá
áŹáááșážáááŹážáá»áŹážááœááș áááŻážáááșááŸáŻáá»áŹáž
áá±áŹááșáĄáááŻááșážááᯠáááșáááœáŹážáááș (áá«ááŸáááŻááș áá±áŹááșážáá«ážááČá· áá±áŹááșáĄáááŻááșážáĄááœááșá ááŹááŒá±áŹáá·áșááČáááŻáá±áŹá· ááźááČááŸáŹ áááșááœá±á·á
ááșážáááșááŸáŻááœá± ááŸááá±áŹá·ááŸáŹ áááŻááșáá°áž - ááá·áșááŸááșážááŒá± ááŹááŹááŒááșáááșá), áá»ááș sa-logic-buggy áĄá±áŹááșáá« command áá»áŹážááᯠrun ááŒááșážááŒáá·áș VirtualService ááŸáá·áș
$ kubectl delete deployment sa-logic-buggy
deployment.extensions âsa-logic-buggyâ deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io âsa-logicâ deletedCircuit Breaker ááŸáá·áș Bulkhead ááŻá¶á á¶áá»áŹáž
áá»áœááșáŻááșáááŻá·áááș ááá·áșáĄáŹáž áááááááŻááșááᯠááŒááșáááșááŹáááșáá°ááŹá á±áááș ááœáá·áșááŒáŻáá±ážáá±áŹ áááŻááșááááŻááŹážáá áșááááŻááŹááœááș áĄáá±ážááŒáźážáá±áŹááŻá¶á á¶ááŸá áșááŻáĄááŒá±áŹááșáž ááŒá±áŹáá±áá«áááșá (áááááááŻááșááᯠááŻáááŒááșáž) áááșáá±áŹááșááŸáŻáá»áŹážá
áááŻááșáááșááá±á· ("ááŹážáá áșááŒááșááááááŹ") áá»ááșážááŹáá±ážááá±áŹááșážáᯠáá°ááá±áŹ áááșáá±áŹááșááŸáŻáá áșááŻá á„áááŹáá áșááŻáá¶ áá±áŹááșááŸáááŹáá±áŹ áá±áŹááșážáááŻááŸáŻáá»áŹážááᯠáááșááá·áșáááșááŸáá·áș ááŻá¶ážá áœáČáá°áá»áŹážá áá±áŹááșážáááŻááŸáŻáá»áŹážááᯠáááŻáááșáá±áŹááșááŸáŻá áá±áŹááșážááœááșáá±áŹáĄááŒá±áĄáá±áá»áŹážáááŻá· ááŒááșááœáŸááșážáá±áá»áááșááœááș (áĄá±áŹááșááŒááșáá±áŹ ááŻá¶á·ááŒááșááŸáŻ ááŹáááŻááșááŸáŻááșážááᯠáááŻážá á±áááș)á (ááŸááșáá»ááș- á„áááŹáĄáŹážááŒáá·áș ááŻá¶á á¶á áĄáá±ážá áááșáá±áŹáșááŒáá»ááșááᯠááŸáŹááœá±á·áááŻááșáááșá á„áááŹá .)
á ("áĄáááŻááșážáááŻááșáž") áááșáá±áŹááșááŸáŻ áá»ááŻá·ááœááșážáá»ááșáá»áŹážááᯠá áá áșáá áșááŻááŻá¶ážááᯠáááááŻááșá á±ááŒááșážá០ááœáČááŻááșáááșá á„áááŹáĄáŹážááŒáá·áșá Service B áá»ááșááœáŹážáᏠáĄááŒáŹážáááșáá±áŹááșááŸáŻ (Service B á client) áááș Service B áááŻá· áá±áŹááșážáááŻáá»ááșáá áșááŻááŒáŻááŻááșááŒáźáž áááșážáááș áááșážá thread pool áááŻááŻááșááŻá¶ážá á±ááŒáźáž áĄááŒáŹážáá±áŹáá±áŹááșážáááŻááŸáŻáá»áŹážááᯠáá±áŹááșááœááșáá±ážáááŻááșááŒááșáž (áááșážáááŻá·áááș Service B ááŸáááŻááșáá»áŸááșáááș)á (ááŸááșáá»ááș- á„áááŹáĄáŹážááŒáá·áș ááŻá¶á á¶á áĄáá±ážá áááșáá±áŹáșááŒáá»ááșááᯠááŸáŹááœá±á·áááŻááșáááșá á„áááŹá .)
ááŸáŹááœá±áááœááșáá°áá±áŹááŒá±áŹáá·áș á€ááŻá¶á á¶áá»áŹážá áĄáá±áŹááșáĄáááșáá±áŹáșááŸáŻáĄáá±ážá áááșáĄáá»ááșáĄáááșáá»áŹážááᯠáá»áœááșáŻááșáá»ááșááŸááșááŹážáá«áááșá ááŒáźážáá±áŹá· áá±áŹááșážáá«ážááČá· áá±áŹááșáĄáááŻááșážááŸáŹ ááœá±ážááœá±ážááá·áș á á áșááŸááșááŒá±áŹááșážáĄáá±áŹááșáĄááŹážááČá· ááœáá·áșááŒáŻáá»ááșááᯠáá»áœááșáá±áŹáș ááááșááŒáá»ááșáá«áááșá
PS ááŹááŹááŒááșááŸ
áá»áœááșáŻááșáááŻá·áááá±áŹá·ááșááœááșáááșážáááșáá«
- "Istio ááŒáá·áș áĄáá±ážá áŹážáááșáá±áŹááșááŸáŻáá»áŹážáááŻá· ááŒááșááœáŹážáááș"- , ;
- «";
- «"á
source: www.habr.com
