Defnydd Dedwydd yn Kubernetes #3: Istio

Defnyddio Istio+Kiali i lansio a delweddu lleoliad Dedwydd

Defnydd Dedwydd yn Kubernetes #3: Istio

Erthyglau yn y gyfres hon

  1. Defnydd Dedwydd yn Kubernetes #1: Gitlab CI
  2. Defnydd Dedwydd yn Kubernetes #2: Cyflwyno Argo
  3. (Yr erthygl hon)
  4. Defnydd Dedwydd gan ddefnyddio Jenkins-X Istio Flagger

Dedwyddiad Dedwydd

Gobeithiwn y darllenwch rhan gyntaf, lle buom yn egluro'n fyr beth yw gosodiadau Canary a dangos sut i'w gweithredu gan ddefnyddio adnoddau safonol Kubernetes.

Istio

Ac rydym yn cymryd yn ganiataol wrth ddarllen yr erthygl hon eich bod eisoes yn gwybod beth yw Istio. Os na, yna gallwch ddarllen amdano yma.

Cais am brofion

Defnydd Dedwydd yn Kubernetes #3: Istio

Mae pob pod yn cynnwys dau gynhwysydd: ein cais ac istio-procsi.

Byddwn yn defnyddio cymhwysiad prawf syml gyda phodiau python frontend-nginx a backend. Bydd y pod nginx yn ailgyfeirio pob cais i'r pod backend ac yn gweithio fel dirprwy. Mae manylion i'w cael yn y iamls canlynol:

Rhedeg y cais prawf eich hun

Os ydych chi am ddilyn fy enghraifft a defnyddio'r cais prawf hwn eich hun, gweler darlleniad prosiect.

Defnydd Cychwynnol

Pan fyddwn yn lansio'r Defnydd cyntaf, gwelwn mai dim ond 2 gynhwysydd sydd gan godiau ein cais, hynny yw, mae car ochr Istio newydd gael ei weithredu:

Defnydd Dedwydd yn Kubernetes #3: Istio

Ac rydym hefyd yn gweld Istio Gateway Loadbalancer yn y gofod enwau istio-system:

Defnydd Dedwydd yn Kubernetes #3: Istio

Cynhyrchu traffig

Byddwn yn defnyddio'r IP canlynol i gynhyrchu traffig a fydd yn cael ei dderbyn gan y codennau blaen a'i anfon ymlaen i'r codennau pen Γ΄l:

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

Byddwn hefyd yn ychwanegu frontend.istio-test i'n ffeil gwesteiwr.

Gweld rhwyll trwy Kiali

Fe wnaethom osod y cymhwysiad prawf ac Istio ynghyd Γ’ Tracing, Grafana, Prometheus a Kiali (gweler isod am fanylion). darlleniad prosiect). Felly gallwn ddefnyddio Kiali trwy:

istioctl dashboard kiali # admin:admin

Defnydd Dedwydd yn Kubernetes #3: Istio

Mae Kiali yn delweddu traffig cyfredol trwy Mesh

Fel y gallwn weld, mae 100% o'r traffig yn mynd i'r gwasanaeth frontend, yna i'r codennau blaen gyda label v1, gan ein bod yn defnyddio dirprwy nginx syml sy'n ailgyfeirio ceisiadau i'r gwasanaeth backend, sydd yn ei dro yn eu hailgyfeirio i'r codennau cefn gyda label v1.

Mae Kiali yn gweithio'n wych gydag Istio ac yn darparu datrysiad rendro rhwyll mewn bocsys. Dim ond gwych.

Dedwyddiad Dedwydd

Mae gan ein hΓ΄l-wyneb eisoes ddau ddefnydd k8s, un ar gyfer v1 ac un ar gyfer v2. Nawr does ond angen i ni ddweud wrth Istio am anfon canran benodol o geisiadau i f2.

Cam 1: 10%

A'r cyfan sydd angen i ni ei wneud yw addasu pwysau'r Gwasanaeth Rhithwir i mewn 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

Defnydd Dedwydd yn Kubernetes #3: Istio

Gwelwn fod 10% o geisiadau yn cael eu hailgyfeirio i f2.

Cam 2: 50%

Ac yn awr mae'n ddigon i'w gynyddu i 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

Defnydd Dedwydd yn Kubernetes #3: Istio

Cam 3: 100%

Nawr gellir ystyried bod y lleoliad Canary wedi'i gwblhau ac mae'r holl draffig yn cael ei ailgyfeirio i v2:

Defnydd Dedwydd yn Kubernetes #3: Istio

Profi Canary Γ’ llaw

Gadewch i ni ddweud ein bod nawr yn anfon 2% o'r holl geisiadau i backend v10. Beth os ydym am brofi v2 Γ’ llaw i sicrhau bod popeth yn gweithio fel y disgwyliwn?

Gallwn ychwanegu rheol baru arbennig yn seiliedig ar benawdau 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

Nawr gan ddefnyddio curl gallwn orfodi cais v2 trwy anfon y pennawd:

Defnydd Dedwydd yn Kubernetes #3: Istio

Bydd ceisiadau heb bennyn yn dal i gael eu gyrru gan y gymhareb 1/10:

Defnydd Dedwydd yn Kubernetes #3: Istio

Dedwydd am ddau fersiwn dibynnol

Nawr byddwn yn ystyried yr opsiwn lle mae gennym fersiwn v2 ar gyfer blaen ac Γ΄l-wyneb. Ar gyfer y ddau, gwnaethom nodi y dylai 10% o'r traffig fynd i v2:

Defnydd Dedwydd yn Kubernetes #3: Istio

Gwelwn fod traffig blaen pen blaen v1 a v2 ar gymhareb o 1/10 i ben Γ΄l v1 a v2.

Beth pe bai angen i ni anfon traffig ymlaen o frontend-v2 yn unig i backend-v2 oherwydd nad yw'n gydnaws ag v1? I wneud hyn, byddwn yn gosod cymhareb 1/10 ar gyfer y blaen, sy'n rheoli pa draffig sy'n cyrraedd y backend-v2 gan ddefnyddio negodi 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

O ganlyniad, rydym yn cael yr hyn sydd ei angen arnom:

Defnydd Dedwydd yn Kubernetes #3: Istio

Gwahaniaethau oddi wrth y dull Canary Γ’ llaw

Π’ y rhan gyntaf Fe wnaethom berfformio defnydd Canary Γ’ llaw, gan ddefnyddio dau k8s hefyd. Yno buom yn rheoli cymhareb y ceisiadau drwy newid nifer y copΓ―au. Mae'r dull hwn yn gweithio, ond mae ganddo anfanteision difrifol.

Mae Istio yn ei gwneud hi'n bosibl pennu cymhareb y ceisiadau waeth beth fo nifer y copΓ―au. Mae hyn yn golygu, er enghraifft, y gallwn ddefnyddio HPAs (Horizontal Pod Autoscalers) ac nad oes angen eu ffurfweddu yn unol Γ’ chyflwr presennol y defnydd o Dedwydd.

Cyfanswm

Mae Istio yn gweithio'n wych ac mae ei ddefnyddio ynghyd Γ’ Kiali yn gyfuniad pwerus iawn. Nesaf ar fy rhestr o ddiddordebau mae cyfuno Spinnaker ag Istio ar gyfer awtomeiddio a dadansoddeg Dedwydd.

Ffynhonnell: hab.com

Ychwanegu sylw