Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Kusetshenziswa i-Istio+Kiali ukwethula nokubona ngeso lengqondo ukuthunyelwa kwe-Canary

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Izihloko kulolu chungechunge

  1. Ukuthunyelwa kwe-Canary e-Kubernetes #1: Gitlab CI
  2. Ukuthunyelwa kwe-Canary ku-Kubernetes #2: Ukukhishwa kwe-Argo
  3. (Lesi sihloko)
  4. Ukuthunyelwa kwe-Canary kusetshenziswa i-Jenkins-X Istio Flagger

Ukuthunyelwa kwe-Canary

Sithemba ukuthi ufunda ingxenye yokuqala, lapho sichaze kafushane ukuthi i-Canary deployments iyini futhi sabonisa indlela yokuyisebenzisa kusetshenziswa izinsiza ezijwayelekile ze-Kubernetes.

Istio

Futhi sicabanga ukuthi ngokufunda lesi sihloko usuvele wazi ukuthi i-Istio iyini. Uma kungenjalo, khona-ke ungafunda ngakho lapha.

Isicelo sokuhlolwa

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

I-pod ngayinye iqukethe iziqukathi ezimbili: uhlelo lwethu lokusebenza kanye ne-istio-proxy.

Sizosebenzisa uhlelo lokuhlola olulula olunama-frontend-nginx nama-backend python pods. I-nginx pod izovele iqondise kabusha isicelo ngasinye ku-backend pod futhi isebenze njengommeleli. Imininingwane ingatholakala kulawa ma-yaml alandelayo:

Ukuqalisa uhlelo lokusebenza lokuhlola ngokwakho

Uma ufuna ukulandela isibonelo sami futhi usebenzise lolu hlelo lokusebenza lokuhlola ngokwakho, bona iphrojekthi ngifunde.

Ukuthunyelwa Kwasekuqaleni

Lapho sethula Ukuthunyelwa kokuqala, sibona ukuthi ama-pods wesicelo sethu aneziqukathi ezi-2 kuphela, okungukuthi, i-Istio sidecar isanda kuqaliswa:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Futhi sibona i-Istio Gateway Loadbalancer endaweni yamagama istio-system:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Ukwakhiwa kwethrafikhi

Sizosebenzisa i-IP elandelayo ukuze sikhiqize ithrafikhi ezotholwa yi-frontend pods futhi idluliselwe kuma-backend pods:

while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done

Sizongeza futhi frontend.istio-test kufayela labasingathi bethu.

Buka i-Mesh nge-Kiali

Sifake uhlelo lokuhlola kanye ne-Istio kanye ne-Tracing, Grafana, Prometheus kanye ne-Kiali (bona ngezansi ukuze uthole imininingwane). iphrojekthi ngifunde). Ngakho-ke singasebenzisa i-Kiali nge:

istioctl dashboard kiali # admin:admin

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

I-Kiali ibona ngeso lengqondo ithrafikhi yamanje nge-Mesh

Njengoba sibona, i-100% yethrafikhi iya kusevisi ye-frontend, bese ifinyelela kuma-pods angaphambili anelebula v1, njengoba sisebenzisa ummeleli we-nginx olula oqondisa kabusha izicelo kusevisi ye-backend, ebuye iqondise kabusha kuma-backend pods. nge ilebula v1.

I-Kiali isebenza kahle nge-Istio futhi inikeza isixazululo esinebhokisi le-Mesh yokunikeza. Kuhle nje.

Ukuthunyelwa kwe-Canary

I-backend yethu isivele inokuthunyelwa kwe-k8s okubili, eyodwa ye-v1 nenye ye-v2. Manje sidinga ukutshela i-Istio ukuthi idlulisele iphesenti elithile lezicelo ku-v2.

Isinyathelo 1: 10%

Futhi konke okudingeka sikwenze ukulungisa isisindo se-VirtualService ku 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

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Siyabona ukuthi u-10% wezicelo uqondiswe kabusha ku-v2.

Isinyathelo 2: 50%

Futhi manje kwanele nje ukukhuphula kube ngu-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

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Isinyathelo 3: 100%

Manje ukuthunyelwa kwe-Canary kungabhekwa njengokuphelele futhi yonke ithrafikhi iqondiswe kabusha ku-v2:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Ukuhlola i-Canary mathupha

Ake sithi manje sithumela u-2% wazo zonke izicelo ku-v10 backend. Kuthiwani uma sifuna ukuhlola i-v2 mathupha ukuze siqiniseke ukuthi yonke into isebenza njengoba silindele?

Singangeza isimiso esikhethekile sokufanisa esisuselwe kumaheda e-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

Manje sisebenzisa i-curl singaphoqa isicelo se-v2 ngokuthumela unhlokweni:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Izicelo ezingenayo unhlokweni zisazoqhutshwa isilinganiso esingu-1/10:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

I-Canary yezinguqulo ezimbili ezincike

Manje sizocubungula inketho lapho sinenguqulo ye-v2 yazo zombili i-frontend ne-backend. Kukho kokubili, sicacise ukuthi u-10% wethrafikhi kufanele uye ku-v2:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Sibona ukuthi i-frontend v1 kanye ne-v2 kokubili ithrafikhi eya phambili ngesilinganiso esingu-1/10 kuya ku-backend v1 ne-v2.

Kuthiwani uma besidinga ukudlulisa ithrafikhi kusuka ku-frontend-v2 kuphela kuya ku-backend-v2 ngoba ayihambisani ne-v1? Ukwenza lokhu, sizobeka isilinganiso esingu-1/10 se-frontend, elawula ukuthi iyiphi ithrafikhi efika ku-backend-v2 sisebenzisa ukuxoxisana. 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

Ngenxa yalokho, sithola esikudingayo:

Ukuthunyelwa kwe-Canary ku-Kubernetes #3: I-Istio

Umehluko endleleni ye-Canary manual

В ingxenye yokuqala Senze ukuthunyelwa kwe-Canary mathupha, futhi sisebenzisa ama-k8s amabili. Lapho silawule isilinganiso sezicelo ngokushintsha inani lezifaniso. Le ndlela iyasebenza, kodwa inezinkinga ezinkulu.

I-Istio yenza kube nokwenzeka ukunquma isilinganiso sezicelo kungakhathaliseki inani lezifaniso. Lokhu kusho, isibonelo, ukuthi singasebenzisa ama-HPA (Horizontal Pod Autoscaler) futhi akudingeki ukuba simiswe ngokuvumelana nesimo samanje sokuthunyelwa kweCanary.

Umphumela

I-Istio isebenza kahle futhi ukuyisebenzisa kanye ne-Kiali yenza inhlanganisela enamandla kakhulu. Okulandelayo ohlwini lwami lwezithakazelo ukuhlanganisa i-Spinnaker ne-Istio ye-automation kanye ne-Canary analytics.

Source: www.habr.com

Engeza amazwana