Toe fo'i i microservices ma Istio. Vaega 2

Toe fo'i i microservices ma Istio. Vaega 2

Manatua. fa'aliliu.: Vaega muamua O lenei fa'asologa na tu'ufa'atasia i le fa'ailoaina o agava'a Istio ma fa'aalia i latou i le fa'atinoga. O le taimi nei o le a tatou talanoa e uiga i vaega sili atu ona faigata o le faʻatulagaina ma le faʻaogaina o lenei mesh auaunaga, aemaise lava, e uiga i le faʻaogaina lelei o le faʻaogaina o auala ma le pulega o fefaʻatauaiga.

Matou te faamanatu atu foi ia te oe o le tusiga e faʻaogaina faʻasalalauga (faʻaaliga mo Kubernetes ma Istio) mai le fale teu oloa. istio-pule.

Pulega o Ta'avale

Faatasi ai ma Istio, o loʻo faʻaalia avanoa fou i le fuifui e tuʻuina atu:

  • Talosagaina ole talosaga: fa'ata'ita'iina o canary, su'ega A/B;
  • Paleni uta: faigofie ma tumau, faʻavae i luga o faʻailoga;
  • Toe faʻaleleia pe a pa'ū: taimi malolo, toe taumafai, motusia matagaluega;
  • Fa'aofi fa'aletonu: fa'atuai, tu'u talosaga, ma isi.

Aʻo faʻaauau pea le tusiga, o nei agavaʻa o le a faʻaalia i le faʻaaogaina o le talosaga filifilia e fai ma faʻataʻitaʻiga ma o le a faʻalauiloa manatu fou i luga o le ala. O le manatu muamua faapea o le a DestinationRules (i.e. tulafono e uiga i le tagata e mauaina le felauaiga/managa - approx. transl.), fa'atasi ai ma le fesoasoani lea matou te fa'agaoioia ai su'ega A/B.

Su'ega A/B: DestinationRules i le fa'atinoga

O su'ega A/B e fa'aaogaina i mataupu e lua fa'aliliuga o se talosaga (e masani lava e ese le va'aiga) ma e le o 100% matou mautinoa po'o fea o le a fa'aleleia ai le poto masani o tagata fa'aoga. O le mea lea, matou te faʻatautaia faʻasologa e lua i le taimi e tasi ma aoina fua.

Ina ia faʻapipiʻi le lomiga lona lua o le pito i luma, manaʻomia mo le faʻaalia o suʻega A / B, faʻataʻitaʻi le poloaiga lenei:

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

O le faʻaaliga faʻapipiʻi mo le lanu meamata e ese i nofoaga e lua:

  1. O le ata e fa'avae i se isi fa'ailoga - istio-green,
  2. Pods ei ai se igoa version: green.

Talu ai o lo'o i ai le fa'ailoga o fa'asalalauga uma e lua app: sa-frontend,talosaga e fa'asolo e le auaunaga fa'apitoa sa-external-services mo le auaunaga sa-frontend, o le a toe faʻafeiloaʻi i ona tulaga uma ma o le uta o le a tufatufa atu i round-robin algorithm, lea o le a taʻitaʻia ai le tulaga nei:

Toe fo'i i microservices ma Istio. Vaega 2
E lei maua faila na talosagaina

E le'i maua nei faila ona e ese le igoa i fa'aliliuga eseese o le talosaga. Sei o tatou mautinoa o lenei:

$ 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

O lona uiga o lena index.html, talosagaina se tasi o faʻamatalaga o faila faʻamau, e mafai ona tuʻuina atu e le paleni uta i pods o loʻo i ai se faʻamatalaga ese, lea, mo mafuaaga manino, e le o iai ia faila. O le mea lea, ina ia mafai ona galue le talosaga, e tatau ona tatou setiina se tapulaʻa: "o le fa'asologa lava lea e tasi o le talosaga na tu'uina atu i le index.html e tatau ona tu'uina atu talosaga mulimuli ane".

O le a tatou o'o i ai ma le fa'atatauina o uta fa'atatau i hash (Tausau Hash Loadbalancing)... I lenei tulaga o talosaga mai le tagata fa'atau e tasi e lafo i le fa'ata'ita'iga pito i tua, lea o lo'o fa'aogaina ai se mea totino - mo se fa'ata'ita'iga, se ulutala HTTP. Fa'atinoina ile fa'aogaina ole DestinationRules.

Tulafono Fa'asinomaga

Mavae Au'aunaga Fa'apitoa auina atu se talosaga i le au'aunaga mana'omia, e fa'aaoga ai DestinationRules e mafai ona matou fa'amalamalamaina faiga fa'avae o le a fa'aogaina i felauaiga fa'atatau mo fa'ata'ita'iga o lenei auaunaga:

Toe fo'i i microservices ma Istio. Vaega 2
Pulea o feoaiga ma punaoa a Istio

mataʻi: O le aʻafiaga o punaoa a Istio i luga o fefaʻatauaiga o fesoʻotaʻiga o loʻo tuʻuina atu iinei i se auala e faigofie ona malamalama i ai. Ina ia saʻo, o le faʻaiʻuga o le a le mea e tuʻuina atu ai le talosaga e faia e le Avefeʻau i le Ingress Gateway ua faʻatulagaina i le CRD.

Fa'atasi ai ma Tulafono Fa'asinomaga, e mafai ona matou fa'atulagaina le paleni o uta e fa'aoga ai fa'aupuga faifaipea ma fa'amautinoa e tali atu le fa'ata'ita'iga lava lea i le tagata lava e tasi. O le faʻatulagaga o loʻo i lalo e mafai ai ona e ausia lenei mea (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 o le a faʻavaeina i luga o mea o loʻo i totonu o le ulutala HTTP version.

Fa'aoga le fa'atonuga i le fa'atonuga lea:

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

Faʻatonu nei le faʻatonuga i lalo ma ia mautinoa e te mauaina faila saʻo pe ae faʻamaonia le ulutala version:

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

mataʻi: Ina ia faʻaopoopo tulaga taua i le ulutala ma faʻataʻitaʻi saʻo iʻuga i le browser, e mafai ona e faʻaogaina lenei faaopoopoga i Chrome (po o ma lenei mo Firefox - tusa. fa'aliliu.).

I se tulaga lautele, DestinationRules e sili atu le gafatia i le vaega o le paleni o uta - siaki mo faʻamatalaga i totonu pepa aloaia.

Aʻo leʻi suʻesuʻeina atili le VirtualService, seʻi o tatou tape le "meamata lanumeamata" o le talosaga ma le tulafono faʻatonuga o auala e ala i le faʻatinoina o tulafono 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

Fa'ata: Au'aunaga Fa'apitoa i Fa'ata'ita'iga

Ataata (“talipupuni”) po'o Fa'ata (“faataata”) faʻaaogaina i mataupu matou te manaʻo e suʻe se suiga i le gaosiga e aunoa ma le afaina ai o tagata faʻaoga: e faia lenei mea, matou te faʻaluaina ("faʻata") talosaga i se faʻataʻitaʻiga lona lua lea na faia ai suiga manaʻomia, ma vaʻai i taunuuga. I se faaupuga faigofie, o le taimi lea e filifilia ai e lau paaga le mataupu sili ona taua ma faia se talosaga toso i foliga o se faaputuga tele o palapala e le mafai e se tasi ona toe iloiloina.

Ina ia faʻataʻitaʻiina lenei faʻataʻitaʻiga i le gaioiga, seʻi o tatou faia se faʻataʻitaʻiga lona lua o le SA-Logic ma faʻamaʻi (buggy) e ala i le faʻatinoina o le poloaiga lenei:

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

Ma o lenei seʻi o tatou faʻataʻitaʻiina le faʻatonuga e faʻamautinoa ai o taimi uma ma app=sa-logic E iai fo'i a latou fa'ailoga ma fa'aliliuga tutusa:

$ 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

tautua sa-logic taula'i pods ma se fa'ailoga app=sa-logic, o lea o talosaga uma o le a tufatufa atu i taimi uma:

Toe fo'i i microservices ma Istio. Vaega 2

... ae matou te mananaʻo ia tuʻuina atu talosaga i v1 faʻataʻitaʻiga ma faʻaalia i v2 taimi:

Toe fo'i i microservices ma Istio. Vaega 2

O le a matou ausia lenei mea e ala i le VirtualService faʻatasi ma DestinationRule, lea o le a fuafua ai tulafono faʻavae ma auala o le VirtualService i se vaega faʻapitoa.

Fa'amatalaina o vaega laiti i Tulafono Fa'asinomaga

Vaega laiti (sofa'i) e fa'amoemoeina i le fa'atulagaga 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. talimalo (host) o lo'o fa'amatalaina o lenei tulafono e fa'atatau i na'o mataupu pe a alu le auala i le tautua sa-logic;
  2. Suafa (name) o vaega laiti e fa'aaogaina pe a fa'asolo atu i fa'ata'ita'iga;
  3. Fa'ailoga (label) o lo'o fa'amatalaina ai pa'aga autu-taua e tatau ona fa'atusaina fa'ata'ita'iga e avea ma vaega o le vaega.

Fa'aoga le fa'atonuga i le fa'atonuga lea:

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

I le taimi nei ua faʻamalamalamaina vaega laiti, e mafai ona tatou faʻagasolo ma faʻapipiʻi le VirtualService e faʻaoga tulafono i talosaga i sa-logic ina ia latou:

  1. Fa'aala i se vaega itiiti v1,
  2. Fa'aata i se vaega itiiti v2.

Ole fa'aaliga lea e mafai ai ona e ausia au fuafuaga (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

Leai se faʻamatalaga e manaʻomia iinei, seʻi o tatou vaʻai i le gaioiga:

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

Sei o tatou faʻaopoopo le uta e ala i le valaʻau i le poloaiga lenei:

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

Seʻi o tatou vaʻavaʻai i taunuʻuga i Grafana, lea e mafai ai ona e vaʻaia o le faʻasologa ma bugs (buggy) i'u i le toilalo mo le ~ 60% o talosaga, ae leai se tasi o nei toilalo e aafia ai tagata fa'au'uga a'o tali atu i latou e se auaunaga fa'aauau.

Toe fo'i i microservices ma Istio. Vaega 2
Tali manuia o ituaiga eseese o le auaunaga sa-logic

O iinei na matou vaʻai muamua ai pe faʻapefea ona faʻaogaina le VirtualService i Avega oa matou auaunaga: o afea sa-web-app faia se talosaga i sa-logic, e ui atu i le sidecar Envoy, lea - e ala i le VirtualService - ua faʻatulagaina e faʻafeiloaʻi le talosaga i le v1 subset ma faʻata le talosaga i le v2 subset o le auaunaga. sa-logic.

Ou te iloa, atonu ua uma ona e manatu o le Virtual Services e faigofie. I le isi vaega, o le a tatou faʻalauteleina i lena mea e ala i le faʻapea e matua lelei lava.

Fa'aliga Canary

Canary Deployment o le faagasologa o le taʻavaleina o se faʻamatalaga fou o se talosaga i se numera toʻaitiiti o tagata faʻaoga. E faʻaaogaina e faʻamautinoa ai e leai ni faʻafitauli i le faʻamalolo ma naʻo le maeʻa ai, ua uma ona mautinoa i lona tulaga (faʻasaʻoloto), tufatufa atu i isi tagata faʻaoga.оto'atele le aofia.

Ina ia faʻaalia le taʻavale canary, o le a matou faʻaauau pea ona galulue ma se vaega itiiti buggy у sa-logic.

Aua neʻi o tatou faʻaumatia le taimi i luga o mea laiti ma lafo vave le 20% o tagata faʻaoga i le faʻasologa ma bugs (o le a fai ma sui o la tatou canary rollout), ma le 80% totoe i le auaunaga masani. Ina ia faia lenei mea, faʻaaoga le VirtualService (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 o le mamafa (weight), o lo'o fa'amaoti mai ai le pasene o talosaga o le a fa'asino atu i se tagata e mauaina po'o se vaega o le tagata e mauaina.

Sei o tatou faafou le faatulagaga VirtualService muamua mo sa-logic ma le poloaiga lenei:

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

... ma o le a vave ona tatou iloa o nisi o talosaga e oʻo atu ai i le toilalo:

$ 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 mafai ai ona fa'asolo atu canary: I lenei tulaga, ua matou fa'aititia le a'afiaga o fa'afitauli i le 20% o tagata fa'aoga. Matagofie! I le taimi nei, i tulaga uma pe a tatou le mautinoa a tatou code (i se isi faaupuga - i taimi uma ...), e mafai ona tatou faʻaogaina faʻata ma canary rollouts.

Taimi ma toe taumafai

Ae e le iu i taimi uma ia bug i le code. I le lisi mai "8 Faʻamatalaga sese e uiga i le tufatufaina atu o komepiuta"O le mea muamua o le talitonuga sese e faapea" o le upega tafaʻilagi e faʻatuatuaina. O le mea moni o le upega tafailagi fa'atuatuaina, ma o le mafua'aga lea matou te mana'omia ai taimi fa'agata (taimi taimi) ma toe taumafai (toe taumafai).

Mo faʻataʻitaʻiga o le a matou faʻaauau pea ona faʻaogaina le faʻafitauli tutusa sa-logic (buggy), ma o le a matou faʻataʻitaʻiina le le faʻamaoni o le fesoʻotaʻiga ma faʻalavelave faʻafuaseʻi.

Tu'u atu la matou 'au'aunaga fa'atasi ma bugs e maua le 1/3 avanoa e umi tele e tali mai ai, o le 1/3 avanoa e fa'ai'u ai i se Fa'aletonu i totonu o le Server, ma le 1/3 avanoa e toe fa'afo'i manuia ai le itulau.

Ina ia faʻaitiitia le aʻafiaga o ia faʻafitauli ma faʻaleleia le olaga mo tagata faʻaoga, e mafai ona tatou:

  1. fa'aopoopo se taimi fa'agata pe afai e umi atu le tautua nai lo le 8 sekone e tali mai ai,
  2. toe taumafai pe a le manuia le talosaga.

Mo le faʻatinoga, o le a matou faʻaogaina le faʻamatalaga o punaoa 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. O le taimi fa'agata mo le talosaga ua seti i le 8 sekone;
  2. O talosaga e toe fa'a 3 taimi;
  3. Ma o taumafaiga taitasi e manatu e le manuia pe a sili atu le taimi tali i le 3 sekone.

O se faʻataʻitaʻiga lea aua e le tatau ona faʻatali le tagata faʻaoga e sili atu i le 8 sekone ma o le a matou faia ni taumafaiga fou se tolu e maua ai se tali i le tulaga o le toilalo, faʻateleina le avanoa o se tali manuia.

Fa'aoga le fa'afouga fa'afouina i le fa'atonuga lea:

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

Ma siaki i le Grafana kalafi o le numera o tali manuia ua faateleina i luga:

Toe fo'i i microservices ma Istio. Vaega 2
Fa'alelei i fuainumera tali manuia pe a mae'a fa'aopoopo taimi fa'agata ma toe taumafai

A'o le'i agai atu i le isi vaega (po'o se mea, i le isi vaega o le tusiga, aua i lenei mea o le a le toe faia ni fa'ata'ita'iga fa'atino - approx. transl.), tape sa-logic-buggy ma VirtualService e ala i le faʻatinoina o tulafono 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

Fa'ata'ita'i Va'ava'a ma Ulua'i

O loʻo matou talanoa e uiga i ni faʻataʻitaʻiga taua se lua i le faʻataʻitaʻiga microservice e mafai ai ona e ausia le toe faʻaleleia o oe lava (faamaloloina o ia lava) auaunaga.

Faʻasalalau Faʻasalalau ("fa'ava'ava'ava'a") fa'aaoga e fa'amuta ai talosaga e o'o mai i se fa'ata'ita'iga o se au'aunaga e manatu e le'o lelei ma toe fa'afo'i a'o talosaga a le tagata o tausia e toe fa'afo'i atu i tulaga lelei o lena auaunaga (lea e fa'ateleina ai le pasene o tali manuia). (Manatua: E mafai ona maua se faʻamatalaga auiliili o le mamanu, mo se faʻataʻitaʻiga, iinei.)

Uiga tele ("vaega") fa'ate'aina fa'aletonu auaunaga mai le a'afiaina o le faiga atoa. Mo se fa'ata'ita'iga, ua motusia le Auaunaga B ma ua tu'uina atu e le isi au'aunaga (le tagata fa'atau a le Auaunaga B) se talosaga i le Auaunaga B, ma mafua ai ona fa'aumatia lona filo ma ua le mafai ai ona tautuaina isi talosaga (tusa lava pe le'o mai le Auaunaga B). (Manatua: E mafai ona maua se faʻamatalaga auiliili o le mamanu, mo se faʻataʻitaʻiga, iinei.)

O le a ou aveese faʻamatalaga faʻatinoga o nei mamanu aua e faigofie ona maua i totonu pepa aloaia, ma ou te manaʻo foʻi e faʻaalia le faʻamaoni ma le faʻatagaina, lea o le a talanoaina i le isi vaega o le tusiga.

PS mai faaliliu

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga