ααΆαααααΎααααΆαα Istio+Kiali ααΎααααΈα αΆααααααΎα αα·αααΎαααΎαααΆαααΆαααααααΆα Canary
α’ααααααα αααα»ααααααΈαααα
ααΆαααΆαααααααΆα Canary αα αααα»α Kubernetes # 1: Gitlab CI ααΆαααΆαααααααΆα Canary αα αααα»α Kubernetes # 2: ααΆαα ααααααΆα Argo - (α’αααααβααα)
- ααΆαααΆαααααααΆα Canary αααααααΎ Jenkins-X Istio Flagger
ααΆαααΆαααααααΆα Canary
ααΎααααααΉαααΆα’αααα’αΆα
α’ααΈαααΈα’αΌ
α αΎαααΎαααααααααΆαααααΆαα’αΆαα’αααααααα α’αααααΉααα½α
α αΎαααΆ Istio ααΆα’αααΈα ααΎαα·αααΌα
ααααααα’αααα’αΆα
α’αΆαα’αααΈααΆα
ααΆαααααααΎαα»ααααααΆααααΆαααααΎααααα
ααααΈαα½ααααΆααα»αααΈαα αααααα·ααΈααααααΎα αα·α istio-ααααΌααααΈα
ααΎαααΉαααααΎαααααα·ααΈααΆαααααααααΆαααααα½αααΆαα½α frontend-nginx αα·α backend python pods α αα nginx ααΉααααααΌαααααααααΎααΈαα½αααα ααΆαααααααααΆαααααα α αΎαααααΎαααΆαααΆααααΌααααΈα ααααααΆαβαααα’α·αβα’αΆα βααβααΆαβαα βαααα»αβαααΆαβααΌα βααΆαβαααααα
ααααΎαααΆααααααα·ααΈααΆαααααααααααα½αα―αα
ααααα·αααΎα’αααα
ααααααΎααΆαααααΌαααααααα»α α αΎαααααΎαααααα·ααΈααΆααααααααααααααα½αα―α ααΌαααΎα
ααΆαααΆαααααααΆαααααΌα
αα ααααααααΎαα αΆααααααΎαααΆαααΆαααααααΆαααααΌα ααΎαααΎαααΆ pods αααααααα·ααΈααααααΎαααΆααα 2 containers αααααΊ Istio sidecar ααΎαααααααΌαααΆαα’αα»ααααα
α αΎαααΎαααααΎα Istio Gateway Loadbalancer αα
αααα»α namespace istio-system
:
ααΆααααααΎαα ααΆα ααα
ααΎαβααΉαβααααΎ IP ααΆααααααβααΎααααΈβαααααΎαβα ααΆα αααβαααβααΉαβααααΌαβααΆαβααα½αβααα frontend pods αα·αβαααααΌαβααααβαα pods ααΆααααααα
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
ααΎαααααΉααααααααααααα frontend.istio-test
αα
ααΆααα―αααΆα hosts ααααααΎαα
ααΎα Mesh ααΆαααα Kiali
ααΎαααΆαααα‘αΎααααααα·ααΈααΆααααα αα·α Istio αα½αααΆαα½αααΉα Tracing, Grafana, Prometheus αα·α Kiali (ααΌαααΎαααΆαααααααααααΆααααααααΆααααα’α·α)α
istioctl dashboard kiali # admin:admin
Kiali ααΎαααΎαα ααΆα ααααα αα α»ααααααααΆαααα Mesh
ααΌα αααααΎαα’αΆα ααΎαααΎα 100% ααα ααΆα ααα ααΆααααααΆαααααααΆααα»α αααααΆαααααα ααΆααααααααΆααα»ααααααΆαααααΆα v1 α αΆααααΆααααΈααΎααααα»αααααΎααααΌααααΈ nginx ααΆααααααααααααΌαααααααααΎαα ααΆααααααΆαααααααααααΆαααααα αααααΆααα½ααααα ααΆαααααααααΆααααααα ααΆαα½αααααΆα v1.
Kiali ααααΎαααΆαααΆαααα’ααΆαα½α Istio αα·ααααααααΌααααααααααΆααααα αΆα Mesh αααα’ααα ααααΆααααα’ααα αΆαααα
ααΆαααΆαααααααΆα Canary
αααααααΆααααααααααααΎαααΆαααΆαααΆαααααααΆα k8s ααΈααα½α α αΎα αα½ααααααΆαα v1 αα·ααα½αααααααααΆαα v2α α₯α‘αΌααααααΎαααααΆααααααααΌαααααΆαα Istio α±αααααααΌαααΆαααααΆααααΆααααααααΎαα v2.
ααα αΆαααΈ 1: 10%
α αΎαα’αααΈααΆααα’αααααααΎαααααΌαααααΎααΊαααααααΌαααααααααααααΆαααα VirtualService
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
ααΎαααΎαααΆ 10% ααααααΎααααΌαααΆααααααΌααααααα v2.
ααα αΆαααΈ 2: 50%
α αΎαα₯α‘αΌααααααΆαααααααααΆααα αΎααααα»αααΆααααααΎαααΆααα 50%α
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
...
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 50
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 50
ααα αΆαααΈ 3: 100%
α₯α‘αΌαααα ααΆαααΆαααααααΆα Canary α’αΆα ααααΌαααΆαα αΆαααα»αααΆαααααα α αΎαα ααΆα αααααΆααα’ααααααΌαααΆαααααΌααα·ααα v2α
ααΆααααα Canary ααααα
α§αααΆααΆα₯α‘αΌααααααΎαααααΎ 2% ααααααΎααΆααα’αααα ααΆαααααααααΆαααααα v10 α α α»αααααα·αααΎααΎαα ααααΆααααα v2 ααααα ααΎααααΈααααΆααααΆα’αααΈαααααΎαααΆαααΌα αααααΎαααααΉααα»α?
ααΎαα’αΆα ααααααα αααΆααααααΌαααααα·ααααααααα’ααααΎααααααΆ HTTPα
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- headers:
canary:
exact: "canary-tester"
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
α₯α‘αΌαααααααααααΎ curl ααΎαα’αΆα αααααααααΎ v2 αααααααΎααααααΆ:
ααααΎαααααααΆαααααααΆααΉααα ααααααΌαααΆααααα»αααααααΆααΆααα 1/10α
Canary αααααΆααααααααΉαααα’ααααΈα
α₯α‘αΌααααααΎαααΉααα·α αΆαααΆαααααΎααααααΎαααΆααααα v2 αααααΆααααΆαααααααααΆααα»ααα·ααααααααΆααααααα αααααΆααααΆααααΈα ααΎαααΆααααααΆααααΆ 10% ααα ααΆα ααααα½ααααα v2α
ααΎαααΎαααΆ frontend v1 αα·α v2 ααΆααααΈαα ααΆα ααα αα»ααααα»ααααΆααΆααααα 1/10 αα backend v1 αα·α v2 α
α
α»αααααα·αααΎααΎαααααΌαααΆααααααΌαα
ααΆα
αααααΈ frontend-v2 αα
backend-v2 αααααααΆαα·αααααΌαααααΆααΆαα½α v1? ααΎααααΈααααΎααΌα
αααα ααΎαααΉαααααααααΆααΆααα 1/10 αααααΆαααααααααΆααα»α ααααααααααααα’αααΈαααα
ααΆα
αααααα½αααΆααα
ααΆαα backend-v2 αααααααΎααΆαα
αα
αΆ sourceLabels
:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
...
- match:
- sourceLabels:
app: frontend
version: v2
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
ααΆααααααααΎαααα½αααΆαα’αααΈαααααΎαααααΌαααΆαα
ααΆααα»αααααΆααΈαα·ααΈααΆααααα Canary ααααα
Π αααααααααΌαα ααΎαα’αα»ααααααΆαααΆαααααααΆα Canary ααααα αααααααΎααΆαααΆαααααααΆα k8s ααΈααααααα αα ααΈααα ααΎαααΆαααααααααααααΆααΆαααααααααΎαααααΆαααααΆααααααΌαα ααα½αααααΆαα ααααα αα·ααΈααΆααααααααααΆαααααα·αααααΆα ααα»ααααααΆααα»ααα·ααααα·αααΆααααααααααα
Istio ααααΎα±ααααΆα’αΆα ααααααααΆααΆαααααααααΎααααα·ααα·αααΈα ααα½αααααΆαα ααααα ααΆα§ααΆα ααα αααααΆααααααΆααΎαα’αΆα ααααΎ HPAs (Horizontal Pod Autoscalers) α αΎααα·αα αΆαααΆα αααααααα ααΆααααααααααΆαααααΆαααΆααα αα α»ααααααααααΆαααΆαααααααΆα Canary αααααα
αααααα
Istio ααααΎαααΆαααΆαααα’ααΆαα α αΎαααΆαααααΎααΆαα½αααααΆααΆαα½α Kiali ααααΎα±ααααΆαααΆααα½ααααα αΌαααααΆααααΆαα₯αααα·ααα αααααΆαααα αααα»ααααααΈα αααΆααα’αΆαααααααααααααα»αααΊααΆααα½ααααα αΌα Spinnaker ααΆαα½α Istio αααααΆααααααααααααααα·αααα αα·α Canary analytics α
ααααα: www.habr.com