Kutumiza kwa Canary ku Kubernetes #3: Istio

Kugwiritsa ntchito Istio + Kiali kuyambitsa ndikuwona kutumizidwa kwa Canary

Kutumiza kwa Canary ku Kubernetes #3: Istio

Nkhani zotsatizanazi

  1. Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI
  2. Kutumiza kwa Canary ku Kubernetes #2: Argo Rollouts
  3. (Nkhani iyi)
  4. Kutumiza kwa Canary pogwiritsa ntchito Jenkins-X Istio Flagger

Kutumiza kwa Canary

Tikukhulupirira kuti mukuwerenga gawo loyamba, pomwe tidafotokozera mwachidule zomwe Canary deployments ndikuwonetsa momwe angagwiritsire ntchito pogwiritsa ntchito zofunikira za Kubernetes.

Istio

Ndipo tikuganiza kuti powerenga nkhaniyi mukudziwa kale kuti Istio ndi chiyani. Ngati ayi, ndiye inu mukhoza kuwerenga za izo apa.

Kufunsira mayeso

Kutumiza kwa Canary ku Kubernetes #3: Istio

Podi iliyonse imakhala ndi zotengera ziwiri: ntchito yathu ndi istio-proxy.

Tidzagwiritsa ntchito kuyesa kosavuta ndi frontend-nginx ndi backend python pods. Pod ya nginx imangotumiza pempho lililonse ku pod yakumbuyo ndikugwira ntchito ngati proxy. Zambiri zitha kupezeka m'mayaml otsatirawa:

Kugwiritsa ntchito mayeso nokha

Ngati mukufuna kutsatira chitsanzo changa ndikugwiritsa ntchito mayesowa nokha, onani projekiti readme.

Kutumiza Koyamba

Tikayambitsa Deployment yoyamba, tikuwona kuti ma pods omwe timagwiritsa ntchito ali ndi zotengera ziwiri zokha, ndiye kuti, Istio sidecar ikungokhazikitsidwa:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Ndipo tikuwonanso Istio Gateway Loadbalancer m'malo a mayina istio-system:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Kupanga magalimoto

Tidzagwiritsa ntchito ma IP otsatirawa kupanga magalimoto omwe adzalandilidwe ndi ma pods akutsogolo ndikutumizidwa ku ma pods akumbuyo:

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

Tiwonjezeranso frontend.istio-test ku fayilo yathu yosungira.

Onani Mesh kudzera pa Kiali

Tidayika pulogalamu yoyeserera ndi Istio pamodzi ndi Tracing, Grafana, Prometheus ndi Kiali (onani pansipa kuti mumve zambiri). projekiti readme). Chifukwa chake titha kugwiritsa ntchito Kiali kudzera:

istioctl dashboard kiali # admin:admin

Kutumiza kwa Canary ku Kubernetes #3: Istio

Kiali akuwona kuchuluka kwa magalimoto omwe alipo kudzera pa Mesh

Monga tikuonera, 100% ya magalimoto amapita ku utumiki wakutsogolo, kenako kumapangidwe akutsogolo okhala ndi chizindikiro v1, popeza tikugwiritsa ntchito proxy yophweka ya nginx yomwe imatumizanso zopempha ku utumiki wakumbuyo, womwe umawatsogolera ku ma pods a backend. ndi chizindikiro v1.

Kiali imagwira ntchito bwino ndi Istio ndipo imapereka yankho la bokosi la Mesh. Zabwino basi.

Kutumiza kwa Canary

Kumbuyo kwathu kuli kale ndi ma k8s awiri, imodzi ya v1 ndi ina ya v2. Tsopano tikungoyenera kuuza Istio kuti itumize magawo ena a zopempha ku v2.

Gawo 1: 10%

Ndipo zomwe tiyenera kuchita ndikusintha kulemera kwa VirtualService mkati 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

Kutumiza kwa Canary ku Kubernetes #3: Istio

Tikuwona kuti 10% ya zopempha zimatumizidwa ku v2.

Gawo 2: 50%

Ndipo tsopano ndi zokwanira kungowonjezera 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

Kutumiza kwa Canary ku Kubernetes #3: Istio

Gawo 3: 100%

Tsopano kutumizidwa kwa Canary kumatha kuonedwa ngati kokwanira ndipo magalimoto onse amatumizidwa ku v2:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Kuyesa Canary pamanja

Tinene kuti tsopano titumiza 2% ya zopempha zonse ku v10 backend. Nanga bwanji ngati tikufuna kuyesa pamanja v2 kuti tiwonetsetse kuti zonse zikuyenda momwe timayembekezera?

Titha kuwonjezera lamulo lofananira lapadera kutengera mitu ya 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

Tsopano pogwiritsa ntchito curl titha kukakamiza pempho la v2 potumiza mutu:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Zopempha zopanda mutu zidzayendetsedwa ndi chiŵerengero cha 1/10:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Canary kwa mitundu iwiri yodalira

Tsopano tiwona njira yomwe tili ndi v2 yamitundu yonse yakutsogolo ndi yakumbuyo. Kwa onse awiri, tidatchula kuti 10% yamagalimoto ayenera kupita ku v2:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Tikuwona kuti kutsogolo kwa v1 ndi v2 onse kutsogolo kwa magalimoto pa chiŵerengero cha 1/10 ku backend v1 ndi v2.

Nanga bwanji tikadayenera kupititsa patsogolo magalimoto kuchokera kutsogolo-v2 kupita ku backend-v2 chifukwa sizigwirizana ndi v1? Kuti tichite izi, tidzakhazikitsa chiŵerengero cha 1/10 cha kutsogolo, chomwe chimayang'anira zomwe magalimoto amafika kumbuyo-v2 pogwiritsa ntchito kukambirana. 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

Chifukwa chake, timapeza zomwe tikufuna:

Kutumiza kwa Canary ku Kubernetes #3: Istio

Zosiyana ndi buku la Canary njira

В gawo loyamba Tidagwiritsa ntchito Canary pamanja, kugwiritsanso ntchito ma k8s awiri. Kumeneko tinawongolera chiŵerengero cha zopempha posintha chiwerengero cha zofananira. Njirayi imagwira ntchito, koma ili ndi zovuta zake zazikulu.

Istio imapangitsa kuti zitheke kudziwa kuchuluka kwa zopempha mosasamala kuchuluka kwa zofananira. Izi zikutanthauza, mwachitsanzo, kuti titha kugwiritsa ntchito ma HPAs (Horizontal Pod Autoscalers) ndipo sitiyenera kukonzedwa molingana ndi momwe Canary ikutumizira.

Zotsatira

Istio imagwira ntchito bwino ndikuigwiritsa ntchito limodzi ndi Kiali imapanga kuphatikiza kwamphamvu kwambiri. Chotsatira pamndandanda wanga wazokonda ndikuphatikiza Spinnaker ndi Istio ya automation ndi Canary analytics.

Source: www.habr.com

Kuwonjezera ndemanga