Hoki ki nga ratonga miihini me Istio. Wāhanga 2

Hoki ki nga ratonga miihini me Istio. Wāhanga 2

Tuhipoka. whakamaori.: Ko te wahi tuatahi I whakatapua tenei raupapa ki te whakauru i nga kaha o Istio me te whakaatu i a raatau mahi. Inaianei ka korero tatou mo nga ahuatanga uaua ake o te whirihoranga me te whakamahi i tenei mata ratonga, otira, mo te ararere me te whakahaere waka whatunga.

Ka whakamahara ano matou ki a koe kei te whakamahi te tuhinga i nga whirihoranga (nga whakaaturanga mo Kubernetes me Istio) mai i te putunga. istio-mastery.

whakahaere waka

Ki a Istio, ka puta mai nga kaha hou ki te roopu ki te whakarato:

  • Ararere tono hihiko: nga whakaputanga canary, whakamatautau A/B;
  • Te whakataurite kawenga: ngawari me te rite tonu, i runga i nga tohu;
  • Te whakaoranga i muri i te hinga: taima, ngana ano, ara iahiko;
  • Te whakauru hapa: whakaroa, tuku tono, etc.

I te wa e haere tonu ana te tuhinga, ka whakaatuhia enei kaha ma te whakamahi i te tono kua tohua hei tauira, ka whakaurua nga ariā hou i te huarahi. Ko te kaupapa tuatahi penei DestinationRules (arā, nga ture mo te kaiwhiwhi o nga waka/tono - tata ki te whakawhiti), me te awhina o te whakahohe i te whakamatautau A/B.

Whakamātautau A/B: DestinationRules i roto i te mahi

Ka whakamahia te whakamatautau A/B i nga keehi e rua nga putanga o tetahi tono (te nuinga he rereke te ahua) kaore matou i te 100% tino mohio ko wai te mea ka pai ake te wheako kaiwhakamahi. Na reira, ka whakahaerehia e matou nga putanga e rua i te wa kotahi ka kohi ine.

Hei tuku i te putanga tuarua o te pito o mua, e hiahiatia ana hei whakaatu i te whakamatautau A/B, whakahaere i te whakahau e whai ake nei:

$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created

E rua nga waahi e rereke ana te whakaaturanga tukunga mo te putanga matomato:

  1. Ko te ahua kei runga i tetahi tohu rereke - istio-green,
  2. He tapanga nga Pods version: green.

I te mea he tapanga nga waahanga e rua app: sa-frontend,nga tono i tukuna e te ratonga mariko sa-external-services mo te mahi sa-frontend, ka tukuna ki ona waahi katoa ka tohatohahia te uta ki roto huritau-robin algorithm, ka puta te ahuatanga e whai ake nei:

Hoki ki nga ratonga miihini me Istio. Wāhanga 2
Ko nga konae i tonoa kaore i kitea

Ko enei konae kaore i kitea na te mea he rereke te ingoa i roto i nga momo putanga rereke o te tono. Kia mohio tatou ki tenei:

$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js

Ko te tikanga tenei index.html, e tono ana i tetahi putanga o nga konae pateko, ka taea te tuku atu e te kaitaurite kawenga ki nga pota he rereke te ahua, kei reira, mo nga take tino kitea, kaore he konae penei. No reira, kia pai ai te mahi o te tono, me whakarite he here: “ko te putanga ano o te tono i tukuna ki te index.html me tuku nga tono o muri mai".

Ka tae atu tatou ki reira me te tauritenga o nga kawenga a-hash (Hash Tauritenga Tauritenga). I tenei keehi Ko nga tono mai i te kaihoko kotahi ka tukuna ki te tauira o muri, e whakamahia ana he taonga kua tautuhia - hei tauira, he pane HTTP. I whakatinanahia ma te DestinationRules.

Ture Whakataunga

I muri Ratonga Mariko i tukuna he tono ki te ratonga e hiahiatia ana, ma te whakamahi i DestinationRules ka taea e matou te tautuhi i nga kaupapa here ka pa ki nga waka kua whakaritea mo nga tauira o tenei ratonga:

Hoki ki nga ratonga miihini me Istio. Wāhanga 2
Te whakahaere waka me nga rauemi a Istio

parau: Ko te paanga o nga rauemi a Istio i runga i nga hokohoko whatunga ka whakaatuhia ki konei i runga i te huarahi ngawari ki te mohio. Kia tika, ko te whakatau ko tehea wa ka tukuna te tono na te Kaihopu i roto i te Ingress Gateway i whirihorahia i te CRD.

Ma nga Ture Whakataunga, ka taea e tatou te whirihora i te taurite kawenga ki te whakamahi i nga haki riterite me te whakarite kia whakautua e taua tauira ratonga ki te kaiwhakamahi kotahi. Ko te whirihoranga e whai ake nei ka taea e koe te whakatutuki i tenei (destinationrule-sa-frontend.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-frontend
spec:
  host: sa-frontend
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: version   # 1

1 - ka hangaia te hash i runga i nga ihirangi o te pane HTTP version.

Hoatu te whirihoranga me te whakahau e whai ake nei:

$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created

Na, whakahaeretia te whakahau i raro nei ka whakarite kia whiwhi koe i nga konae tika ina tohua e koe te pane version:

$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main

parau: Hei taapiri i nga uara rereke ki te pane me te whakamatautau tika i nga hua ki te tirotiro, ka taea e koe te whakamahi tenei toronga ki Chrome (ranei me tenei mo Firefox - tata. whakawhiti.).

I te nuinga o te waa, he maha ake nga kaha o DestinationRules i roto i te waahi o te whakataurite kawenga - tirohia mo nga taipitopito kei roto tuhinga whaimana.

I mua i te ako atu i a VirtualService, me whakakorehia te "putanga matomato" o te tono me te ture ahunga waka ma te whakahaere i nga whakahau e whai ake nei:

$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions “sa-frontend-green” deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io “sa-frontend” deleted

Whakaata: Ratonga Mariko kei te Parakatihi

Kōruru (“whakaruruhau”) Whakaata ranei (“whakaata”) whakamahia i roto i nga keehi e hiahia ana matou ki te whakamatautau i te huringa o te whakaputanga me te kore e pa ki nga kaiwhakamahi mutunga: ki te mahi i tenei, ka tukuna e matou nga tono ("whakaata") tono ki te waa tuarua kua mahia nga huringa e hiahiatia ana, ka titiro ki nga hua. Me korero noa, koinei te wa e whiriwhiria ai e to hoa mahi te take tino nui me te tono kume i roto i te ahua o te puranga paru nui e kore e taea e te tangata te arotake.

Hei whakamatautau i tenei ahuatanga e mahi ana, me hanga he tauira tuarua o SA-Logic me nga pepeke (buggy) ma te whakahaere i te whakahau e whai ake nei:

$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created

Na inaianei me whakahaere te whakahau kia mohio kei te noho nga waa katoa app=sa-logic He tapanga me nga putanga e rite ana:

$ kubectl get pods -l app=sa-logic --show-labels
NAME                              READY   LABELS
sa-logic-568498cb4d-2sjwj         2/2     app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c         2/2     app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66   2/2     app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz   2/2     app=sa-logic,version=v2

ratonga sa-logic ka whai i nga pene me te tapanga app=sa-logic, no reira ka tohaina nga tono katoa ki nga wa katoa:

Hoki ki nga ratonga miihini me Istio. Wāhanga 2

... engari e hiahia ana matou kia tukuna nga tono ki nga waaata v1 ka whakaatahia ki nga waaata v2:

Hoki ki nga ratonga miihini me Istio. Wāhanga 2

Ka tutuki tenei ma te VirtualService me te DestinationRule, ka whakatauhia e nga ture nga waahanga me nga huarahi o te VirtualService ki tetahi waahanga motuhake.

Te Tautuhinga Raroiti i roto i nga Ture Whakataunga

Nga huinga-iti (roopuiti) ka whakatauhia e te whirihoranga e whai ake nei (sa-logic-subsets-destinationrule.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-logic
spec:
  host: sa-logic    # 1
  subsets:
  - name: v1        # 2
    labels:
      version: v1   # 3
  - name: v2
    labels:
      version: v2

  1. Kaihautū (host) ka whakatauhia ko tenei ture e pa ana ki nga keehi ka haere te huarahi ki te ratonga sa-logic;
  2. Taitara (name) ka whakamahia nga huinga-a-roto i te wa e ararere ana ki nga waahanga-iti;
  3. Tapanga (label) ka tautuhi i nga takirua uara-matua me taurite nga tauira kia noho hei waahanga o te huinga-iti.

Hoatu te whirihoranga me te whakahau e whai ake nei:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created

Inaianei kua tautuhia nga waahanga iti, ka taea e tatou te neke me te whirihora i te VirtualService ki te tono ture ki nga tono ki te sa-arorau kia:

  1. Ararere ki te huinga-iti v1,
  2. Whakaatahia ki te huinga-iti v2.

Ko te whakaaturanga e whai ake nei ka taea e koe te whakatutuki i o mahere (sa-logic-subsets-shadowing-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic          
  http:
  - route:
    - destination:
        host: sa-logic  
        subset: v1      
    mirror:             
      host: sa-logic     
      subset: v2

Karekau he whakamaramatanga i konei, no reira kia kite tatou i te mahi:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created

Me taapiri te uta ma te karanga i te whakahau e whai ake nei:

$ while true; do curl -v http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Me titiro ki nga hua i roto i te Grafana, ka kite koe ko te putanga me nga pepeke (buggy) ka puta he kore mo ~60% o nga tono, engari karekau tetahi o enei rahunga e pa ki nga kaiwhakamahi mutunga i te mea ka whakautua e tetahi ratonga whakahaere.

Hoki ki nga ratonga miihini me Istio. Wāhanga 2
Nga whakautu angitu o nga momo putanga rereke o te ratonga sa-arorau

I konei i kite tuatahi me pehea te tono VirtualService ki nga Kaihoe o a maatau ratonga: ahea sa-web-app ka tono kia sa-logic, ka haere i roto i te Envoy sidecar, e - na roto i te VirtualService - kua whirihorahia ki te arai i te tono ki te waahanga v1 me te whakaata i te tono ki te waahanga v2 o te ratonga. sa-logic.

E mohio ana ahau, kua whakaaro pea koe he maamaa nga Ratonga Mariko. I te waahanga e whai ake nei, ka whakawhānuihia e maatau ma te kii he tino rawe ano ratou.

Nga Whakaputa Canary

Ko te Canary Deployment te tukanga o te huri i tetahi putanga hou o te tono ki te iti o nga kaiwhakamahi. Ka whakamahia ki te whakarite kia kore he raruraru i roto i te tukunga me muri noa iho, kua maia ki tona kounga (tuku), tohatoha ki etahi atu kaiwhakamahi.оnui ake te hunga whakarongo.

Ki te whakaatu i nga whakaputanga o te kanaera, ka mahi tonu matou me tetahi waahanga iti buggy у sa-logic.

Kaua e moumou taima ki runga i nga mea iti ka tukuna tonu te 20% o nga kaiwhakamahi ki te putanga me nga pepeke (ka tohu tenei i ta tatou hurihanga canary), me te toenga 80% ki te ratonga noa. Hei mahi i tenei, whakamahia te VirtualService e whai ake nei (sa-logic-subsets-canary-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic    
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 80         # 1
    - destination: 
        host: sa-logic
        subset: v2
      weight: 20 # 1

1 te taumaha (weight), e tohu ana i te ōrau o nga tono ka tukuna ki tetahi kaiwhiwhi, ki tetahi waahanga iti ranei o te kaiwhiwhi.

Kia whakahouhia te whirihoranga VirtualService o mua mo sa-logic me te whakahau e whai ake nei:

$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

... a ka kite tonu tatou ko etahi o nga tono ka raru:

$ while true; do 
   curl -i http://$EXTERNAL_IP/sentiment 
   -H "Content-type: application/json" 
   -d '{"sentence": "I love yogobella"}' 
   --silent -w "Time: %{time_total}s t Status: %{http_code}n" 
   -o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500

Ka taea e te VirtualServices te huri i te kanari: I tenei keehi, kua whakaitihia e matou te paanga o nga take ki te 20% o te turanga kaiwhakamahi. He mea whakamiharo! Inaianei, i nga wa katoa kaore matou i te tino mohio ki ta matou waehere (i etahi atu kupu - i nga wa katoa ...), ka taea e matou te whakamahi i te whakaata me te hurihanga canary.

Nga waahi me te ngana ano

Engari kaore nga pepeha e mutu i nga wa katoa ki te waehere. I te rarangi mai i "8 Nga Pohehe mo te Rorohiko Tohatoha"Ko te tuatahi ko te whakapono pohehe "he pono te whatunga." I roto i te mooni te whatunga e kore pono, na konei ka hiahia matou ki nga waahi (waahi) ka ngana ano (whakamatau ano).

Mo te whakaaturanga ka whakamahi tonu matou i te putanga raruraru ano sa-logic (buggy), a ka whakatauritehia e matou te kore pono o te whatunga me nga rahunga ohorere.

Tukuna kia 1/3 te tupono ka roa rawa te whakautu ki ta maatau ratonga me nga pepeha, he 1/3 te tupono ka mutu me te Hapa Tūmau Roto, me te 1/3 te tupono ki te whakahoki angitu i te wharangi.

Hei whakaiti i nga paanga o enei raru me te pai ake o te oranga mo nga kaiwhakamahi, ka taea e matou:

  1. tāpirihia he taima ki te roa ake te ratonga i te 8 hēkona ki te whakautu,
  2. ngana ano ki te rahua te tono.

Mo te whakatinanatanga, ka whakamahia e matou te whakamaramatanga rauemi e whai ake nei (sa-logic-retries-timeouts-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 50
    - destination: 
        host: sa-logic
        subset: v2
      weight: 50
    timeout: 8s           # 1
    retries:
      attempts: 3         # 2
      perTryTimeout: 3s # 3

  1. Ko te waahi mo te tono kua whakaritea ki te 8 hēkona;
  2. Ka 3 nga wa ka ngana ano nga tono;
  3. A ko ia nganatanga ka kiia kaore i angitu mena ka neke ake te wa whakautu i te 3 hēkona.

He arotautanga tenei na te mea kaore te kaiwhakamahi e tatari neke atu i te 8 hēkona, ka toru nga nganatanga hou ki te tiki whakautu mena ka rahua, ka piki ake te tupono ki te whakautu angitu.

Hoatu te whirihoranga kua whakahoutia me te whakahau e whai ake nei:

$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

A, tirohia i roto i nga kauwhata Grafana kua piki ake te maha o nga whakautu angitu i runga ake nei:

Hoki ki nga ratonga miihini me Istio. Wāhanga 2
Te whakapai ake i nga tatauranga whakautu angitu i muri i te taapiri i nga waahi me te ngana ano

I mua i te neke ki te waahanga e whai ake nei (he pai ake ranei, ki te waahanga e whai ake nei o te tuhinga, na te mea karekau he whakamatautau mahi - tata. transl.), muku sa-logic-buggy me VirtualService ma te whakahaere i nga whakahau e whai ake nei:

$ kubectl delete deployment sa-logic-buggy
deployment.extensions “sa-logic-buggy” deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io “sa-logic” deleted

Ko nga Tauira Waahi iahiko me te Tumuaki

E korero ana matou mo nga tauira nui e rua i roto i te hoahoanga microservice e taea ai e koe te whakaora whaiaro (whakaora whaiaro) ratonga.

Kaiwhiwhi Puku ("kaiwhati iahiko") whakamahia ki te whakamutu i nga tono ka tae mai ki tetahi tauira o te ratonga e kiia ana he kino, ka whakahoki ano i te wa e tukuna ana nga tono a te kiritaki ki nga waahi hauora o taua ratonga (e whakanui ana i te ōrau o nga whakautu angitu). (Tuhipoka: Ka kitea etahi atu korero mo te tauira, hei tauira, konei.)

Bulkhead ("wehenga") ka wehe i nga rahunga ratonga mai i te pa ki te punaha katoa. Hei tauira, kua pakaru te Ratonga B ka tono tetahi atu ratonga (Kaihoko Ratonga B) ki te Ratonga B, na reira ka pau tana puna miro me te kore e taea te mahi i etahi atu tono (ahakoa ehara i te Ratonga B). (Tuhipoka: Ka kitea etahi atu korero mo te tauira, hei tauira, konei.)

Ka waiho e au nga korero mo te whakatinanatanga o enei tauira na te mea he ngawari ki te kimi i roto tuhinga whaimana, a ka tino hiahia ano ahau ki te whakaatu i te whakamotuhēhēnga me te whakamanatanga, ka korerohia i te waahanga o muri o te tuhinga.

PS mai i te kaiwhakamaori

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero