Khutlela ho microservices le Istio. Karolo ea 2

Khutlela ho microservices le Istio. Karolo ea 2

Hlokomela. fetolela.: Karolo ea pele Letoto lena le ne le nehetsoe ho hlahisa bokhoni ba Istio le ho bo bontša ka liketso. Joale re tla bua ka likarolo tse rarahaneng tsa tlhophiso le ts'ebeliso ea letlooeng lena la lits'ebeletso, mme haholoholo, mabapi le ho tsamaisa sephethephethe hantle le taolo ea sephethephethe sa marang-rang.

Re u hopotsa hape hore sengoloa se sebelisa litlhophiso (liponahatso tsa Kubernetes le Istio) ho tsoa sebakeng sa polokelo. istio-mastery.

Tsamaiso ea Sephethephethe

Ka Istio, bokhoni bo bocha bo hlaha sehlopheng ho fana ka:

  • Mokhoa o matla oa kopo: ho phatlalatsoa ha canary, tlhahlobo ea A / B;
  • Ho leka-lekanya mojaro: e bonolo le e tsitsitseng, e thehiloeng ho li-hashes;
  • Ho hlaphoheloa ka mor'a ho oa: ho qeta nako, ho leka hape, li-circuit breakers;
  • Ho kenya liphoso: tieho, likopo tse lahliloeng, joalo-joalo.

Ha sengoloa se ntse se tsoela pele, bokhoni bona bo tla bontšoa ho sebelisoa ts'ebeliso e khethiloeng e le mohlala mme mehopolo e mecha e tla hlahisoa tseleng. Khopolo e joalo ea pele e tla ba DestinationRules (ke hore melao mabapi le moamohedi wa sephethephethe/likopo - hoo e ka bang. transl.), ka thuso ea eona re kenya tšebetsong tlhahlobo ea A/B.

Teko ea A/B: Destination Rules in practice

Teko ea A/B e sebelisoa maemong ao ho nang le mefuta e 'meli ea ts'ebeliso (hangata e fapana ka pono) mme ha re na bonnete ba 100% hore na ke efe e tla ntlafatsa boiphihlelo ba mosebelisi. Ka hona, re tsamaisa liphetolelo ka bobeli ka nako e le 'ngoe' me re bokella metrics.

Ho sebelisa mofuta oa bobeli oa sebaka se ka pele, se hlokahalang bakeng sa ho bonts'a tlhahlobo ea A / B, tsamaisa taelo e latelang:

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

Pontšo ea phano ea mofuta o motala e fapana ka libaka tse peli:

  1. Setšoantšo se ipapisitse le tag e fapaneng - istio-green,
  2. Li-pods li na le letšoao version: green.

Kaha li-deployments ka bobeli li na le label app: sa-frontend,likopo li tsamaisoa ke tšebeletso ea sebele sa-external-services bakeng sa tshebeletso sa-frontend, e tla fetisetsoa ho maemo ohle a eona mme mojaro o tla tsamaisoa ka algorithm ea round-robin, e leng se tla lebisa boemong bo latelang:

Khutlela ho microservices le Istio. Karolo ea 2
Lifaele tse kopiloeng ha lia fumanoa

Lifaele tsena ha lia fumanoa hobane li rehiloe ka tsela e fapaneng liphetolelong tse fapaneng tsa ts'ebeliso. Ha re etse bonnete ba sena:

$ 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

Ho bolela hore index.html, ho kopa phetolelo e le 'ngoe ea lifaele tse tsitsitseng, e ka romeloa ke tekanyo ea mojaro ho li-pods tse nang le phetolelo e fapaneng, moo, ka mabaka a hlakileng, lifaele tse joalo ha li eo. Ka hona, e le hore kopo e sebetse, re hloka ho beha thibelo: "mofuta o ts'oanang oa ts'ebeliso e faneng ka index.html e lokela ho fana ka likopo tse latelang".

Re tla fihla moo ka ho leka-lekanya mojaro oa hash-based (Hash Loadbalancing e tsitsitseng)... Boemong bona likopo tse tsoang ho moreki a le mong li romelloa molemong o tšoanang oa morao, eo thepa e hlalositsoeng esale pele e sebelisoang - ka mohlala, hlooho ea HTTP. E sebelisoa ho sebelisoa DestinationRules.

DestinationRules

ka mor'a hore ho Ts'ebeletso ea Virtual re rometse kopo tshebeletsong eo re e batlang, re sebedisa DestinationRules re ka hlalosa melaoana e tla sebediswa bakeng sa sephethephethe bakeng sa maemo a tshebeletso ena:

Khutlela ho microservices le Istio. Karolo ea 2
Tsamaiso ea sephethephethe ka lisebelisoa tsa Istio

mantsoe: Tšusumetso ea mehloli ea Istio ho sephethephethe sa marang-rang e hlahisoa mona ka tsela eo ho leng bonolo ho e utloisisa. Ho bua ka nepo, qeto ea hore na kopo e rometsoe ketsahalong efe e etsoa ke Moemeli ho Ingress Gateway e hlophisitsoeng ho CRD.

Ka Melao ea Sebaka, re ka etsa litlhophiso tsa ho leka-lekanya thepa ho sebelisa li-hashes tse sa fetoheng le ho netefatsa hore tšebeletso e tšoanang e arabela mosebedisi a le mong. Tlhophiso e latelang e u lumella ho fihlela sena (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 - hash e tla hlahisoa ho latela litaba tsa sehlooho sa HTTP version.

Sebelisa tlhophiso ka taelo e latelang:

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

Joale tsamaisa taelo e ka tlase 'me u netefatse hore u fumana lifaele tse nepahetseng ha u hlakisa hlooho version:

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

mantsoe: Ho kenyelletsa boleng bo fapaneng hloohong le ho lekola liphetho ka kotloloho ho sebatli, o ka se sebelisa katoloso ena ho Chrome (kapa ka sena bakeng sa Firefox - approx. fetolela.).

Ka kakaretso, DestinationRules e na le bokhoni bo bongata sebakeng sa ho leka-lekanya mojaro - hlahloba lintlha ho litokomane tsa molao.

Pele o ithuta VirtualService ho ea pele, ha re hlakole "mofuta o motala" oa ts'ebeliso le molao o tsamaisanang le sephethephethe ka ho sebelisa litaelo tse latelang:

$ 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

Mirroring: Litšebeletso tsa Virtual ka Ts'ebetso

Ho tlatsa ("ho sireletsa") kapa Seipone (“ho etsa seipone”) e sebelisoang maemong ao ho ona re batlang ho leka phetoho tlhahisong ntle le ho ama basebelisi ba ho qetela: ho etsa sena, re etsisa likopo ("seipone") ketsahalong ea bobeli moo liphetoho tse lakatsehang li entsoeng, 'me re shebe litlamorao. Ka mantsoe a bonolo feela, ke ha mosebetsi-'moho le uena a khetha taba e mahlonoko ka ho fetisisa 'me a etsa kopo ea ho hula ka mokhoa oa mobu o moholo oo ho seng motho ea ka o hlahlobang.

Ho leka boemo bona ka liketso, ha re theheng mohlala oa bobeli oa SA-Logic e nang le likokoana-hloko (buggy) ka ho tsamaisa taelo e latelang:

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

'Me joale ha re tsamaiseng taelo ho etsa bonnete ba hore maemo ohle ka app=sa-logic Li boetse li na le li-label tse nang le mefuta e lumellanang:

$ 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

tšebeletso ea sa-logic liphoofotsoana tse nang le leibole app=sa-logic, kahoo likopo tsohle li tla ajoa maemong ohle:

Khutlela ho microservices le Istio. Karolo ea 2

... empa re batla hore likopo li romeloe maemong a v1 le ho bonts'oa maemong a v2:

Khutlela ho microservices le Istio. Karolo ea 2

Re tla finyella sena ka VirtualService hammoho le DestinationRule, moo melao e tla khetholla li-subsets le litsela tsa VirtualService ho ea karolong e itseng.

Ho Hlalosa Melawana ho Melao ya Sebaka

Li-subsets (likaroloana) li khethoa ke tlhophiso e latelang (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. Moamoheli (host) e hlalosa hore molao ona o sebetsa feela maemong ha tsela e ea tšebeletsong sa-logic;
  2. Litlotla (name) li-subset li sebelisoa ha ho fetisetsoa maemong a manyenyane;
  3. Label (label) e hlalosa lipara tsa bohlokoa tseo mehlala e tlamehang ho li bapisa hore e be karolo ea karoloana.

Sebelisa tlhophiso ka taelo e latelang:

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

Kaha joale li-subsets li hlalositsoe, re ka tsoela pele le ho lokisa VirtualService ho sebelisa melao ho likopo ho sa-logic e le hore:

  1. E fetiselitsoe ho sehlopha se senyenyane v1,
  2. E bonts'itsoe ho sehlopha se tlase v2.

Manifesto e latelang e u lumella ho fihlela merero ea hau (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

Ha ho na tlhaloso e hlokahalang mona, kahoo ha re e boneng e sebetsa:

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

Ha re eketse mojaro ka ho bitsa taelo e latelang:

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

Ha re shebeng liphetho tsa Grafana, moo o ka bonang hore mofuta o nang le likokoana-hloko (buggy) e fella ka ho hloleha ho ~ 60% ea likopo, empa ha ho le e 'ngoe ea mefokolo ena e amang basebelisi ba ho qetela kaha ba arabeloa ke ts'ebeletso e sebetsang.

Khutlela ho microservices le Istio. Karolo ea 2
Likarabo tse atlehileng tsa mefuta e fapaneng ea litšebeletso tsa sa-logic

Mona re bone ka lekhetlo la pele kamoo VirtualService e sebelisoang ho Baemeli ba litšebeletso tsa rona: neng sa-web-app etsa kopo ho sa-logic, e feta ka lehlakoreng la Moemeli oa koloi, eo - ka VirtualService - e lokiselitsoeng ho tsamaisa kopo ho sesebelisoa sa v1 le ho bonts'a kopo ho v2 subset ea tšebeletso. sa-logic.

Kea tseba, mohlomong u se u ntse u nahana hore Litšebeletso tsa Virtual li bonolo. Karolong e latelang, re tla atolosa taba eo ka ho bolela hore le tsona li ntle haholo.

Lihlahisoa tsa Canary

Canary Deployment ke mokhoa oa ho hlahisa mofuta o mocha oa kopo ho palo e nyane ea basebelisi. E sebelisetsoa ho etsa bonnete ba hore ha ho na mathata ho lokolloa 'me feela ka mor'a moo, e se e ntse e kholisehile ka boleng ba eona (ho lokolloa), e abela basebelisi ba bang.оbamameli ba bangata.

Ho bonts'a ho phatlalatsoa ha canary, re tla tsoelapele ho sebetsa le sehlotšoana buggy у sa-logic.

Ha re se keng ra senya nako ka lintho tse nyenyane 'me hang-hang re romelle 20% ea basebelisi phetolelong e nang le likokoana-hloko (sena se tla emela tlhahiso ea rona ea canary), le 80% e setseng tšebeletsong e tloaelehileng. Ho etsa sena, sebelisa VirtualService e latelang (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 ke boima (weight), e hlakisang peresente ea likopo tse tla lebisoa ho moamoheli kapa sehlotšoana sa moamoheli.

Ha re ntjhafatse tlhophiso e fetileng ya VirtualService bakeng sa sa-logic ka taelo e latelang:

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

... 'me hang-hang re tla bona hore likopo tse ling li lebisa ho hloleheng:

$ 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

VirtualServices e nolofalletsa ho phatlalatsoa ha canary: Tabeng ena, re fokolitse tšusumetso e ka bang teng ea litaba ho 20% ea basebelisi. E babatseha! Hona joale, maemong ohle ha re sa tsebe hantle ka khoutu ea rona (ka mantsoe a mang - kamehla ...), re ka sebelisa seipone le li-canary rollouts.

Ho qeta nako le ho leka hape

Empa liphoso ha se kamehla li qetellang khoutu. Lethathamong le tsoang ho "8 Maikutlo a fosahetseng mabapi le Distributed Computing"Sebakeng sa pele ke tumelo e fosahetseng ea hore" marang-rang a tšepahala. Ha e le hantle marang-rang ha e ka tšeptjoa, 'me ka lebaka lena re hloka nako (nako ea nako) le ho leka hape (leka hape).

Bakeng sa lipontšo re tla tsoelapele ho sebelisa mofuta o tšoanang oa bothata sa-logic (buggy), 'me re tla etsisa ho se tšepahale ha marang-rang ka ho hlōleha ho sa tloaelehang.

E re tšebeletso ea rona e nang le litšitšili e be le monyetla oa 1/3 oa ho nka nako e telele ho araba, monyetla oa 1/3 oa ho qetella ka Phoso ea Ka hare ea Seva, le monyetla oa 1/3 oa ho khutlisa leqephe ka katleho.

Ho fokotsa litlamorao tsa mathata a joalo le ho ntlafatsa bophelo ba basebelisi, re ka:

  1. eketsa nako ea nako haeba tšebeletso e nka nako e telele ho feta metsotsoana e 8 ho arabela,
  2. leka hape haeba kopo e hloleha.

Ho kenya ts'ebetsong, re tla sebelisa tlhaloso e latelang ea lisebelisoa (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. Nako ea nako ea kopo e behiloe ho metsotsoana ea 8;
  2. Likōpo li lekoa hape ka makhetlo a 3;
  3. 'Me boiteko bo bong le bo bong bo nkoa bo sa atlehe haeba nako ea karabo e feta metsotsoana e 3.

Ena ke ts'ebetso hobane mosebelisi ha a na ho ema ho feta metsotsoana e 8 mme re tla etsa liteko tse tharo tse ncha tsa ho fumana karabo ha ho ka ba le liphoso, ho eketsa monyetla oa karabo e atlehileng.

Sebelisa tlhophiso e ntlafalitsoeng ka taelo e latelang:

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

'Me u hlahlobe li-graph tsa Grafana hore na palo ea likarabo tse atlehileng e eketsehile ka holimo:

Khutlela ho microservices le Istio. Karolo ea 2
Lintlafatso ho lipalo-palo tse atlehileng tsa karabelo ka mor'a ho kenyelletsa linako le ho leka hape

Pele o fetela karolong e latelang (kapa ho e-na le hoo, ho ea karolong e latelang ea sengoloa, hobane ho sena ho ke ke ha hlola ho e-ba le liteko tse sebetsang - approx. transl.), hlakola sa-logic-buggy le VirtualService ka ho tsamaisa litaelo tse latelang:

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

Sekhahla sa Potoloho le Mekhoa ea Bulkhead

Re bua ka mekhoa e 'meli ea bohlokoa ho meralo ea microservice e u lumellang hore u finyelle ho intša (ho iphekola) litšebeletso.

Motlakase oa potoloho ("mohahlauli oa potoloho") e sebelisetsoang ho felisa likopo tse tlang ketsahalong ea tšebeletso e nkoang e sa loka le ho e khutlisa ha likopo tsa bareki li lebisoa maemong a bophelo bo botle ba ts'ebeletso eo (e leng ho eketsang liphesente tsa likarabelo tse atlehileng). (Tlhokomeliso: Tlhaloso e qaqileng haholoanyane ea mohlala e ka fumanoa, mohlala, mona.)

Bongata ba hlooho ("karohano") e arola mefokolo ea litšebeletso ho ama tsamaiso eohle. Ka mohlala, Tšebeletso ea B e robehile 'me tšebeletso e' ngoe (Moreki oa Tšebeletso ea B) e etsa kopo ho Tšebeletso ea B, e etsa hore e felise letamo la eona 'me e se ke ea khona ho fana ka likōpo tse ling (le haeba li sa tsoe ho Tšebeletso ea B). (Tlhokomeliso: Tlhaloso e qaqileng haholoanyane ea mohlala e ka fumanoa, mohlala, mona.)

Ke tla siea lintlha tsa ts'ebetsong ea mekhoa ena hobane ho bonolo ho e fumana litokomane tsa molao, hape ke hlile ke batla ho bontša bonnete le tumello, e tla tšohloa karolong e latelang ea sehlooho.

PS ho tsoa ho mofetoleli

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso