Cleachdadh Canary ann an Kubernetes #3: Istio

A’ cleachdadh Istio+Kiali gus cleachdadh Canary a chuir air bhog agus fhaicinn

Cleachdadh Canary ann an Kubernetes #3: Istio

Artaigilean san t-sreath seo

  1. Cleachdadh Canary ann an Kubernetes #1: Gitlab CI
  2. Cleachdadh Canary ann an Kubernetes #2: Argo Rollouts
  3. (An artaigil seo)
  4. Cleachdadh Canary a 'cleachdadh Jenkins-X Istio Flagger

Cleachdadh Canary

Tha sinn an dòchas gun leugh thu a ’chiad phàirt, far an do mhìnich sinn gu h-aithghearr dè a th’ ann an cleachdadh Canary agus sheall sinn mar a bu chòir an cur an gnìomh a’ cleachdadh goireasan àbhaisteach Kubernetes.

Istio

Agus tha sinn a’ gabhail ris le bhith a’ leughadh an artaigil seo gu bheil fios agad mu thràth dè a th’ ann an Istio. Mura h-eil, faodaidh tu leughadh mu dheidhinn an seo.

Iarrtas airson deuchainnean

Cleachdadh Canary ann an Kubernetes #3: Istio

Tha dà shoitheach anns gach pod: an tagradh againn agus istio-proxy.

Cleachdaidh sinn tagradh deuchainn sìmplidh le pods python frontend-nginx agus backend. Bidh am pod nginx dìreach ag ath-stiùireadh gach iarrtas chun pod backend agus ag obair mar neach-ionaid. Gheibhear mion-fhiosrachadh anns na yamls a leanas:

A’ ruith an aplacaid deuchainn thu fhèin

Ma tha thu airson mo eisimpleir a leantainn agus an tagradh deuchainn seo a chleachdadh thu fhèin, faic leughadh pròiseact.

Cleachdadh Tòiseachaidh

Nuair a chuireas sinn a’ chiad cleachdadh air bhog, chì sinn nach eil ann am pods an tagraidh againn ach 2 shoitheach, is e sin, tha Istio sidecar dìreach ga chuir an gnìomh:

Cleachdadh Canary ann an Kubernetes #3: Istio

Agus chì sinn cuideachd Istio Gateway Loadbalancer anns an ainm-àite istio-system:

Cleachdadh Canary ann an Kubernetes #3: Istio

Gineadh trafaic

Cleachdaidh sinn an IP a leanas gus trafaic a ghineadh a gheibh na pods aghaidh agus a chuir air adhart gu na pods backend:

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

Cuiridh sinn cuideachd frontend.istio-test don fhaidhle aoigheachd againn.

Thoir sùil air mogal tro Kiali

Chuir sinn a-steach an tagradh deuchainn agus Istio còmhla ri Tracing, Grafana, Prometheus agus Kiali (faic gu h-ìosal airson mion-fhiosrachadh). leughadh pròiseact). Mar sin is urrainn dhuinn Kiali a chleachdadh tro:

istioctl dashboard kiali # admin:admin

Cleachdadh Canary ann an Kubernetes #3: Istio

Bidh Kiali a’ faicinn trafaic gnàthach tro Mesh

Mar a chì sinn, bidh 100% den trafaic a’ dol chun t-seirbheis aghaidh, an uairsin gu na pods aghaidh le leubail v1, leis gu bheil sinn a’ cleachdadh proxy nginx sìmplidh a bhios ag ath-stiùireadh iarrtasan chun t-seirbheis backend, a bhios e fhèin gan ath-stiùireadh gu na pods backend. le leubail v1.

Bidh Kiali ag obair gu math le Istio agus a’ toirt seachad fuasgladh tairgse bogsa mogal. Dìreach sgoinneil.

Cleachdadh Canary

Tha dà chleachdadh k8s air an backend againn mu thràth, aon airson v1 agus aon airson v2. A-nis chan fheum sinn ach innse do Istio ceudad sònraichte de dh’ iarrtasan a chuir air adhart gu v2.

Ceum 1: 10%

Agus chan eil againn ach a bhith ag atharrachadh cuideam an t-Seirbheis Mas-fhìor a-steach 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

Cleachdadh Canary ann an Kubernetes #3: Istio

Tha sinn a’ faicinn gu bheil 10% de dh’iarrtasan gan ath-stiùireadh gu v2.

Ceum 2: 50%

Agus a-nis tha e gu leòr dìreach airson àrdachadh gu 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

Cleachdadh Canary ann an Kubernetes #3: Istio

Ceum 3: 100%

A-nis faodar beachdachadh air cleachdadh Canary coileanta agus thèid an trafaic gu lèir ath-stiùireadh gu v2:

Cleachdadh Canary ann an Kubernetes #3: Istio

Dèan deuchainn air Canary le làimh

Canaidh sinn gu bheil sinn a-nis a’ cur 2% de na h-iarrtasan uile gu backend v10. Dè ma tha sinn airson v2 a dhearbhadh le làimh gus dèanamh cinnteach gu bheil a h-uile càil ag obair mar a bha dùil againn?

Is urrainn dhuinn riaghailt maidsidh sònraichte a chuir ris stèidhichte air cinn 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

A-nis a’ cleachdadh curl is urrainn dhuinn iarrtas v2 a sparradh le bhith a’ cur a’ chinn:

Cleachdadh Canary ann an Kubernetes #3: Istio

Bidh iarrtasan gun cheann-cinn fhathast air an stiùireadh leis a’ cho-mheas 1/10:

Cleachdadh Canary ann an Kubernetes #3: Istio

Canary airson dà dhreach eisimeileach

A-nis beachdaichidh sinn air an roghainn far a bheil dreach v2 againn airson an dà chuid aghaidh agus backend. Airson gach cuid, shònraich sinn gum bu chòir 10% den trafaic a dhol gu v2:

Cleachdadh Canary ann an Kubernetes #3: Istio

Chì sinn gu bheil frontend v1 agus v2 an dà chuid trafaic air adhart aig co-mheas de 1/10 gu backend v1 agus v2.

Dè nam feumadh sinn trafaic a chuir air adhart bho frontend-v2 a-mhàin gu backend-v2 leis nach eil e co-chòrdail ri v1? Gus seo a dhèanamh, suidhichidh sinn co-mheas 1/10 airson an aghaidh, a bhios a’ cumail smachd air na bhios trafaic a’ faighinn chun backend-v2 a’ cleachdadh co-rèiteachadh 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

Mar thoradh air an sin, gheibh sinn na tha a dhìth oirnn:

Cleachdadh Canary ann an Kubernetes #3: Istio

Eadar-dhealachaidhean bhon dòigh-obrach làimhe Canary

В a ’chiad phàirt Rinn sinn cleachdadh Canary le làimh, cuideachd a’ cleachdadh dà chleachdadh k8s. An sin rinn sinn smachd air co-mheas nan iarrtasan le bhith ag atharrachadh an àireamh de mhac-samhail. Tha an dòigh-obrach seo ag obair, ach tha fìor eas-bhuannachdan ann.

Tha Istio ga dhèanamh comasach co-mheas nan iarrtasan a dhearbhadh ge bith dè an àireamh de mhac-samhail a th’ ann. Tha seo a’ ciallachadh, mar eisimpleir, gun urrainn dhuinn HPAn (Horizontal Pod Autoscalers) a chleachdadh agus nach fheum sinn a bhith air an rèiteachadh a rèir staid gnàthach cleachdadh Canary.

An toradh

Tha Istio ag obair gu math agus ga chleachdadh còmhla ri Kiali a’ dèanamh measgachadh fìor chumhachdach. An ath rud air an liosta ùidhean agam tha a bhith a’ cothlamadh Spinnaker le Istio airson fèin-ghluasad agus anailisean Canary.

Source: www.habr.com

Cuir beachd ann