Canary Deployment muKubernetes #3: Istio

Uchishandisa Istio + Kiali kutanga uye kuona kuendeswa kweCanary

Canary Deployment muKubernetes #3: Istio

Zvinyorwa munhevedzano iyi

  1. Canary Deployment muKubernetes #1: Gitlab CI
  2. Canary Deployment muKubernetes #2: Argo Rollouts
  3. (Chinyorwa ichi)
  4. Canary Deployment uchishandisa Jenkins-X Istio Flagger

Canary Deployment

Tinovimba wakaverenga chikamu chekutanga, kwatakatsanangura muchidimbu kuti Canary deployments chii uye takaratidza nzira yekuishandisa uchishandisa yakajairwa Kubernetes zviwanikwa.

Istio

Uye isu tinofungidzira kuti nekuverenga chinyorwa ichi unotoziva kuti Istio chii. Kana zvisina kudaro, iwe unogona kuverenga nezvazvo pano.

Kunyorera bvunzo

Canary Deployment muKubernetes #3: Istio

Imwe neimwe pod ine midziyo miviri: yedu yekushandisa uye istio-proxy.

Isu tichashandisa yakapusa bvunzo application ine frontend-nginx uye backend python pods. Iyo nginx pod inongoendesa chikumbiro chega chega kubackend pod uye kushanda semumiriri. Ruzivo runowanikwa mune anotevera yamls:

Kumhanyisa bvunzo application iwe pachako

Kana iwe uchida kutevedzera muenzaniso wangu uye shandisa iyi bvunzo application iwe, ona project readme.

Kutanga Deployment

Patinotangisa Deployment yekutanga, tinoona kuti mapods echikumbiro chedu ane midziyo miviri chete, kureva kuti, Istio sidecar iri kungoitwa:

Canary Deployment muKubernetes #3: Istio

Uye isu zvakare tinoona Istio Gateway Loadbalancer munzvimbo yezita istio-system:

Canary Deployment muKubernetes #3: Istio

Traffic generation

Isu tichashandisa iyo inotevera IP kugadzira traffic inozogamuchirwa nemapodhi ekumberi uye kuendeswa kune yekumashure pods:

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

Tichawedzerawo frontend.istio-test kune yedu faira faira.

View Mesh via Kiali

Isu takaisa bvunzo app uye Istio pamwe neTracing, Grafana, Prometheus uye Kiali (ona pazasi kuti uwane ruzivo). project readme) Naizvozvo tinogona kushandisa Kiali kuburikidza:

istioctl dashboard kiali # admin:admin

Canary Deployment muKubernetes #3: Istio

Kiali anoona traffic iripo kuburikidza neMesh

Sezvatinoona, 100% yetraffic inoenda kumberi sevhisi, yozoenda kumberi mapodhi ane label v1, sezvo isu tiri kushandisa iri nyore nginx proxy iyo inodzosera zvikumbiro kune yekumashure sevhisi, iyo inozodzoreredza ivo kubackend pods. ine chinyorwa v1.

Kiali inoshanda zvikuru neIstio uye inopa mhinduro yebhokisi reMesh rendering. Zvakanaka chete.

Canary Deployment

Yedu yekumashure yatove neyaviri k8s deployments, imwe yev1 uye imwe yev2. Zvino isu tinongoda kuudza Istio kuti itumire imwe muzana yezvikumbiro kuv2.

Nhanho 1: 10%

Uye zvese zvatinoda kuita kugadzirisa huremu hweVirtualService mukati 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

Canary Deployment muKubernetes #3: Istio

Isu tinoona kuti 10% yezvikumbiro inotungamirwa kuv2.

Nhanho 2: 50%

Uye zvino zvakakwana kungowedzera kusvika 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 Deployment muKubernetes #3: Istio

Nhanho 3: 100%

Iye zvino Canary deployment inogona kutariswa yakakwana uye traffic yese inotungamirwa kuv2:

Canary Deployment muKubernetes #3: Istio

Kuedza Canary nemaoko

Ngatitii isu ikozvino tinotumira gumi muzana yezvese zvikumbiro kune v2 backend. Ko kana isu tichida kuyedza nemaoko v10 kuti tive nechokwadi chekuti zvese zvinoshanda sezvatinotarisira?

Tinogona kuwedzera mutemo wakakosha wekuenzanisa wakavakirwa paHTTP misoro:

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

Iye zvino tichishandisa curl tinogona kumanikidza chikumbiro chev2 nekutumira musoro:

Canary Deployment muKubernetes #3: Istio

Zvikumbiro zvisina musoro zvicharamba zvichifambiswa nechiyero che1/10:

Canary Deployment muKubernetes #3: Istio

Canary yemhando mbiri dzinotsamira

Iye zvino tichafunga nezvesarudzo yatine vhezheni v2 kune ese emberi uye backend. Kune ese ari maviri, isu takatsanangura kuti gumi muzana yetraffic inofanira kuenda kuv10:

Canary Deployment muKubernetes #3: Istio

Isu tinoona iyo yekumberi v1 uye v2 zvese zviri mberi traffic pachiyero che 1/10 kubackend v1 uye v2.

Ko kana isu taida kuendesa mberi traffic kubva kumberi-v2 chete kubackend-v2 nekuti haienderane nev1? Kuti tiite izvi, isu tichaisa chiyero che1/10 chemberi, iyo inodzora izvo traffic inosvika kubackend-v2 tichishandisa nhaurirano. 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

Somugumisiro, tinowana zvatinoda:

Canary Deployment muKubernetes #3: Istio

Misiyano kubva kubhuku reCanary maitiro

Π’ kutanga chikamu Isu takaita Canary deployment nemaoko, zvakare tichishandisa maviri k8s deployments. Ikoko takadzora reshiyo yezvikumbiro nekushandura nhamba yezvinyorwa. Iyi nzira inoshanda, asi ine zvipingamupinyi zvakakomba.

Istio inoita kuti zvikwanise kuona chiyero chezvikumbiro zvisinei nenhamba yezvinyorwa. Izvi zvinoreva, semuenzaniso, kuti isu tinogona kushandisa HPAs (Horizontal Pod Autoscalers) uye haidi kugadziridzwa zvinoenderana nemamiriro ezvino eCanary deployment.

Mugumisiro

Istio inoshanda zvikuru uye kuishandisa pamwe chete neKiali inoita musanganiswa une simba kwazvo. Inotevera pane yangu runyorwa rwezvido kubatanidza Spinnaker neIstio ye automation uye Canary analytics.

Source: www.habr.com

Voeg