
Fanamarihana. transl.: Ity andiany ity dia natokana hampahafantarana ny fahaizan'i Istio sy hanehoana azy ireo amin'ny asa. Amin'izao fotoana izao dia hiresaka momba ny lafiny sarotra kokoa amin'ny fanamafisana sy ny fampiasana an'ity mesh serivisy ity isika, ary indrindra ny momba ny zotra voarindra tsara sy ny fitantanana ny fifamoivoizana.
Mampahatsiahy anao ihany koa izahay fa ny lahatsoratra dia mampiasa configurations (sehatra ho an'ny Kubernetes sy Istio) avy amin'ny tahiry. .
Fitantanana ny fifamoivoizana
Miaraka amin'i Istio, misy fahaiza-manao vaovao hita ao amin'ny cluster mba hanomezana:
- Fandrosoana fangatahana dynamic: fanondranana canary, fitiliana A/B;
- Load balancing: tsotra sy tsy miovaova, mifototra amin'ny hash;
- Famerenana aorian'ny fararano: fahatapahan'ny fotoana, andrana indray, fiatoana;
- Mampiditra lesoka: fanemorana, fangatahana latsaka, sns.
Raha mbola mitohy ny lahatsoratra, ireo fahaiza-manao ireo dia ho aseho amin'ny fampiasana ny fampiharana voafantina ho ohatra ary hisy hevitra vaovao hampidirina eny an-dalana. Ny hevitra voalohany toy izany dia ho DestinationRules (izany hoe fitsipika momba ny mpandray ny fifamoivoizana/fangatahana - eo amin'ny transl.), miaraka amin'ny fanampian'ny fampahavitrihana ny fitiliana A/B.
Fitsapana A/B: DestinationRules amin'ny fampiharana
Ny fitsapana A/B dia ampiasaina amin'ny tranga misy dikan-teny roa amin'ny fampiharana iray (matetika tsy mitovy amin'ny maso izy ireo) ary tsy azonay antoka 100% hoe iza no hanatsara ny traikefan'ny mpampiasa. Noho izany, miara-miasa ny dikan-teny roa izahay ary manangona metrika.
Mba hametrahana ny dikan-teny faharoa amin'ny frontend, ilaina amin'ny fampisehoana fitiliana A/B dia araho ity baiko manaraka ity:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green createdTsy mitovy amin'ny toerana roa ny fisehon'ny fametrahana ny dikan-teny maitso:
- Ny sary dia mifototra amin'ny marika hafa -
istio-green, - Misy marika ny pods
version: green.
Satria samy manana etikety ny fametrahana roa app: sa-frontend, fangatahana alefa amin'ny serivisy virtoaly sa-external-services ho an'ny fanompoana sa-frontend, dia halefa any amin'ny tranga rehetra ary ny entana dia hozaraina amin'ny , izay hitarika amin'ireto toe-javatra manaraka ireto:

Tsy hita ireo rakitra nangatahana
Tsy hita ireo rakitra ireo satria samy hafa ny anarany amin'ny dikan-teny samihafa amin'ny fampiharana. Andeha hojerentsika izao:
$ 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 Midika izany fa index.html, mangataka dika iray amin'ny rakitra static, dia azo alefan'ny mpandrindra entana mankany amin'ny pods izay manana dikan-teny hafa, izay, noho ny antony mazava, dia tsy misy ny rakitra toy izany. Noho izany, mba hahombiazan'ny fampiharana dia mila mametraka fameperana isika: "ny dikan-teny mitovy amin'ny fampiharana index.html dia tokony hanolotra fangatahana manaraka".
Ho tonga any isika miaraka amin'ny fampifandanjana entana mifototra amin'ny hash (Loadbalancing Hash tsy miovaova)... Raha izany dia Ny fangatahana avy amin'ny mpanjifa iray ihany dia alefa any amin'ny ohatra backend mitovy, izay ampiasaina ny fananana efa voafaritra mialoha - ohatra, lohatenin'ny HTTP. Nampiharina tamin'ny fampiasana DestinationRules.
DestinationRules
taorian'ny VirtualService nandefa fangatahana tany amin'ny serivisy irina, amin'ny fampiasana DestinationRules dia azontsika atao ny mamaritra ny politika izay hampiharina amin'ny fifamoivoizana natokana ho an'ity serivisy ity:

Fitantanana ny fifamoivoizana miaraka amin'ny loharanon'i Istio
fanamarihana: Ny fiantraikan'ny loharanon-karena Istio amin'ny fifamoivoizana amin'ny tambajotra dia aseho eto amin'ny fomba mora azo. Raha ny marina, ny fanapahan-kevitra momba ny fandefasana ny fangatahana dia ataon'ny iraka ao amin'ny vavahadin'ny Ingress voarindra ao amin'ny CRD.
Miaraka amin'ny Lalàn'ny Destination, dia afaka manitsy ny fampifandanjana entana izahay mba hampiasana ny hash tsy miovaova ary hiantoka fa mamaly mpampiasa iray ihany ny ohatra serivisy mitovy. Ity fanitsiana manaraka ity dia ahafahanao manatratra izany ():
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-frontend
spec:
host: sa-frontend
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: version # 1 1 - hash dia hatsangana mifototra amin'ny votoatin'ny lohatenin'ny HTTP version.
Ampiharo ny fanamafisana amin'ny baiko manaraka:
$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created Ataovy izao ny baiko etsy ambany ary ataovy azo antoka fa mahazo ny rakitra mety ianao rehefa mamaritra ny lohateny version:
$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep mainfanamarihana: Mba hanampiana soatoavina samihafa ao amin'ny lohapejy sy hizaha toetra ny valiny mivantana amin'ny navigateur dia azonao ampiasaina mankany Chrome (na ho an'ny Firefox - eo ho eo. transl.).
Amin'ny ankapobeny, DestinationRules dia manana fahaiza-manao bebe kokoa amin'ny sehatry ny fampifandanjana entana - jereo ny antsipiriany ao .
Alohan'ny handinihana bebe kokoa ny VirtualService, andao hamafa ny "dikan-teny maitso" amin'ny fampiharana sy ny fitsipika momba ny fifamoivoizana mifandraika amin'izany amin'ny alàlan'ny fampandehanana ireto baiko manaraka ireto:
$ 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” deletedMirroring: Serivisy virtoaly amin'ny fampiharana
Alokaloka (“miaro”) na Mirroring (“famirapiratana”) ampiasaina amin'ny tranga izay tiantsika ny hitsapa fiovana eo amin'ny famokarana nefa tsy misy fiantraikany amin'ny mpampiasa farany: hanaovana izany, dia adikantsika ("fitaratra") ny fangatahana amin'ny tranga faharoa izay nanaovana ny fanovana irina, ary mijery ny vokany. Raha tsorina dia izao no fotoana isafidianan'ny mpiara-miasa aminao ny olana manakiana indrindra ary manao fangatahana misintona amin'ny endrika vongan-tany be dia be izay tsy misy afaka mamerina izany.
Mba hitsapana an'ity toe-javatra ity amin'ny hetsika, andao hamorona ohatra faharoa amin'ny SA-Logic misy bibikely (buggy) amin'ny alàlan'ny baiko manaraka:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created Ary ankehitriny andeha hojerentsika ny baiko mba hahazoana antoka fa ny tranga rehetra miaraka amin'ny app=sa-logic Manana etikety miaraka amin'ny dikan-teny mifanaraka amin'izany koa izy ireo:
$ 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 fanompoana sa-logic mikendry pods misy marika app=sa-logic, ka ny fangatahana rehetra dia hozaraina amin'ny tranga rehetra:

... fa tianay ny handefasana fangatahana amin'ny tranga v1 ary hotaratra amin'ny tranga v2:

Ho tratrantsika izany amin'ny alàlan'ny VirtualService miaraka amin'ny DestinationRule, izay ahafahan'ny fitsipika mamaritra ny ampahany sy ny làlan'ny VirtualService mankany amin'ny ampahany manokana.
Famaritana ny sobika ao amin'ny fitsipiky ny toerana haleha
Sombiny (sombiny) dia voafaritra amin'ny alalan'ity configuration manaraka ity ():
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- mpampiantrano (
host) dia mamaritra fa ity fitsipika ity dia mihatra amin'ny tranga rehefa mankany amin'ny serivisy ihany ny lalanasa-logic; - Lohateny (
name) ny zana-tsipìka dia ampiasaina rehefa mitondra mankany amin'ny tranga subset; - Label (
label) dia mamaritra ny tsiroaroa manan-danja izay tsy maintsy mifanandrify ny tranga mba ho anisan'ny ampahany.
Ampiharo ny fanamafisana amin'ny baiko manaraka:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic createdAmin'izao fotoana izao dia voafaritra ny sobika, afaka mandroso sy manamboatra ny VirtualService isika hampihatra fitsipika amin'ny fangatahana amin'ny sa-logic ka:
- Hiverina any amin'ny subset
v1, - Hiverina any amin'ny subset
v2.
Ity manifesto manaraka ity dia ahafahanao manatratra ny drafitrao ():
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: v2Tsy misy fanazavana ilaina eto, ka aleo hojerentsika fotsiny izany:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic createdAndeha ampio ny entana amin'ny fiantsoana ity baiko manaraka ity:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done Andeha hojerentsika ny valiny ao amin'ny Grafana, izay ahitanao fa ny dikan-teny misy bibikely (buggy) dia miteraka tsy fahombiazana ho an'ny ~60% amin'ny fangatahana, saingy tsy misy amin'ireo tsy fahombiazana ireo no misy fiantraikany amin'ny mpampiasa farany rehefa mamaly azy ireo amin'ny serivisy mandeha.

Valiny mahomby amin'ny dikan-teny samihafa amin'ny serivisy sa-logic
Eto izahay dia nahita voalohany ny fomba ampiharana ny VirtualService amin'ny iraky ny serivisy: rahoviana sa-web-app manao fangatahana sa-logic, mandeha amin'ny alàlan'ny Envoy sidecar, izay - amin'ny alàlan'ny VirtualService - dia namboarina mba handefasana ny fangatahana mankany amin'ny subset v1 ary mitaratra ny fangatahana mankany amin'ny subset v2 amin'ny serivisy. sa-logic.
Fantatro, mety efa mieritreritra ianao fa tsotra ny serivisy virtoaly. Ao amin'ny fizarana manaraka dia hanitatra izany isika amin'ny filazana fa tena tsara koa izy ireo.
Famoahana Canary
Ny Canary Deployment dia ny dingan'ny famoahana dikan-teny vaovao amin'ny mpampiasa vitsivitsy. Ampiasaina mba hahazoana antoka fa tsy misy olana amin'ny famoahana ary aorian'izay, efa matoky ny kalitaony (famoahana), mizara izany amin'ny mpampiasa hafa.оmpihaino lehibe kokoa.
Mba hampisehoana ny fandefasana canary, dia hanohy hiasa miaraka amin'ny ampahany kely izahay buggy у sa-logic.
Aza mandany fotoana amin'ny zavatra tsy misy dikany ary mandefa avy hatrany ny 20% amin'ny mpampiasa amin'ny dikan-teny misy bibikely (izany dia hisolo tena ny canary rollout), ary ny 80% sisa amin'ny serivisy mahazatra. Mba hanaovana izany, ampiasao ity VirtualService manaraka ity ():
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 ny lanja (weight), izay mamaritra ny isan-jaton'ny fangatahana izay hiantefa amin'ny mpandray na ampahany amin'ny mpandray.
Andao hanavao ny teo aloha VirtualService configuration for sa-logic miaraka amin'ity baiko manaraka ity:
$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured... ary ho hitantsika avy hatrany fa mitarika tsy fahombiazana ny fangatahana sasany:
$ 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: 500Ny serivisy virtoaly dia mamela ny famoahana canary: Amin'ity tranga ity, dia nahenanay ho 20% amin'ny fototry ny mpampiasa ny mety ho fiantraikan'ny olana. Mahafinaritra! Ankehitriny, amin'ny toe-javatra rehetra rehefa tsy azontsika antoka ny kaodinay (amin'ny teny hafa - foana ...), dia afaka mampiasa ny fitaratra sy ny canary rollouts.
Fotoana tapitra sy andrana indray
Saingy ny bibikely dia tsy miafara amin'ny kaody. Ao amin'ny lisitry ny ""Ny toerana voalohany dia ny finoana diso fa" azo itokisana ny tambajotra. Raha ny marina dia ny tambajotra tsy azo itokisana, ary noho izany antony izany dia mila fotoana fiatoana isika (fotoana farany) ary manandrana indray (andrana indray).
Ho an'ny fampisehoana dia hanohy hampiasa ilay olana mitovy amin'izany izahay sa-logic (buggy), ary hanao simulation ny tsy fahatokisana ny tambajotra miaraka amin'ny tsy fahombiazana kisendrasendra.
Avelao ny serivisintsika miaraka amin'ny bibikely manana vintana 1/3 haharitra ela loatra vao hamaly, vintana 1/3 hifarana amin'ny Error Server anatiny, ary vintana 1/3 hamerenana ny pejy.
Mba hanalefahana ny fiantraikan'ny olana toy izany sy hanatsara ny fiainana ho an'ny mpampiasa dia afaka:
- ampio fe-potoana raha maharitra mihoatra ny 8 segondra ny serivisy vao mamaly,
- andramo indray raha tsy mahomby ny fangatahana.
Ho fampiharana dia hampiasa ity famaritana loharano manaraka ity izahay ():
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- Ny fiafaran'ny fangatahana dia apetraka ho 8 segondra;
- Averina in-3 ny fangatahana;
- Ary ny andrana tsirairay dia heverina ho tsy nahomby raha mihoatra ny 3 segondra ny fotoana famaliana.
Fanamafisana izany satria tsy mila miandry mihoatra ny 8 segondra ny mpampiasa ary hanao fanandramana vaovao telo izahay mba hahazoana valiny raha sendra tsy fahombiazana, hampitombo ny fahafahan'ny valiny mahomby.
Ampiharo ny fanovana nohavaozina miaraka amin'ity baiko manaraka ity:
$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configuredAry jereo ao amin'ny grafika Grafana fa nitombo ny isan'ny valiny nahomby:

Fanatsarana ny antontan'isa valiny mahomby taorian'ny nampiana fotoana fiatoana sy andrana indray
Alohan'ny hirosoana amin'ny fizarana manaraka (na ny marimarina kokoa, mankany amin'ny ampahany manaraka amin'ny lahatsoratra, satria amin'ity dia tsy hisy fanandramana azo ampiharina intsony - eo ho eo amin'ny transl.), mamafa sa-logic-buggy ary VirtualService amin'ny alàlan'ny fampandehanana ireto baiko manaraka ireto:
$ kubectl delete deployment sa-logic-buggy
deployment.extensions “sa-logic-buggy” deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io “sa-logic” deletedFomba fiatoana amin'ny circuit breaker sy headhead
Miresaka lamina roa manan-danja amin'ny maritrano microservice izahay izay ahafahanao manatratra ny fahasitranana (fanasitranana tena) tolotra.
Circuit Breaker ("mpamoaka rivotra") ampiasaina hanajanonana ny fangatahana tonga amin'ny ohatra iray amin'ny serivisy iray izay heverina ho tsy salama ary mamerina azy io raha toa kosa ny fangatahan'ny mpanjifa dia averina mankany amin'ny tranga salama amin'io serivisy io (izay mampitombo ny isan-jaton'ny valiny mahomby). (Fanamarihana: Misy famaritana amin'ny antsipiriany kokoa ny lamina azo jerena, ohatra, .)
Bulkhead ("fizarana") manasaraka ny tsy fahombiazan'ny serivisy tsy hisy fiantraikany amin'ny rafitra manontolo. Ohatra, tapaka ny Serivisy B ary misy serivisy hafa (mpanjifa an'ny serivisy B) manao fangatahana amin'ny serivisy B, ka mahatonga azy ho reraka ny dobo filomanosana ary tsy afaka manompo fangatahana hafa (na dia tsy avy amin'ny serivisy B aza). (Fanamarihana: Misy famaritana amin'ny antsipiriany kokoa ny lamina azo jerena, ohatra, .)
Hafoiko ny antsipirian'ny fampiharana ireo lamina ireo satria mora hita ao , ary tena tiako koa ny mampiseho ny fanamarinana sy ny fanomezan-dàlana, izay horesahina ao amin'ny tapany manaraka amin'ny lahatsoratra.
PS avy amin'ny mpandika teny
Vakio ihany koa ao amin'ny bilaoginay:
- "Miverena amin'ny microservices miaraka amin'i Istio": , ;
- «";
- «".
Source: www.habr.com
