Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Ho sebelisa Istio + Kiali ho qala le ho bona ka mahlo a kelello ho tsamaisoa ha Canary

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Lingoliloeng letotong lena

  1. Ho tsamaisoa ha Canary ho Kubernetes #1: Gitlab CI
  2. Ho tsamaisoa ha Canary ho Kubernetes #2: Ho phatlalatsoa ha Argo
  3. (Sengoloa sena)
  4. Canary Deployment e sebelisa Jenkins-X Istio Flagger

Ho tsamaisoa ha Canary

Re tšepa hore u tla bala karolo ea pele, moo re hlalositseng ka bokhutšoanyane hore na li-deployments tsa Canary ke life le ho bontša mokhoa oa ho li kenya ts'ebetsong ka lisebelisoa tse tloaelehileng tsa Kubernetes.

Istio

'Me re nka hore ka ho bala sengoloa sena u se u ntse u tseba hore na Istio ke eng. Haeba ha ho joalo, joale u ka bala ka eona mona.

Kopo ea liteko

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Pod ka 'ngoe e na le lijana tse peli: kopo ea rona le proxy ea istio.

Re tla sebelisa sesebelisoa se bonolo sa tlhahlobo se nang le li-pods tsa frontend-nginx le backend python. Nginx pod e tla fetisetsa kopo e 'ngoe le e' ngoe ho "backend pod" ebe e sebetsa joalo ka moemeli. Lintlha li ka fumanoa li-yamls tse latelang:

Ho etsa tlhahlobo ea kopo ka bouena

Haeba u batla ho latela mohlala oa ka le ho sebelisa sesebelisoa sena sa tlhahlobo ka bouena, bona porojeke balame.

Phepelo ea Pele

Ha re qala Deployment ea pele, re bona hore li-pods tsa kopo ea rona li na le lijana tse 2 feela, ke hore, Istio sidecar e sa tsoa kengoa ts'ebetsong:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Hape re bona Istio Gateway Loadbalancer sebakeng sa mabitso istio-system:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Ho hlahisa sephethephethe

Re tla sebelisa IP e latelang ho hlahisa sephethephethe se tla amoheloa ke li-pods tse ka pele ebe li fetisetsoa ho li-pods tse ka morao:

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

Re tla eketsa hape frontend.istio-test ho faele ea rona ea mabotho.

Sheba Mesh ka Kiali

Re kentse kopo ea tlhahlobo le Istio hammoho le Tracing, Grafana, Prometheus le Kiali (bona ka tlase bakeng sa lintlha). porojeke balame). Ka hona re ka sebelisa Kiali ka:

istioctl dashboard kiali # admin:admin

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Kiali e bona sephethephethe sa hajoale ka Mesh

Joalokaha re bona, 100% ea sephethephethe se ea litšebeletsong tse ka pele, ebe ho li-pods tse ka pele tse nang le label v1, kaha re sebelisa proxy e bonolo ea nginx e khutlisetsang likopo ho tšebeletso ea backend, e leng eona e li khutlisetsang ho li-pods tsa backend. e nang le label v1.

Kiali e sebetsa hantle le Istio mme e fana ka tharollo ea ho fana ka lebokose la Mesh. E ntle feela.

Ho tsamaisoa ha Canary

Backend ea rona e se e na le li-deployments tse peli tsa k8, e 'ngoe bakeng sa v1 le e' ngoe bakeng sa v2. Joale re hloka feela ho bolella Istio ho fetisetsa liperesente tse itseng tsa likopo ho v2.

Mohato oa 1: 10%

Mme sohle seo re hlokang ho se etsa ke ho lokisa boima ba VirtualService ho 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

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Rea bona hore 10% ea likopo li fetisetsoa ho v2.

Mohato oa 2: 50%

'Me joale ho lekane feela ho e eketsa ho 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

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Mohato oa 3: 100%

Joale phepelo ea Canary e ka nkuoa e felletse mme sephethephethe sohle se fetisetsoa ho v2:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Ho hlahloba Canary ka letsoho

Ha re re joale re romella 2% ea likopo tsohle ho v10 backend. Ho thoe'ng haeba re batla ho leka v2 ka letsoho ho etsa bonnete ba hore ntho e 'ngoe le e' ngoe e sebetsa kamoo re lebeletseng kateng?

Re ka eketsa molao o ikhethileng o ipapisitseng le lihlooho tsa 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

Joale ha re sebelisa curl re ka qobella kopo ea v2 ka ho romella hlooho:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Likopo tse se nang hlooho li ntse li tla tsamaisoa ke karo-karolelano ea 1/10:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Canary bakeng sa mefuta e 'meli e itšetlehileng ka eona

Joale re tla nahana ka khetho eo re nang le eona v2 bakeng sa li-frontend le backend. Bakeng sa bobeli, re boletse hore 10% ea sephethephethe se lokela ho ea ho v2:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Re bona hore frontend v1 le v2 ka bobeli sephethephethe sa pele ka karolelano ea 1/10 ho backend v1 le v2.

Ho thoe'ng haeba re ne re hloka ho fetisetsa sephethephethe ho tloha frontend-v2 feela ho backend-v2 hobane ha e lumellane le v1? Ho etsa sena, re tla beha karo-karolelano ea 1/10 bakeng sa frontend, e laolang hore na sephethephethe se fihla joang ho backend-v2 re sebelisa lipuisano. 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

Ka lebaka leo, re fumana seo re se hlokang:

Ho tsamaisoa ha Canary ho Kubernetes #3: Istio

Phapang ho tloha mokhoa oa Canary oa bukana

В karolo ea pele Re sebelitse Canary deployment ka letsoho, hape re sebelisa li-k8 tse peli. Moo re ile ra laola karo-karolelano ea likopo ka ho fetola palo ea likopi. Mokhoa ona oa sebetsa, empa o na le mefokolo e tebileng.

Istio e etsa hore ho khonehe ho tseba karo-karolelano ea likopo ho sa tsotelehe palo ea likopi. Sena se bolela, ka mohlala, hore re ka sebelisa HPAs (Horizontal Pod Autoscaler) 'me ha ho hlokahale hore re lokisoe ho ea ka boemo ba hona joale ba Canary deployment.

Phello

Istio e sebetsa hantle mme ho e sebelisa hammoho le Kiali ho etsa motsoako o matla haholo. E latelang lethathamong la ka la lithahasello ke ho kopanya Spinnaker le Istio bakeng sa automation le Canary analytics.

Source: www.habr.com

Eketsa ka tlhaloso