แฒจแแแแจแแแ. แแแ แแแแ:
แแกแแแ แจแแแแฎแกแแแแแ, แ แแ แกแขแแขแแแจแ แแแแแงแแแแแฃแแแ แแแแคแแแฃแ แแชแแแแ (แแแแแคแแกแขแแแ Kubernetes-แแกแแแแก แแ Istio-แกแแแแก) แกแแชแแแแแแ
แแแซแ แแแแแก แแแ แแแ
Istio-แกแแแ แแ แแแ, แแฎแแแ แจแแกแแซแแแแแแแแแ แฉแแแแแ แแแแกแขแแ แจแ, แ แแแ แฃแแ แฃแแแแแงแแก:
- แแแแแแแฃแ แ แแแแฎแแแแแก แแแ แจแ แฃแขแแแแชแแ: แแแแแ แแก แแแจแแแแ, A/B แขแแกแขแแ แแแ;
- แฒแแขแแแ แแแแก แแแแแแแแกแแแ: แแแ แขแแแ แแ แแแแแแแแแแ แฃแแ, แฐแแจแแแแ แแแคแฃแซแแแแฃแแ;
- แแฆแแแแแ แแแชแแแแก แจแแแแแ: แแแแแแ, แแแแแแแ แแแแแ แชแแแแ, แแแแแ แแแแแแแ;
- แฎแแ แแแแแแแก แฉแแกแแ: แแแแแแแแแแแแ, แแแแฎแแแแแแแแแก แแแฃแฅแแแแ แแ แ.แจ.
แ แแแแ แช แกแขแแขแแ แแ แซแแแแแแ, แแก แจแแกแแซแแแแแแแแแ แแแฃแกแขแ แแ แแแฃแแ แแฅแแแแ แจแแ แฉแแฃแแ แแแแแแแชแแแก แแแแแแแแแก แแแแแงแแแแแแ แแ แแแแ แแแแแแ แแแแ แแฎแแแ แชแแแแแแ. แแแ แแแแ แแกแแแ แแแแชแแคแชแแ แแฅแแแแ DestinationRules
(แแแฃ แฌแแกแแแ แขแ แแคแแแแก/แแแแฎแแแแแก แแแแฆแแแแก แจแแกแแฎแแ - แแแแฎแ. แแแ แแแแแ.), แ แแแแแก แแแฎแแแ แแแแ แแแแฅแขแแฃแ แแแ A/B แขแแกแขแแ แแแแก.
A/B แขแแกแขแแ แแแ: DestinationRules แแ แแฅแขแแแแจแ
A/B แขแแกแขแแ แแแ แแแแแแงแแแแแ แแ แจแแแแฎแแแแแแจแ, แ แแแแกแแช แแ แกแแแแแก แแแแแแแชแแแก แแ แ แแแ แกแแ (แฉแแแฃแแแแ แแ, แแกแแแ แแแแฃแแแฃแ แแ แแแแกแฎแแแแแแฃแแแ) แแ แฉแแแ แแ แแแ แ 100% แแแ แฌแแฃแแแแฃแแ, แ แแแแแ แแแแฃแแฏแแแแกแแแก แแแแฎแแแ แแแแแก แแแแแชแแแแแแแก. แแแแขแแ, แฉแแแ แแ แแแ แแแ แกแแแก แแ แแแ แแฃแแแ แแแขแแ แแแ แแ แแแแ แแแแแ แแแขแ แแแแก.
A/B แขแแกแขแแ แแแแก แแแแแแกแขแ แแ แแแแกแแแแก แกแแญแแ แ แคแ แแแขแแแขแแก แแแแ แ แแแ แกแแแก แแแแแกแแงแแแแแแแ, แจแแแกแ แฃแแแ แจแแแแแแ แแ แซแแแแแ:
$ 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, แฃแแแ แแแแแกแแฎแฃแ แแก แจแแแแแแ แแแแฎแแแแแแก".
แฉแแแ แแแแแฆแฌแแแ แแแแแแแแแแ แฃแแ แฐแแจแแ แแแคแฃแซแแแแฃแแ แแแขแแแ แแแแก แแแแแแแแกแแแแ (แฐแแจแแก แแแแแแแแแแ แฃแแ แแแขแแแ แแแแก แแแแแแกแแ แแแ). แแ แจแแแแฎแแแแแจแ แแแแฎแแแแแแ แแ แแ แแ แแแแแ แแแแแแขแแกแแแ แแแแแแแแแ แแแแแ backend แแแกแขแแแชแแแแ, แ แแกแแแแกแแช แแแแแแงแแแแแ แฌแแแแกแฌแแ แแแแกแแแฆแแ แฃแแ แแแแกแแแ - แแแแแแแแแ, HTTP แกแแแแฃแ แ. แแแแฎแแ แชแแแแแแฃแแแ DestinationRules-แแก แแแแแงแแแแแแ.
แแแแแจแแฃแแแแแก แฌแแกแแแ
แจแแแแแ แแแ แขแฃแแแฃแ แ แกแแ แแแกแ แแแฃแแแแแแ แแแแฎแแแแ แกแแกแฃแ แแแ แกแแ แแแกแก, DestinationRules-แแก แแแแแงแแแแแแ แฉแแแ แจแแแแแซแแแ แแแแแกแแแฆแแ แแ แแแแแขแแแแแ, แ แแแแแแแช แแแแแงแแแแแฃแแ แแฅแแแแ แขแ แแคแแแแ, แ แแแแแแช แแแแแฃแแแแแแแ แแ แกแแ แแแกแแกแแแแก:
แขแ แแคแแแแก แแแ แแแ แแกแขแแแก แ แแกแฃแ แกแแแแ
แจแแแแจแแแ: Istio-แก แ แแกแฃแ แกแแแแก แแแแแแแ แฅแกแแแแก แขแ แแคแแแแ แแฅ แฌแแ แแแแแแแแแแ แแกแ, แ แแ แแแกแแแแแ แแงแแก. แฃแคแ แ แแฃแกแขแแ, แแแแแฌแงแแแขแแแแแแก, แแฃ แ แแแแ แแแกแขแแแชแแแแ แฃแแแ แแแแแแแแแก แแแแฎแแแแ, แแฆแแแก แแแกแแแแ CRD-แจแ แแแแคแแแฃแ แแ แแแฃแแ Ingress Gateway-แจแ.
แแแแแจแแฃแแแแแก แฌแแกแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแแคแแแฃแ แแ แแ แแแขแแแ แแแแก แแแแแแแแกแแแ, แ แแแ แแแแแแแงแแแแ แแแแแแแแแแ แฃแแ แฐแแจแแแ แแ แแแแ แฌแแฃแแแแ, แ แแ แแแแแ แกแแ แแแกแแก แแแกแขแแแชแแ แแแกแฃแฎแแแก แแแแแ แแแแฎแแแ แแแแแก. แจแแแแแแ แแแแคแแแฃแ แแชแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแฆแฌแแแ แแแแก (
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
แจแแแแจแแแ: แกแแแแฃแ แจแ แกแฎแแแแแกแฎแแ แแแแจแแแแแแแแแแก แแแกแแแแขแแแแแ แแ แจแแแแแแแแก แแแ แแแแแ แแ แแฃแแแ แจแ แจแแกแแแแฌแแแแแแ แจแแแแซแแแแ แแแแแแงแแแแ
แแแแแแแ, DestinationRules-แก แแแขแ แจแแกแแซแแแแแแแแแ แแฅแแก แแแขแแแ แแแแก แแแแแแแแกแแแแก แกแคแแ แแจแ - แแแขแแแแแแกแแแแก แจแแแแแฌแแแ
VirtualService-แแก แจแแแแแแ แจแแกแฌแแแแแแแ, แแแแแ แฌแแแจแแแแ แแแแแแแชแแแก โแแฌแแแแ แแแ แกแแโ แแ แแแซแ แแแแแก แแแแแ แแฃแแแแแก แจแแกแแแแแแกแ แฌแแกแ แจแแแแแแ แแ แซแแแแแแแแก แแแจแแแแแ:
$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions โsa-frontend-greenโ deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io โsa-frontendโ deleted
Mirroring: แแแ แขแฃแแแฃแ แ แกแแ แแแกแแแ แแ แแฅแขแแแแจแ
แฉแ แแแแ ("แแแคแแ แแ") แแ Mirroring ("แกแแ แแ") แแแแแแงแแแแแ แแ แจแแแแฎแแแแแแจแ, แ แแแแกแแช แแแกแฃแ แก แจแแแแแแฌแแแ แฌแแ แแแแแแจแ แชแแแแแแแ แกแแแแแแ แแแแฎแแแ แแแแแแแ แแแแแแแแก แแแ แแจแ: แแแแกแแแแแก แฉแแแ แแแแแแ แแแ (โแกแแ แแโ) แแแแฎแแแแแแก แแแแ แ แแแกแขแแแชแแแจแ, แกแแแแช แแแแฎแแ แชแแแแแ แกแแกแฃแ แแแแ แชแแแแแแแแแ แแ แแฃแงแฃแ แแแ แจแแแแแแแก. แแแ แขแแแแ แ แแ แแแฅแแแ, แแก แแก แจแแแแฎแแแแแ, แ แแชแ แแฅแแแแ แแแแแแ แแ แฉแแแก แงแแแแแแ แแ แแขแแแฃแ แกแแแแแฎแก แแ แแแแแแแก แแแแฎแแแแแก แญแฃแญแงแแก แแกแแแ แฃแแแ แแแแแ แ แแแญแ แแก แกแแฎแแ, แ แแ แ แแแแฃแ แแ แแแ แแแแ แจแแซแแแแก แแแก แแแแแฎแแแแแก.
แแ แกแชแแแแ แแก แแแฅแแแแแแแจแ แจแแกแแแแฌแแแแแแ, แแแแแ แจแแแฅแแแแ SA-Logic-แแก แแแแ แ แแแกแขแแแชแแ แจแแชแแแแแแแ (buggy
) แจแแแแแแ แแ แซแแแแแแก แแแจแแแแแ:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
แแฎแแ แแ แแแแแ แแแแฃแจแแแ แแ แซแแแแแ, แ แแแ แแแแ แฌแแฃแแแแ, แ แแ แงแแแแ แแแกแขแแแชแแ แแ แแแ app=sa-logic
แแแ แแกแแแ แแฅแแ แแขแแแแขแแแ แจแแกแแแแแแกแ แแแ แกแแแแแ:
$ kubectl get pods -l app=sa-logic --show-labels
NAME READY LABELS
sa-logic-568498cb4d-2sjwj 2/2 app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c 2/2 app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66 2/2 app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz 2/2 app=sa-logic,version=v2
แกแแแกแแฎแฃแ แแก sa-logic
แแแแแแ แแกแแฎแแแก แแแแแแก แแขแแแแขแแ app=sa-logic
แแกแ แ แแ, แงแแแแ แแแแฎแแแแ แแแแแแแฌแแแแแแ แงแแแแ แแแกแขแแแชแแแแ:
... แแแแ แแ แฉแแแ แแแแแแ, แ แแ แแแแฎแแแแแแ แแแแแแแแแแก v1 แแแกแขแแแชแแแแแ แแ แแกแแฎแฃแแ แแงแแก v2 แแแกแขแแแชแแแแแ:
แฉแแแ แแแแก แแแแแฆแฌแแแ 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, แ แแแ แแแแแแงแแแแก แฌแแกแแแ sa-logic-แแก แแแแฎแแแแแแแ แแกแ, แ แแ แแกแแแ:
- แแแ แจแ แฃแขแแ แแแฃแแแ แฅแแแฏแแฃแคแแ
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%-แก แฌแแ แฃแแแขแแแแแแแก, แแแแ แแ แแ แชแแ แแ แแก แฌแแ แฃแแแขแแแแแแ แแ แแแฅแแแแแแก แกแแแแแแ แแแแฎแแแ แแแแแแแ, แ แแแแแ แแแ แแแกแฃแฎแแแแ แแแจแแแแฃแแ แกแแ แแแกแ.
แกแ-แแแแแแแก แกแแ แแแกแแก แกแฎแแแแแกแฎแแ แแแ แกแแแก แฌแแ แแแขแแแฃแแ แแแกแฃแฎแแแ
แแฅ แฉแแแ แแแ แแแแแ แแแแฎแแ, แแฃ แ แแแแ แแแแแแงแแแแแ VirtualService แฉแแแแ แกแแ แแแกแแแแก แแแฉแแแแ: แ แแแแก sa-web-app
แแแแแ แแแแก แแฎแแแแแก sa-logic
, แแก แแแแแก sidecar Envoy-แก, แ แแแแแแช - VirtualService-แแก แกแแจแฃแแแแแแ - แแแแคแแแฃแ แแ แแแฃแแแ แแแแฎแแแแแก แแแแแกแแขแแแแ v1 แฅแแแฏแแฃแคแจแ แแ แแกแแฎแแแก แแแแฎแแแแแก แกแแ แแแกแแก v2 แฅแแแฏแแฃแคแจแ. sa-logic
.
แแแชแ, แจแแแซแแแแ แฃแแแ แคแแฅแ แแแ, แ แแ แแแ แขแฃแแแฃแ แ แกแแ แแแกแแแ แแแ แขแแแแ. แจแแแแแ แแแแงแแคแแแแแแจแ แฉแแแ แแแแแคแแ แแแแแแ แแแแก แแแแ, แ แแ แแกแแแ แแกแแแ แแแ แแแแช แจแแกแแแแจแแแแแ.
Canary Rollouts
Canary Deployment แแ แแก แแแแแแแชแแแก แแฎแแแ แแแ แกแแแก แแแจแแแแแก แแ แแชแแกแ แแแแฎแแแ แแแแแแ แแชแแ แ แ แแแแแแแแแ. แแแ แแแแแแงแแแแแ แแแแกแแแแก, แ แแ แแแ แฌแแฃแแแแ, แ แแ แแแแแจแแแแแจแ แแ แแแแแแแแ แแ แแ แแก แแ แแฎแแแแ แแแแก แจแแแแแ, แฃแแแ แแแ แฌแแฃแแแแฃแแ แฎแแ แ แแแก (แแแแแจแแแแแก) แฎแแ แแกแฎแจแ, แแแแแ แชแแแแ แแแ แกแฎแแ แแแแฎแแแ แแแแแแก.ะพแฃแคแ แ แแแแ แแฃแแแขแแ แแ.
แแแแแ แแก แแแแ แชแแแแแแก แแแแแแกแขแ แแ แแแแกแแแแก แฉแแแ แแแแแแ แซแแแแแ แแฃแจแแแแแก แฅแแแฏแแฃแคแแแ buggy
ั sa-logic
.
แแฃ แแแแแแ แแแแ แแ แแก แฌแแ แแแแแแแแแ แแ แแแฃแงแแแแแแแแ แแแแแแแแแแแ แแแแฎแแแ แแแแแแแก 20% แจแแชแแแแแแแก แแฅแแแ แแแ แกแแแแ (แแก แแฅแแแแ แฉแแแแ แแแแแ แแก แแแจแแแแ), แฎแแแ แแแแแ แฉแแแ 80% แแแ แแแแฃแ แกแแ แแแกแแ. แแแแกแแแแแก แแแแแแงแแแแ แจแแแแแแ แแแ แขแฃแแแฃแ แ แกแแ แแแกแ (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 80 # 1
- destination:
host: sa-logic
subset: v2
weight: 20 # 1
1 แแ แแก แฌแแแ (weight
), แ แแแแแแช แแแแกแแแฆแแ แแแก แแแแฎแแแแแแแก แแ แแชแแแขแก, แ แแแแแแช แแแแแ แแฃแแ แแฅแแแแ แแแแฆแแแแก แแ แแแแฆแแแแก แฅแแแฏแแฃแคแแ.
แแแแแ แแแแแแแฎแแแ VirtualService-แแก แฌแแแ แแแแคแแแฃแ แแชแแ sa-logic
แจแแแแแแ แแ แซแแแแแแ:
$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured
... แแ แฉแแแ แแแจแแแแ แแแแแแแฎแแแ, แ แแ แแแแแแ แแ แแแแฎแแแแ แฌแแ แฃแแแขแแแแแแแแแ แแแแแแงแแแแก:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}'
--silent -w "Time: %{time_total}s t Status: %{http_code}n"
-o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500
VirtualServices แกแแจแฃแแแแแแก แแซแแแแก แแแแแ แแก แแแแ แชแแแแแแก: แแ แจแแแแฎแแแแแจแ, แฉแแแ แจแแแแแชแแ แแ แแ แแแแแแแแแก แแแขแแแชแแฃแ แ แแแแแแแ แแแแฎแแแ แแแแแแ แแแแแก 20%-แแแ. แแจแแแแแแ แแ! แแฎแแ, แงแแแแ แจแแแแฎแแแแแจแ, แ แแแแกแแช แฉแแแ แแ แแแ แ แแแ แฌแแฃแแแแฃแแ แฉแแแแก แแแแจแ (แกแฎแแ แกแแขแงแแแแแ - แงแแแแแแแแก...), แจแแแแแซแแแ แแแแแแแงแแแแ mirroring แแ canary rollouts.
แแแแแแ แแ แฎแแแแฎแแแ แชแแแแ
แแแแ แแ แจแแชแแแแแแ แงแแแแแแแแก แแ แแแแแ แแแแ แแแแจแ. แกแแแจแ "
แแแแแแกแขแ แแ แแแแกแแแแก แฉแแแ แแแแแแ แซแแแแแ แแแแแ แแ แแแแแแแก แแแ แกแแแก แแแแแงแแแแแแก 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
แแแแแ แแแแแแกแ แแ แแแงแแ แแก แแแแฃแจแแแ
แฉแแแ แแกแแฃแแ แแแ แแแแ แแกแแ แแแกแแก แแ แฅแแขแแฅแขแฃแ แแก แแ แแแแจแแแแแแแแ แจแแแแแแแ, แ แแแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแฆแฌแแแ แแแแแแฆแแแแแแก (แแแแแแแแแฃแ แแแแ) แแแแกแแฎแฃแ แแแ.
Circuit Breaker ("แฉแแ แแแ แแแแแ แแแแแ") แแแแแแงแแแแแ แกแแ แแแกแแก แแกแแ แแแแแแแแแ แแแแฎแแแแแก แจแแกแแฌแงแแแขแแ, แ แแแแแแช แแแแแแแ แแ แแฏแแแกแแฆแแ แแ แแฆแแแแแแก แแแก, แฎแแแ แแแแแแขแแก แแแแฎแแแแแแ แแแแแแแกแแแแ แแแแฃแแแ แแ แกแแ แแแกแแก แฏแแแกแแฆ แแแแแแแแแ แแแแ (แ แแช แแ แแแก แฌแแ แแแขแแแฃแแ แแแกแฃแฎแแแแก แแ แแชแแแขแก). (แจแแแแจแแแ: แแแแฃแจแแก แฃแคแ แ แแแขแแแฃแ แ แแฆแฌแแ แ แจแแแแซแแแแ แแฎแแแแ, แแแแแแแแแ,
แแแงแแ แ ("แแแแแงแแคแ") แแแแแแ แแแก แกแแ แแแกแแก แฌแแ แฃแแแขแแแแแแแก แแแแ แกแแกแขแแแแแ แแแแแฅแแแแแแแกแแแ. แแแแแแแแแ, แกแแ แแแกแ B แแแขแแฎแแแแ แแ แกแฎแแ แกแแ แแแกแ (แกแแ แแแก B-แแก แแแแแแขแ) แแแแแ แแแแก แแฎแแแแแก แกแแ แแแกแก B, แ แแก แจแแแแแแแแช แแก แแแแแฌแฃแ แแแ แซแแคแแแแก แแฃแแ แแ แแแ แจแแซแแแแก แกแฎแแ แแแแฎแแแแแแแก แแแแกแแฎแฃแ แแแแก (แแแจแแแแช แแ, แแฃ แแกแแแ แแ แแ แแแ B แกแแ แแแกแแแแ). (แจแแแแจแแแ: แแแแฃแจแแก แฃแคแ แ แแแขแแแฃแ แ แแฆแฌแแ แ แจแแแแซแแแแ แแฎแแแแ, แแแแแแแแแ,
แแ แแแแแแขแแแแ แแ แจแแแแแแแแแก แแแแฎแแ แชแแแแแแแก แแแขแแแแแก, แ แแแแแ แแแแ แแแแแ แแแแแแแ
PS แแแแ แแแแแแแกแแแ
แแกแแแ แฌแแแแแแฎแแ แฉแแแแก แแแแแแ:
- "แฃแแ แฃแแแ แแแแ แแกแแ แแแกแแแก Istio-แกแแแ แแ แแแ":
แแแฌแแแ 1 (แซแแ แแแแแ แแแฎแแกแแแแแแแแแแก แจแแกแแแแแ) ,แแแฌแแแ 3 (แแแแแแขแแคแแแแชแแ แแ แแแขแแ แแแแชแแ) ; - ยซ
แแแแแฃแแขแ - แแกแฃแแฃแฅแ แกแแ แแแกแแก แแแแ Kubernetes-แแกแแแแก "; - ยซ
แ แ แแ แแก แกแแ แแแกแฃแแ แฅแกแแแ แแ แ แแขแแ แแญแแ แแแแ แแก [แแแแ แกแแ แแแกแแแแ แฆแ แฃแแแแแแแ แแแแแแแชแแแกแแแแก]? ".
แฌแงแแ แ: www.habr.com