Te Tukunga Canary i Kubernetes #3: Istio

Ma te whakamahi i a Istio+Kiali ki te whakarewa me te tiro i te whakatakotoranga Canary

Te Tukunga Canary i Kubernetes #3: Istio

Tuhinga o tenei raupapa

  1. Te Tukunga Canary i Kubernetes #1: Gitlab CI
  2. Te Tukunga Canary ki Kubernetes #2: Argo Rollouts
  3. (Tenei tuhinga)
  4. Te Whakatairanga Canary ma te whakamahi i a Jenkins-X Istio Flagger

Te Tukunga Canary

Ko te tumanako ka panui koe waahanga tuatahi, i whakamarama poto matou he aha nga whakatakotoranga Canary me te whakaatu me pehea te whakatinana ma te whakamahi i nga rauemi Kubernetes paerewa.

Istio

Na ka whakaaro matou ma te panui i tenei tuhinga kua mohio koe he aha a Istio. Mena kaore, ka taea e koe te panui mo taua mea konei.

Te tono mo nga whakamatautau

Te Tukunga Canary i Kubernetes #3: Istio

E rua nga ipu kei ia peera: to maatau tono me te istio-takawaenga.

Ka whakamahia e matou he tono whakamatautau ngawari me te frontend-nginx me te backend python pods. Ka tukuna noa e te nginx pod ia tono ki te tuara o muri ka mahi hei takawaenga. Ka kitea nga korero i roto i nga yamls e whai ake nei:

Ko koe ano te whakahaere i te tono whakamatautau

Mena kei te hiahia koe ki te whai i taku tauira ka whakamahi koe i tenei tono whakamatautau, tirohia panui kaupapa.

Tukunga Tuatahi

I te wa i whakarewahia e matou te Whakamahinga tuatahi, ka kite matou e 2 noa nga ipu o nga poti o ta matou tono, ara, kei te whakatinanahia a Istio sidecar:

Te Tukunga Canary i Kubernetes #3: Istio

A ka kite ano matou i a Istio Gateway Loadbalancer i te waahi ingoa istio-system:

Te Tukunga Canary i Kubernetes #3: Istio

Te whakatipu waka

Ka whakamahia e matou te IP e whai ake nei hei whakaputa waka ka riro mai i nga poti o mua ka tukuna atu ki nga poti o muri:

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

Ka tapiritia ano e matou frontend.istio-test ki to tatou kōnae ope.

Tirohia Mesh mā Kiali

I whakauruhia e matou te tono whakamatautau me te Istio me te Tracing, Grafana, Prometheus me Kiali (tirohia i raro mo nga taipitopito). panui kaupapa). Na reira ka taea e tatou te whakamahi i a Kiali ma:

istioctl dashboard kiali # admin:admin

Te Tukunga Canary i Kubernetes #3: Istio

Ka whakaatahia e Kiali nga waka o naianei ma te Mesh

Kei te kite tatou, 100% o nga waka ka haere ki te ratonga o mua, katahi ka haere ki nga pota o mua me te tapanga v1, na te mea kei te whakamahi matou i tetahi takawaenga nginx ngawari e huri ana i nga tono ki te ratonga tuara, ka huri ano ki nga pou o muri. me te tapanga v1.

He pai te mahi a Kiali ki a Istio me te whakarato i tetahi otinga whakaputa Mesh pouaka. He rawe noa.

Te Tukunga Canary

E rua nga whakatakotoranga k8 i to maatau tuara, kotahi mo te v1 me tetahi mo te v2. Inaianei me kii atu ki a Istio kia tukuna etahi paheketanga o nga tono ki v2.

Hipanga 1: 10%

Ko nga mea katoa e tika ana kia mahia ko te whakatika i te taumaha o te VirtualService i roto 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

Te Tukunga Canary i Kubernetes #3: Istio

Ka kite matou e 10% o nga tono ka tukuna ki te v2.

Hipanga 2: 50%

Inaianei kua nui noa ki te whakanui ake ki te 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

Te Tukunga Canary i Kubernetes #3: Istio

Hipanga 3: 100%

Inaianei ka taea te whakaaro kua oti te tuku Canary ka tukuna katoatia nga waka ki v2:

Te Tukunga Canary i Kubernetes #3: Istio

Te whakamatautau a te Canary

Me kii ka tukuna e matou te 2% o nga tono katoa ki te v10 o muri. He aha mena ka hiahia taatau ki te whakamatautau a-ringa i te v2 kia mohio kei te pai nga mea katoa e tumanakohia ana?

Ka taea e tatou te taapiri i tetahi ture taurite motuhake i runga i nga pane 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

Ma te whakamahi i te curl ka taea e taatau te tono v2 ma te tuku i te pane:

Te Tukunga Canary i Kubernetes #3: Istio

Ko nga tono kaore he pane ka peia tonu e te 1/10 ōwehenga:

Te Tukunga Canary i Kubernetes #3: Istio

Canary mo nga putanga whakawhirinaki e rua

Inaianei ka whakaarohia e maatau te waahanga kei a maatau te putanga v2 mo te taha o mua me te tuara. Mo nga mea e rua, i tohua e matou ko te 10% o nga waka me haere ki v2:

Te Tukunga Canary i Kubernetes #3: Istio

Ka kite matou i te taha o mua v1 me te v2 e rua nga waka whakamua i te ōwehenga o te 1/10 ki te tuara v1 me te v2.

Ka aha mena ka hiahia matou ki te tuku waka mai i mua-v2 anake ki muri-v2 na te mea kaore i te hototahi ki te v1? Ki te mahi i tenei, ka whakatauhia e matou he tauwehenga 1/10 mo te pito o mua, e whakahaere ana i nga huarahi ka tae ki te tuara-v2 ma te whakamahi i te whiriwhiringa. 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

Ko te mutunga, ka whiwhi tatou i nga mea e hiahiatia ana:

Te Tukunga Canary i Kubernetes #3: Istio

Nga rereke mai i te huarahi Canary a-ringa

В te waahanga tuatahi I mahia e matou te tukunga a Canary a-ringa, me te whakamahi ano i nga tukunga k8 e rua. I reira ka whakahaerehia e matou te owehenga o nga tono ma te whakarereke i te maha o nga tauira. Ka whai hua tenei huarahi, engari he raru nui.

Ka taea e Istio te whakatau i te ōwehenga o nga tono ahakoa te maha o nga tauira. Ko te tikanga tenei, hei tauira, ka taea e tatou te whakamahi i nga HPA (Horizontal Pod Autoscalers) me te kore e tika kia whirihorahia kia rite ki te ahua o te tuku Canary inaianei.

Ko te hua

He pai te mahi a Istio me te whakamahi tahi me Kiali mo te whakakotahitanga tino kaha. Panuku i runga i taku rarangi kaingākau ko te whakakotahi i a Spinnaker me Istio mo te aunoatanga me te tātaritanga Canary.

Source: will.com

Tāpiri i te kōrero