Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Lilo Istio + Kiali lati ṣe ifilọlẹ ati foju inu imuṣiṣẹ Canary kan

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Ìwé ni yi jara

  1. Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI
  2. Canary imuṣiṣẹ ni Kubernetes # 2: Argo Rollouts
  3. (Arokọ yi)
  4. Canary imuṣiṣẹ lilo Jenkins-X Istio Flagger

Canary imuṣiṣẹ

A nireti pe o ka apakan akọkọ, Nibi ti a ti ṣe alaye ni ṣoki kini awọn imuṣiṣẹ Canary jẹ ati fihan bi a ṣe le ṣe imuse wọn nipa lilo awọn orisun Kubernetes boṣewa.

Istio

Ati pe a ro pe nipa kika nkan yii o ti mọ kini Istio jẹ. Ti kii ba ṣe bẹ, lẹhinna o le ka nipa rẹ nibi.

Ohun elo fun igbeyewo

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Podu kọọkan ni awọn apoti meji: ohun elo wa ati istio-proxy.

A yoo lo ohun elo idanwo ti o rọrun pẹlu frontend-nginx ati awọn pods ẹhin ẹhin Python. Podu nginx yoo rọrun darí ibeere kọọkan si adarọ-ese ẹhin ati ṣiṣẹ bi aṣoju. Awọn alaye le wa ninu awọn yamls wọnyi:

Ṣiṣe ohun elo idanwo funrararẹ

Ti o ba fẹ tẹle apẹẹrẹ mi ati lo ohun elo idanwo yii funrararẹ, wo readme ise agbese.

Ibẹrẹ Ibẹrẹ

Nigbati a ba ṣe ifilọlẹ Ifilọlẹ akọkọ, a rii pe awọn apoti ohun elo wa ni awọn apoti 2 nikan, iyẹn ni, Istio sidecar ti n ṣe imuse:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Ati pe a tun rii Istio Gateway Loadbalancer ni aaye orukọ istio-system:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Traffic iran

A yoo lo IP atẹle lati ṣe agbejade ijabọ ti yoo gba nipasẹ awọn adarọ-ese iwaju ati dari si awọn adarọ-ese ẹhin:

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

A yoo tun fi kun frontend.istio-test si faili ogun wa.

Wo Mesh nipasẹ Kiali

A fi sori ẹrọ ohun elo idanwo ati Istio pẹlu Tracing, Grafana, Prometheus ati Kiali (wo isalẹ fun awọn alaye). readme ise agbese). Nitorina a le lo Kiali nipasẹ:

istioctl dashboard kiali # admin:admin

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Kiali visualizes lọwọlọwọ ijabọ nipasẹ Mesh

Gẹgẹbi a ti le rii, 100% ti ijabọ naa lọ si iṣẹ iwaju, lẹhinna si awọn adarọ ese iwaju pẹlu aami v1, niwọn bi a ti nlo aṣoju nginx kan ti o rọrun ti o ṣe atunṣe awọn ibeere si iṣẹ ẹhin, eyiti o tun ṣe atunṣe wọn si awọn adarọ-ese ẹhin. pẹlu aami v1.

Kiali ṣiṣẹ nla pẹlu Istio ati pese ojutu Rendering Mesh apoti kan. O kan nla.

Canary imuṣiṣẹ

Atilẹyin wa tẹlẹ ti ni awọn ifilọlẹ k8s meji, ọkan fun v1 ati ọkan fun v2. Bayi a kan nilo lati sọ fun Istio lati dari ipin ogorun kan ti awọn ibeere si v2.

Igbesẹ 1: 10%

Ati pe gbogbo ohun ti a nilo lati ṣe ni ṣatunṣe iwuwo ti VirtualService ni isoti.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

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

A rii pe 10% awọn ibeere ni a darí si v2.

Igbesẹ 2: 50%

Ati ni bayi o ti to lati mu si 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

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Igbesẹ 3: 100%

Bayi imuṣiṣẹ Canary ni a le gba pe o pe ati pe gbogbo awọn ijabọ ti wa ni darí si v2:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Idanwo Canary pẹlu ọwọ

Jẹ ki a sọ pe a firanṣẹ 2% ti gbogbo awọn ibeere si ẹhin v10. Kini ti a ba fẹ lati ṣe idanwo v2 pẹlu ọwọ lati rii daju pe ohun gbogbo ṣiṣẹ bi a ti nireti?

A le ṣafikun ofin ibamu pataki kan ti o da lori awọn akọle 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

Bayi ni lilo curl a le fi ipa mu ibeere v2 kan nipa fifiranṣẹ akọsori:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Awọn ibeere laisi akọsori kan yoo tun jẹ idari nipasẹ ipin 1/10:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Canary fun awọn ẹya ti o gbẹkẹle meji

Bayi a yoo ronu aṣayan nibiti a ti ni ẹya v2 fun awọn iwaju iwaju ati ẹhin. Fun awọn mejeeji, a ṣalaye pe 10% ti ijabọ yẹ ki o lọ si v2:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

A rii pe frontend v1 ati v2 mejeeji ijabọ siwaju ni ipin ti 1/10 si ẹhin v1 ati v2.

Kini ti a ba nilo lati firanṣẹ siwaju ijabọ lati iwaju-v2 nikan si backend-v2 nitori ko ni ibamu pẹlu v1? Lati ṣe eyi, a yoo ṣeto ipin 1/10 fun iwaju iwaju, eyiti o ṣakoso ohun ti ijabọ n wọle si ẹhin-v2 nipa lilo idunadura. 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

Bi abajade, a gba ohun ti a nilo:

Canary imuṣiṣẹ ni Kubernetes # 3: Istio

Awọn iyatọ lati ọna Canary Afowoyi

В apakan akọkọ A ṣe imuṣiṣẹ Canary pẹlu ọwọ, tun lo awọn imuṣiṣẹ k8s meji. Nibẹ ni a ṣakoso ipin ti awọn ibeere nipa yiyipada nọmba awọn ẹda. Ọna yii n ṣiṣẹ, ṣugbọn o ni awọn abawọn to ṣe pataki.

Istio jẹ ki o ṣee ṣe lati pinnu ipin ti awọn ibeere laibikita nọmba awọn ẹda. Eyi tumọ si, fun apẹẹrẹ, pe a le lo awọn HPA (Horizontal Pod Autoscalers) ati pe ko nilo lati tunto ni ibamu si ipo lọwọlọwọ ti imuṣiṣẹ Canary.

Abajade

Istio ṣiṣẹ nla ati lilo rẹ papọ pẹlu Kiali ṣe fun apapo ti o lagbara pupọ. Nigbamii lori atokọ awọn iwulo mi ni apapọ Spinnaker pẹlu Istio fun adaṣe ati awọn itupalẹ Canary.

orisun: www.habr.com

Fi ọrọìwòye kun