Aiwatar da Canary a Kubernetes # 3: Istio

Yin amfani da Istio+Kiali don ƙaddamar da hangen nesa na tura Canary

Aiwatar da Canary a Kubernetes # 3: Istio

Labarai a cikin wannan jerin

  1. Aiwatar da Canary a Kubernetes # 1: Gitlab CI
  2. Aiwatar da Canary a Kubernetes #2: Argo Rollouts
  3. (Wannan labarin)
  4. Aiwatar da Canary ta amfani da Jenkins-X Istio Flagger

Canary turawa

Muna fatan kun karanta kashi na farko, Inda muka yi bayani a taƙaice abin da Canary deployments ne kuma ya nuna yadda ake aiwatar da su ta amfani da daidaitattun albarkatun Kubernetes.

Istio

Kuma muna ɗauka cewa ta hanyar karanta wannan labarin kun riga kun san menene Istio. Idan ba haka ba, to kuna iya karantawa game da shi a nan.

Aikace-aikacen gwaji

Aiwatar da Canary a Kubernetes # 3: Istio

Kowane kwasfa ya ƙunshi kwantena guda biyu: aikace-aikacen mu da istio-proxy.

Za mu yi amfani da aikace-aikacen gwaji mai sauƙi tare da frontend-nginx da python pods na baya. Kwamfutar nginx kawai za ta sake tura kowane buƙatu zuwa ga kwaf ɗin baya kuma yayi aiki azaman wakili. Ana iya samun cikakkun bayanai a cikin wadannan yamls:

Gudanar da aikace-aikacen gwaji da kanka

Idan kuna son bin misalina kuma kuyi amfani da wannan aikace-aikacen gwaji da kanku, duba karatun aikin.

Tushen Farko

Lokacin da muka ƙaddamar da ƙaddamarwa na farko, mun ga cewa kwas ɗin aikace-aikacenmu suna da kwantena 2 kawai, wato, Istio sidecar ana aiwatar da shi:

Aiwatar da Canary a Kubernetes # 3: Istio

Kuma muna kuma ganin Istio Gateway Loadbalancer a cikin filin suna istio-system:

Aiwatar da Canary a Kubernetes # 3: Istio

Ƙirƙirar zirga-zirga

Za mu yi amfani da IP mai zuwa don samar da zirga-zirgar zirga-zirgar da za a karɓa ta gabas na gaba kuma a tura su zuwa faifan baya:

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

Za mu kuma ƙara frontend.istio-test zuwa fayil ɗin rundunanmu.

Duba Mesh ta hanyar Kiali

Mun shigar da aikace-aikacen gwaji da Istio tare da Tracing, Grafana, Prometheus da Kiali (duba ƙasa don cikakkun bayanai). karatun aikin). Don haka za mu iya amfani da Kiali ta hanyar:

istioctl dashboard kiali # admin:admin

Aiwatar da Canary a Kubernetes # 3: Istio

Kiali yana hango zirga-zirga na yanzu ta hanyar Mesh

Kamar yadda muke iya gani, 100% na zirga-zirga yana zuwa sabis na gaba, sannan zuwa gadaje na gaba tare da lakabin v1, tunda muna amfani da wakili na nginx mai sauƙi wanda ke tura buƙatun zuwa sabis na baya, wanda hakan yana tura su zuwa kwas ɗin baya. tare da alamar v1.

Kiali yana aiki da kyau tare da Istio kuma yana ba da mafita mai ma'ana ta Mesh. Mai girma kawai.

Canary turawa

Tushen mu na baya ya riga yana da jigilar k8s guda biyu, ɗaya don v1 kuma ɗaya don v2. Yanzu kawai muna buƙatar gaya wa Istio don tura wani kaso na buƙatun zuwa v2.

Mataki na 1: 10%

Kuma duk abin da muke buƙatar yi shine daidaita nauyin VirtualService a ciki 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

Aiwatar da Canary a Kubernetes # 3: Istio

Mun ga cewa 10% na buƙatun ana tura su zuwa v2.

Mataki na 2: 50%

Kuma yanzu ya isa kawai ƙara shi zuwa 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

Aiwatar da Canary a Kubernetes # 3: Istio

Mataki na 3: 100%

Yanzu ana iya ɗaukar jigilar Canary cikakke kuma duk zirga-zirga ana karkata zuwa v2:

Aiwatar da Canary a Kubernetes # 3: Istio

Gwajin Canary da hannu

Bari mu ce yanzu mun aika 2% na duk buƙatun zuwa v10 backend. Idan muna son gwada v2 da hannu don tabbatar da cewa komai yana aiki kamar yadda muke tsammani?

Za mu iya ƙara ƙa'idar da ta dace ta musamman dangane da taken 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

Yanzu ta amfani da curl za mu iya tilasta buƙatar v2 ta hanyar aika taken:

Aiwatar da Canary a Kubernetes # 3: Istio

Buƙatun ba tare da kan kai ba har yanzu za a gudanar da su ta hanyar rabon 1/10:

Aiwatar da Canary a Kubernetes # 3: Istio

Canary don nau'ikan dogaro biyu

Yanzu za mu yi la'akari da zaɓin inda muke da sigar v2 don duka gaba da baya. Ga duka biyun, mun ayyana cewa 10% na zirga-zirga ya kamata zuwa v2:

Aiwatar da Canary a Kubernetes # 3: Istio

Mun ga wancan gaban v1 da v2 duka zirga-zirgar gaba a cikin rabo na 1/10 zuwa v1 da v2.

Menene idan muna buƙatar tura zirga-zirga daga gaba-v2 kawai zuwa backend-v2 saboda bai dace da v1 ba? Don yin wannan, za mu saita rabo na 1/10 don gaban gaba, wanda ke sarrafa abin da zirga-zirgar zirga-zirgar ke kaiwa zuwa baya-v2 ta amfani da shawarwari. 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

A sakamakon haka, muna samun abin da muke bukata:

Aiwatar da Canary a Kubernetes # 3: Istio

Bambance-bambance daga tsarin Canary na hannu

В bangare na farko Mun yi jigilar Canary da hannu, kuma mun yi amfani da jigilar k8s guda biyu. A can mun sarrafa rabon buƙatun ta hanyar canza adadin kwafi. Wannan tsarin yana aiki, amma yana da babban lahani.

Istio yana ba da damar tantance ƙimar buƙatun ba tare da la'akari da adadin kwafi ba. Wannan yana nufin, alal misali, cewa zamu iya amfani da HPAs (Horizontal Pod Autoscalers) kuma bamu buƙatar daidaitawa gwargwadon halin yanzu na tura Canary.

Sakamakon

Istio yana aiki mai girma kuma amfani dashi tare da Kiali yana haifar da haɗin gwiwa mai ƙarfi. Na gaba akan jerin abubuwan bukatu na shine hada Spinnaker tare da Istio don sarrafa kansa da ƙididdigar Canary.

source: www.habr.com

Add a comment