เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เปƒเบŠเป‰ Istio+Kiali เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบžเบฒเบšเบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™เบŠเบธเบ”เบ™เบตเป‰

  1. เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #1: Gitlab CI
  2. เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #2: เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Argo
  3. (เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เบ™เบตเป‰)
  4. เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เป‚เบ”เบเปƒเบŠเป‰ Jenkins-X Istio Flagger

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary

เบžเบงเบเป€เบฎเบปเบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบญเปˆเบฒเบ™ เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบชเบฑเป‰เบ™เป†เบงเปˆเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Canary เปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบฅเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Kubernetes เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™.

เบญเบดเบŠเบดเป‚เบญ

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป‚เบ”เบเบเบฒเบ™เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบ—เปˆเบฒเบ™เบฎเบนเป‰เปเบฅเป‰เบงเบงเปˆเบฒ Istio เปเบกเปˆเบ™เบซเบเบฑเบ‡. เบ–เป‰เบฒเบšเปเปˆ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™ เบ—เบตเปˆเบ™เบตเป‰.

เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เปเบ•เปˆเบฅเบฐเบเบฑเบเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบญเบ‡เบšเบฑเบ™เบˆเบธ: เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐ istio-proxy.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบกเบต frontend-nginx เปเบฅเบฐ backend python pods. เบเบฑเบ nginx เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒ backend pod เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™. เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบžเบปเบšโ€‹เป€เบซเบฑเบ™โ€‹เบขเบนเปˆโ€‹เปƒเบ™ yamls เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

เปเบฅเปˆเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ™เบตเป‰เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡, เป€เบšเบดเปˆเบ‡ เป‚เบ„เบ‡เบเบฒเบ™ readme.

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™

เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบง Deployment เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒ pods เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆ 2 containers, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, Istio sidecar เบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”:

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป€เบซเบฑเบ™ Istio Gateway Loadbalancer เปƒเบ™ namespace istio-system:

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ IP เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบฑเบšเป‚เบ”เบเบžเบญเบ”เบซเบ™เป‰เบฒเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเปเบฅเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเบเบฑเบš 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 เบเบฑเบšเป„เบŸเบฅเปŒเป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เป€เบšเบดเปˆเบ‡ Mesh เบœเปˆเบฒเบ™ Kiali

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐ Istio เบžเป‰เบญเบกเบเบฑเบš Tracing, Grafana, Prometheus เปเบฅเบฐ Kiali (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”). เป‚เบ„เบ‡เบเบฒเบ™ readme). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Kiali เบœเปˆเบฒเบ™:

istioctl dashboard kiali # admin:admin

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

Kiali เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบชเบฐเบžเบฒเบšเบˆเบฐเบฅเบฒเบˆเบญเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบœเปˆเบฒเบ™ Mesh

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, 100% เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เป„เบ›เบซเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบ›เบซเบฒ pods frontend เบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบ v1, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ nginx proxy เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™ backend, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ backend pods. เบเบฑเบšเบ›เป‰เบฒเบ v1.

Kiali เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบเบฑเบš Istio เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™ Mesh เปเบšเบšเบเปˆเบญเบ‡. เบเบดเปˆเบ‡เปƒเบซเบเปˆ.

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary

backend เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบฒเบ™เบ™เบณเปƒเบŠเป‰ k8s เบชเบญเบ‡เบญเบฑเบ™เปเบฅเป‰เบง, เบญเบฑเบ™เปœเบถเปˆเบ‡เบชเบณเบฅเบฑเบš v1 เปเบฅเบฐเบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡เบชเบณเบฅเบฑเบš v2. เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบญเบ Istio เปƒเบซเป‰เบชเบปเปˆเบ‡เบ•เปเปˆเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบเบฑเบš v2.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 1: 10%

เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบ„เบทเบเบฒเบ™เบ›เบฑเบšเบ™เป‰เปเบฒเบซเบ™เบฑเบเบ‚เบญเบ‡ VirtualService เปƒเบ™ istio.yaml:

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

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒ 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

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 3: 100%

เบ•เบญเบ™เบ™เบตเป‰เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เบชเบฒเบกเบฒเบ”เบ–เบทเบงเปˆเบฒเบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง เปเบฅเบฐเบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบฑเบ‡เปเบปเบ”เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒ v2:

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Canary เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡ 2% เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ›เบซเบฒ v10 backend. เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš 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 เป‚เบ”เบเบเบฒเบ™เบชเบปเปˆเบ‡ header:

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบšเปเปˆเบกเบตเบชเปˆเบงเบ™เบซเบปเบงเบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบ–เบทเบเบ‚เบฑเบšเป€เบ„เบทเปˆเบญเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™ 1/10:

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

Canary เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบš

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบฐเบšเบฑเบš v2 เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡ frontend เปเบฅเบฐ backend. เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒ 10% เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ„เบงเบ™เป„เบ›เบซเบฒ v2:

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Canary เปƒเบ™ Kubernetes #3: Istio

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒ frontend v1 เปเบฅเบฐ v2 เบ—เบฑเบ‡เบชเบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ•เปเปˆเบซเบ™เป‰เบฒเปƒเบ™เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™ 1/10 เบเบฑเบš backend v1 เปเบฅเบฐ v2.

เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบˆเบฒเบ frontend-v2 เป„เบ›เบซเบฒ backend-v2 เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš v1? เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเปเบฒเบ™เบปเบ”เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™ 1/10 เบชเปเบฒเบฅเบฑเบš frontend, เป€เบŠเบดเปˆเบ‡เบ„เบงเบšเบ„เบธเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป„เบ›เบซเบฒ 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 เปƒเบ™ Kubernetes #3: Istio

เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบงเบดเบ—เบตเบเบฒเบ™ Canary เบ„เบนเปˆเบกเบท

ะ’ เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ” เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ Canary เบ”เป‰เบงเบโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡, เบเบฑเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบญเบ‡ k8s. เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ„เบงเบšเบ„เบธเบกเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ replicas. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡.

Istio เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ replicas. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ HPAs (Horizontal Pod Autoscalers) เปเบฅเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ configured เบ•เบฒเบกเบชเบฐเบ–เบฒเบ™เบฐเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Canary.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

Istio เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเปเบฅเบฐเปƒเบŠเป‰เบกเบฑเบ™เบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบš Kiali เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบ. เบ•เปเปˆเป„เบ›เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เบเบฒเบ™เบฅเบงเบก Spinnaker เบเบฑเบš Istio เบชเปเบฒเบฅเบฑเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ Canary.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster