Gelida Canary ee Kubernetes #3: Istio

Isticmaalka Istio+Kiali si aad u bilawdo oo aad u sawirto hawlgelinta Canary

Gelida Canary ee Kubernetes #3: Istio

Maqaallada taxanahan

  1. Gelida Canary ee Kubernetes #1: Gitlab CI
  2. Gelida Canary ee Kubernetes #2: Argo Rollouts
  3. (Maqaalkan)
  4. Gelida Canary iyadoo la adeegsanayo Jenkins-X Istio Flagger

Gelida Canary

Waxaan rajeyneynaa inaad akhrido qaybtii kowaad, halkaas oo aan si kooban u sharaxnay waxa Canary la geeyo oo aanu tusnay sida loo hirgeliyo iyada oo la adeegsanayo ilaha caadiga ah ee Kubernetes.

Istio

Oo waxaan u qaadanaynaa in akhrinta maqaalkan aad hore u garan waxa uu yahay Istio. Haddii kale, markaa waad ka akhrisan kartaa halkan.

Codsiga imtixaannada

Gelida Canary ee Kubernetes #3: Istio

Mid kastaa wuxuu ka kooban yahay laba weel: codsigayaga iyo istio-proxy.

Waxaan isticmaali doonaa codsi fudud oo tijaabo ah oo leh frontend-nginx iyo dhabarka dambe ee python pods. Booska nginx wuxuu si fudud u weeci doonaa codsi kasta pod-dambe wuxuuna u shaqayn doonaa sidii wakiil. Faahfaahinta waxaa laga heli karaa yamladaha soo socda:

Adigoo isticmaalaya arjiga imtixaanka

Haddii aad rabto inaad raacdo tusaalahayga oo aad adigu isticmaasho codsigan tijaabada ah, arag akhrinta mashruuca.

Gelintii Hore

Markaan bilowno Gelintii ugu horeysay, waxaan aragnaa in sanduuqyada codsigayagu ay leeyihiin 2 weel oo keliya, taas oo ah, Istio sidecar ayaa hadda la hirgeliyay:

Gelida Canary ee Kubernetes #3: Istio

Oo waxaan sidoo kale ku aragnaa Istio Gateway Loadbalancer ee goobta magaca istio-system:

Gelida Canary ee Kubernetes #3: Istio

Jiilka taraafikada

Waxaan u isticmaali doonaa IP-ga soo socda si aan u abuurno taraafikada ay heli doonaan galalka hore ee loo sii gudbiyo gadaasha dambe:

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

Waxaan sidoo kale ku dari doonaa frontend.istio-test ku dir faylka martidayada.

Ka eeg Mesh iyada oo loo marayo Kiali

Waxaan rakibnay arjiga tijaabada iyo Istio oo ay la socdaan Baafinta, Grafana, Prometheus iyo Kiali (hoos ka eeg faahfaahinta). akhrinta mashruuca). Sidaa darteed waxaan u adeegsan karnaa Kiali:

istioctl dashboard kiali # admin:admin

Gelida Canary ee Kubernetes #3: Istio

Kiali wuxuu sawiraa taraafikada hadda dhex mara Mesh

Sida aan arki karno, 100% taraafikada waxay aadaa adeega hore, ka dibna waxay u socotaa geesaha hore ee leh sumadda v1, maadaama aan isticmaaleyno nginx proxy fudud oo u weeciya codsiyada adeega dhabarka, taas oo markaa u weecinaysa dhabarka dambe. oo leh sumad v1.

Kiali wuxuu si fiican ula shaqeeyaa Istio wuxuuna bixiyaa xal qaabaynta Mesh sanduuqan. Kaliya weyn.

Gelida Canary

Dhabarkayaga dambe wuxuu horey u lahaa laba k8s la geeyo, mid v1 ah iyo mid v2. Hadda waxaan kaliya u baahanahay inaan u sheegno Istio inuu u gudbiyo boqolkiba codsiyo gaar ah v2.

Tallaabada 1: 10%

Waxa kaliya ee aan u baahanahay inaan sameyno waa hagaajinta culeyska adeegga VirtualService ee gudaha 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

Gelida Canary ee Kubernetes #3: Istio

Waxaan aragnaa in 10% codsiyada dib loo jiheeyay v2.

Tallaabada 2: 50%

Hadda waa ku filan tahay inaad kordhiso 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

Gelida Canary ee Kubernetes #3: Istio

Tallaabada 3: 100%

Hadda geynta Canary waxaa loo qaddarin karaa inay dhammaatay oo dhammaan taraafikada waxaa loo weeciyey v2:

Gelida Canary ee Kubernetes #3: Istio

Ku tijaabi Canary gacanta

Aynu nidhaahno hadda waxaan u dirnay 2% dhammaan codsiyada v10 dhabarka dambe. Maxaa dhacaya haddii aan rabno inaan gacanta ku tijaabino v2 si aan u hubinno in wax walba ay u shaqeeyaan sidii aan fileyno?

Waxaan ku dari karnaa xeer gaar ah oo u dhigma oo ku saleysan madax 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

Hadda annagoo isticmaalna curlka waxaan ku qasbi karnaa codsi v2 annagoo dirayna madaxa:

Gelida Canary ee Kubernetes #3: Istio

Codsiyada madax la'aan waxaa weli wadi doona saamiga 1/10:

Gelida Canary ee Kubernetes #3: Istio

Canary laba nooc oo ku tiirsan

Hadda waxaan tixgelin doonaa ikhtiyaarka aan ku hayno nooca v2 ee hore iyo gadaalba. Labadaba, waxaanu cayimnay in 10% taraafikada ay tahay inay tagaan v2:

Gelida Canary ee Kubernetes #3: Istio

Waxaan aragnaa in v1 iyo v2 labadaba taraafikada hore marka loo eego 1/10 ilaa dhabarka v1 iyo v2.

Maxaa dhacaya haddii aan u baahanahay inaan u gudbino taraafikada hore-v2 kaliya ilaa dhabarka-v2 sababtoo ah kuma habboona v1? Si tan loo sameeyo, waxaanu dejin doonaa saamiga 1/10 ee hore, kaas oo xakameynaya waxa taraafikada u gala dhabarka-v2 iyadoo la adeegsanayo gorgortan 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

Natiijo ahaan, waxaan helnaa waxa aan u baahanahay:

Gelida Canary ee Kubernetes #3: Istio

Kala duwanaanshaha habka Canary-ga buug-gacmeedka

Π’ qaybta koowaad Waxaanu ku samaynay geynta Canary si gacanta ah, anagoo adeegsanayna laba g8s. Halkaa waxaan ku xakameynay saamiga codsiyada anagoo bedelnay tirada nuqulada. Habkani wuu shaqeeyaa, laakiin wuxuu leeyahay cillado culus.

Istio waxay suurtogal ka dhigaysaa in la go'aamiyo saamiga codsiyada iyadoon loo eegin tirada nuqullada. Tani waxay ka dhigan tahay, tusaale ahaan, inaan isticmaali karno HPAs (Horizontal Pod Autoscalers) oo uma baahnid in lagu habeeyo iyadoo loo eegayo xaaladda hadda la geeyo Canary.

Natiijada

Istio si fiican buu u shaqeeyaa oo la wada isticmaalo Kiali waxay ka dhigaysaa isku-dar aad u xoog badan. Ku xiga liiskayga xiisaha ayaa isku darka Spinnaker iyo Istio ee automation-ka iyo falanqaynta Canary.

Source: www.habr.com

Add a comment