Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

PiezÄ«me. tulk.: Pakalpojumu tÄ«kli noteikti ir kļuvuÅ”i par atbilstoÅ”u risinājumu mÅ«sdienu infrastruktÅ«rā lietojumprogrammām, kas seko mikropakalpojumu arhitektÅ«rai. Lai gan Istio var runāt par daudziem DevOps inženieriem, tas ir diezgan jauns produkts, kas, lai gan tas ir visaptveroÅ”s tā sniegto iespēju ziņā, var prasÄ«t ievērojamu laiku, lai iepazÄ«tos ar to. Vācu inženieris Rinors Maloku, kurÅ” telekomunikāciju uzņēmumā Orange Networks ir atbildÄ«gs par mākoņdatoÅ”anu lielajiem klientiem, ir uzrakstÄ«jis brÄ«niŔķīgu materiālu sēriju, kas ļauj ātri un dziļi ienirt Istio. ViņŔ sāk savu stāstu ar to, ko Istio vispār spēj un kā to var ātri redzēt savām acÄ«m.

Istio ā€” Atvērtā pirmkoda projekts, kas izstrādāts sadarbÄ«bā ar Google, IBM un Lyft komandām. Tas atrisina sarežģījumus, kas rodas uz mikropakalpojumiem balstÄ«tās lietojumprogrammās, piemēram:

  • Satiksmes vadÄ«ba: taimauts, atkārtojumi, slodzes lÄ«dzsvaroÅ”ana;
  • DroŔība: galalietotāja autentifikācija un autorizācija;
  • NovērojamÄ«ba: izsekoÅ”ana, uzraudzÄ«ba, mežizstrāde.

To visu var atrisināt lietojumprogrammas lÄ«menÄ«, bet pēc tam jÅ«su pakalpojumi vairs nebÅ«s "mikro". Visas papildu pÅ«les, lai atrisinātu Ŕīs problēmas, ir uzņēmuma resursu izŔķērdÄ“Å”ana, ko varētu tieÅ”i izmantot biznesa vērtÄ«bai. ApskatÄ«sim piemēru:

Projekta vadītājs: Cik ilgs laiks nepiecieŔams, lai pievienotu atsauksmju funkciju?
Izstrādātājs: divi sprinti.

MP: Ko?.. Tas ir vienkārŔi CRUD!
R: CRUD veikÅ”ana ir vienkārŔāka daļa, taču mums joprojām ir jāautentificē un jāautorizē lietotāji un pakalpojumi. Tā kā tÄ«kls ir neuzticams, jums bÅ«s jāievieÅ” atkārtoti pieprasÄ«jumi, kā arÄ« ķēdes pārtraucēja modelis klientos. Tāpat, lai pārliecinātos, ka visa sistēma neavārē, jums bÅ«s nepiecieÅ”ami noildzes un starpsienas (sÄ«kāku informāciju par abiem minētajiem modeļiem skatÄ«t vēlāk rakstā - apm. tulk.)un, lai atklātu problēmas, uzraudzÄ«bu, izsekoÅ”anu, [ā€¦]

MP: Ak, tad vienkārŔi ievietosim Ŕo funkciju produkta pakalpojumā.

Domāju, ka ideja ir skaidra: viena pakalpojuma pievienoÅ”anai nepiecieÅ”amais soļu un pūļu apjoms ir milzÄ«gs. Å ajā rakstā mēs apskatÄ«sim, kā Istio no pakalpojumiem novērÅ” visu iepriekÅ” minēto sarežģītÄ«bu (kas nav paredzēta kā biznesa loÄ£ika).

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

PiezÄ«me: Å ajā rakstā tiek pieņemts, ka jums ir darba zināŔanas par Kubernetes. Citādi iesaku lasÄ«t mans ievads Kubernetes un tikai pēc tam turpiniet lasÄ«t Å”o materiālu.

Istio ideja

Pasaulē, kurā nav Istio, viens pakalpojums veic tieÅ”us pieprasÄ«jumus citam, un kļūmes gadÄ«jumā pakalpojumam tas ir jārisina paÅ”am: jāveic jauns mēģinājums, jānodroÅ”ina taimauts, jāatver ķēdes pārtraucējs utt.

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
TÄ«kla trafika Kubernetes

Istio piedāvā specializētu risinājumu, kas ir pilnībā atdalīts no pakalpojumiem un darbojas, traucējot tīkla saziņu. Un tādējādi tas īsteno:

  • kļūdu tolerance: pamatojoties uz statusa kodu atbildē, tas saprot, vai pieprasÄ«jums neizdevās, un izpilda to atkārtoti.
  • Kanārijputniņi: novirza tikai noteiktu procentuālo daļu pieprasÄ«jumu uz jauno pakalpojuma versiju.
  • UzraudzÄ«ba un metrika: Cik ilgs laiks pagāja, lÄ«dz pakalpojums atbildēja?
  • IzsekoÅ”ana un novērojamÄ«ba: katram pieprasÄ«jumam pievieno Ä«paÅ”as galvenes un izseko tām visā klasterÄ«.
  • DroŔība: izgÅ«st JWT marÄ·ieri, autentificē un autorizē lietotājus.

Å Ä«s ir tikai dažas no iespējām (tieŔām tikai dažas!), lai jÅ«s ieintriģētu. Tagad iedziļināsimies tehniskajās detaļās!

Istio arhitektūra

Istio pārtver visu tīkla trafiku un piemēro tam noteikumu kopumu, ievietojot viedo starpniekserveri blakusvāģa konteinera formā katrā podā. Starpniekserveri, kas aktivizē visas iespējas, veido a Datu plakne, un tos var dinamiski konfigurēt, izmantojot Vadības plakne.

Datu plakne

PākstÄ«m ievietotie starpniekserveri ļauj Istio viegli izpildÄ«t mums nepiecieÅ”amās prasÄ«bas. Piemēram, pārbaudÄ«sim atkārtotā mēģinājuma un ķēdes pārtraucēja funkcijas.

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
Kā programmā Envoy tiek īstenoti atkārtojumi un ķēdes pārtraukumi

Rezumējot:

  1. sÅ«tnis (mēs runājam par starpniekserveri, kas atrodas blakusvāģa konteinerā, kas tiek izplatÄ«ts kā atseviŔķs produkts ā€” apm. tulk.) nosÅ«ta pieprasÄ«jumu pakalpojuma B pirmajai instancei un neizdodas.
  2. Sūtnis blakusvāģis mēģina vēlreiz (mēģināt vēlreiz). (1)
  3. Pieprasījums neizdodas un tiek atgriezts starpniekserverim, kas to izsauca.
  4. Tas atver Circuit Breaker un izsauc nākamo pakalpojumu, lai saņemtu turpmākus pieprasījumus. (2)

Tas nozÄ«mē, ka jums nav jāizmanto cita Retry bibliotēka, jums nav paÅ”am jāīsteno Circuit Breaking un Service Discovery programmÄ“Å”anas valodā X, Y vai Z. Tas viss un daudz kas cits ir pieejams jau no iepakojuma. Istio un neprasa nē izmaiņas kodā.

Lieliski! Tagad jÅ«s varētu vēlēties doties ceļojumā ar Istio, bet jums joprojām ir dažas Å”aubas, atklāti jautājumi. Ja tas ir universāls risinājums visiem dzÄ«ves gadÄ«jumiem, tad jums ir dabiskas aizdomas: galu galā visi Ŕādi risinājumi patiesÄ«bā izrādās nepiemēroti jebkuram gadÄ«jumam.

Un visbeidzot jūs jautājat: "Vai tas ir pielāgojams?"

Tagad esi gatavs jūras braucienam, iepazīsimies ar Vadības lidmaŔīnu.

Vadības plakne

Tas sastāv no trim sastāvdaļām: pilots, Mikseris Šø Citadele, kas strādā kopā, lai konfigurētu sÅ«tņus, lai marÅ”rutētu satiksmi, ieviestu politikas un apkopotu telemetrijas datus. Shematiski tas viss izskatās Ŕādi:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
Vadības plaknes mijiedarbība ar datu plakni

SÅ«tņi (t.i., datu plakne) tiek konfigurēti, izmantojot Kubernetes CRD (Pielāgotas resursu definÄ«cijas), ko definējis Istio un kas Ä«paÅ”i paredzēts Å”im nolÅ«kam. Tas jums nozÄ«mē to, ka tie Ŕķiet tikai vēl viens Kubernetes resurss ar pazÄ«stamu sintaksi. Kad resurss ir izveidots, to paņems vadÄ«bas plakne un izmantos sÅ«tņiem.

Pakalpojumu saistība ar Istio

Mēs esam aprakstÄ«juÅ”i Istio attiecÄ«bas ar pakalpojumiem, bet ne otrādi: kā pakalpojumi ir saistÄ«ti ar Istio?

Godīgi sakot, dienesti apzinās Istio klātbūtni tikpat labi kā zivis, kad viņi sev jautā: "Kas vispār ir ūdens?"

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
Ilustrācija Viktorija Dimitrakopulosa: - Kā tev patīk ūdens? - Kas vispār ir ūdens?

Tādējādi jÅ«s varat paņemt strādājoÅ”u klasteru un pēc Istio komponentu izvietoÅ”anas tajā esoÅ”ie servisi turpinās strādāt, un pēc Å”o komponentu noņemÅ”anas viss atkal bÅ«s kārtÄ«bā. Ir skaidrs, ka Å”ajā gadÄ«jumā jÅ«s zaudēsiet Istio sniegtās iespējas.

Pietiek teorijas ā€“ pielietosim Ŕīs zināŔanas praksē!

Istio praksē

Istio ir nepiecieÅ”ams Kubernetes klasteris ar vismaz 4 vCPU un 8 GB RAM. Lai ātri iestatÄ«tu kopu un izpildÄ«tu rakstā sniegtos norādÄ«jumus, iesaku izmantot Google Cloud Platform, kas piedāvā jauniem lietotājiem bezmaksas 300 USD.

Pēc klastera izveides un piekļuves Kubernetes konfigurÄ“Å”anas, izmantojot konsoles utilÄ«tu, varat instalēt Istio, izmantojot Helm pakotņu pārvaldnieku.

Stūres uzstādīŔana

Instalējiet Helm klientu savā datorā, kā aprakstÄ«ts sadaļā oficiālā dokumentācija. Mēs to izmantosim, lai nākamajā sadaļā Ä£enerētu veidnes Istio instalÄ“Å”anai.

Istio instalēŔana

Lejupielādējiet Istio resursus no jaunākais izlaidums (sākotnējā autora saite uz versiju 1.0.5 ir nomainÄ«ta uz paÅ”reizējo, t.i., 1.0.6 - apm. tulk.), izvelciet saturu vienā direktorijā, kuru turpmāk saukÅ”u [istio-resources].

Lai viegli identificētu Istio resursus, izveidojiet nosaukumvietu K8s klasterī istio-system:

$ kubectl create namespace istio-system

Pabeidziet instalēŔanu, dodoties uz direktoriju [istio-resources] un izpildiet komandu:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

Å Ä« komanda failā izvadÄ«s galvenos Istio komponentus istio.yaml. Mēs modificējām standarta veidni, lai tā atbilstu sev, norādot Ŕādus parametrus:

  • global.mtls.enabled uzstādÄ«ts iekŔā false (t.i., mTLS autentifikācija ir atspējota ā€” apm.)lai vienkārÅ”otu mÅ«su iepazÄ«Å”anās procesu;
  • tracing.enabled ietver pieprasÄ«jumu izsekoÅ”anu, izmantojot Jaeger;
  • kiali.enabled instalē Kiali klasterÄ«, lai vizualizētu pakalpojumus un trafiku;
  • grafana.enabled instalē Grafana, lai vizualizētu savāktos rādÄ«tājus.

Izmantosim ģenerētos resursus ar komandu:

$ kubectl apply -f istio.yaml

Istio instalÄ“Å”ana klasterÄ« ir pabeigta! Pagaidiet, lÄ«dz visi podi ir nosaukumvietā istio-system varēs Running vai Completedizpildot tālāk norādÄ«to komandu:

$ kubectl get pods -n istio-system

Tagad mēs esam gatavi turpināt darbu nākamajā sadaļā, kur mēs aktivizēsim lietojumprogrammu.

Sentimenta analīzes lietojumprogrammas arhitektūra

Izmantosim jau minētajā lietotās Sentiment Analysis mikropakalpojumu lietojumprogrammas piemēru Ievadraksts Kubernetes. Tas ir pietiekami sarežģīts, lai praksē parādītu Istio iespējas.

Lietojumprogramma sastāv no četriem mikropakalpojumiem:

  1. ApkalpoŔana SA-Frontend, kas apkalpo Reactjs lietojumprogrammas priekŔgalu;
  2. ApkalpoÅ”ana SA-WebApp, kas apkalpo noskaņojuma analÄ«zes vaicājumus;
  3. ApkalpoŔana SA-Logic, kas veic pati sentimenta analīze;
  4. ApkalpoÅ”ana SA-Atsauksmes, kas saņem atsauksmes no lietotājiem par analÄ«zes precizitāti.

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

Å ajā diagrammā papildus pakalpojumiem mēs redzam arÄ« ieejas kontrolieri, kas Kubernetes marÅ”rutē ienākoÅ”os pieprasÄ«jumus uz attiecÄ«gajiem pakalpojumiem. Istio savā Ingress Gateway izmanto lÄ«dzÄ«gu koncepciju, par kuru sÄ«kāka informācija sekos.

Lietojumprogrammas palaiŔana ar starpniekserveri no Istio

Lai veiktu turpmākas rakstā minētās darbības, klonējiet savu repozitoriju istio-meistarība. Tas satur Kubernetes un Istio lietojumprogrammu un manifestus.

Blakusvāģu ievietoŔana

IevietoŔanu var veikt automātiski vai ar rokām. Lai automātiski ievietotu blakusvāģa konteinerus, nosaukumvietai būs jāiestata etiķete istio-injection=enabled, kas tiek darīts ar Ŕādu komandu:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

Tagad katrs pods, kas tiks izvietots noklusējuma nosaukumvietā (default) saņems savu blakusvāģa konteineru. Lai to pārbaudÄ«tu, izvietosim testa lietojumprogrammu, dodoties uz repozitorija saknes direktoriju [istio-mastery] un palaižot Ŕādu komandu:

$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created

Pēc pakalpojumu izvietoÅ”anas pārbaudÄ«sim, vai podiem ir divi konteineri (ar paÅ”u pakalpojumu un tā blakusvāģi), izpildot komandu kubectl get pods un pārliecinoties, ka zem kolonnas READY norādÄ«tā vērtÄ«ba 2/2, kas simbolizē, ka darbojas abi konteineri:

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sa-feedback-55f5dc4d9c-c9wfv   2/2       Running   0          12m
sa-frontend-558f8986-hhkj9     2/2       Running   0          12m
sa-logic-568498cb4d-2sjwj      2/2       Running   0          12m
sa-logic-568498cb4d-p4f8c      2/2       Running   0          12m
sa-web-app-599cf47c7c-s7cvd    2/2       Running   0          12m

Vizuāli tas izskatās Ŕādi:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
Sūtņa starpniekserveris vienā no podiem

Tagad, kad lietojumprogramma ir izveidota un darbojas, mums būs jāļauj ienākoŔajai trafikai ienākt lietojumprogrammā.

Ieejas vārteja

Labākā prakse, lai to panāktu (atļaut trafiku klasterÄ«), ir cauri Ieejas vārteja Istio, kas atrodas klastera ā€œmalāā€ un ļauj iespējot Istio funkcijas, piemēram, marÅ”rutÄ“Å”anu, slodzes lÄ«dzsvaroÅ”anu, droŔību un ienākoŔās trafika uzraudzÄ«bu.

Istio instalÄ“Å”anas laikā klasterÄ« tika instalēts Ingress Gateway komponents un pakalpojums, kas to pārsÅ«ta ārēji. Lai uzzinātu pakalpojuma ārējo IP adresi, palaidiet:

$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP
istio-ingressgateway   LoadBalancer   10.0.132.127   13.93.30.120

Mēs turpināsim piekļūt lietojumprogrammai, izmantojot Å”o IP (es to saukÅ”u kā EXTERNAL-IP), tāpēc ērtÄ«bas labad mēs ierakstÄ«sim vērtÄ«bu mainÄ«gajā:

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

Ja mēģināsit piekļūt Å”im IP, izmantojot pārlÅ«kprogrammu, jÅ«s saņemsit kļūdu Pakalpojums nav pieejams, jo pēc noklusējuma Istio bloķē visu ienākoÅ”o trafiku, Vārteja vēl nav definēta.

Vārtejas resurss

Vārteja ir Kubernetes CRD (pielāgota resursu definÄ«cija), kas definēta pēc Istio instalÄ“Å”anas klasterÄ« un dod iespēju norādÄ«t portus, protokolu un saimniekdatorus, kuriem mēs vēlamies atļaut ienākoÅ”o trafiku.

MÅ«su gadÄ«jumā mēs vēlamies atļaut HTTP trafiku 80. portā visiem saimniekiem. Uzdevums tiek Ä«stenots ar Ŕādu definÄ«ciju (http-gateway.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

Å ai konfigurācijai nav nepiecieÅ”ams paskaidrojums, izņemot selektoru istio: ingressgateway. Ar Å”o atlasÄ«tāju mēs varam norādÄ«t, kurai ieejas vārtejai lietot konfigurāciju. MÅ«su gadÄ«jumā tas ir Ingress Gateway kontrolleris, kas Istio tika instalēts pēc noklusējuma.

Konfigurācija tiek piemērota, izsaucot Ŕādu komandu:

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

Tagad vārteja ļauj piekļūt 80. portam, taču tam nav ne jausmas, kur novirzÄ«t pieprasÄ«jumus. Å im nolÅ«kam jums bÅ«s nepiecieÅ”ams Virtuālie pakalpojumi.

Virtuālā pakalpojuma resurss

Virtuālais pakalpojums norāda ieejas vārtejai, kā marÅ”rutēt pieprasÄ«jumus, kas ir atļauti klasterÄ«.

Pieprasījumi mūsu lietojumprogrammai, kas tiek saņemti, izmantojot http-gateway, ir jānosūta sa-frontend, sa-web-app un sa-feedback pakalpojumiem:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
MarÅ”ruti, kas jākonfigurē, izmantojot VirtualServices

Apskatīsim pieprasījumus, kas jānosūta SA-Frontend:

  • PrecÄ«za sakritÄ«ba pa ceļam / jānosÅ«ta uz SA-Frontend, lai iegÅ«tu index.html;
  • Prefiksi ceļi /static/* jānosÅ«ta uz SA-Frontend, lai saņemtu priekÅ”galā izmantotos statiskos failus, piemēram, CSS un JavaScript;
  • Ceļi, kas atbilst regulārai izteiksmei '^.*.(ico|png|jpg)$', jānosÅ«ta uz SA-Frontend, jo Å ie ir lapā redzamie attēli.

IevieŔana tiek panākta ar Ŕādu konfigurāciju (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

Svarīgi punkti:

  1. Šis virtuālais pakalpojums attiecas uz pieprasījumiem, kas tiek saņemti http-vārteja;
  2. Š’ destination Tiek noteikts pakalpojums, kuram tiek nosÅ«tÄ«ti pieprasÄ«jumi.

PiezÄ«me: iepriekÅ” minētā konfigurācija tiek saglabāta failā sa-virtualservice-external.yaml, kas satur arÄ« iestatÄ«jumus marÅ”rutÄ“Å”anai programmās SA-WebApp un SA-Feedback, taču Ä«suma labad tas Å”eit ir saÄ«sināts.

Pieteiksim VirtualService, zvanot:

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

PiezÄ«me: Kad mēs patērējam Istio resursus, Kubernetes API serveris izveido notikumu, ko saņem Istio vadÄ«bas plakne, un pēc tam jaunā konfigurācija tiek lietota katra poda Envoy starpniekserveriem. Un Ingress Gateway kontrolleris, Ŕķiet, ir vēl viens sÅ«tnis, kas konfigurēts vadÄ«bas plaknē. Diagrammā tas viss izskatās Ŕādi:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
Istio-IngressGateway konfigurācija pieprasÄ«juma marÅ”rutÄ“Å”anai

Sentimenta analÄ«zes lietojumprogramma tagad ir pieejama vietnē http://{EXTERNAL-IP}/. Neuztraucieties, ja saņemat statusu Nav atrasts: Dažreiz paiet nedaudz ilgāks laiks, lÄ«dz konfigurācija stājas spēkā un sÅ«tņa keÅ”atmiņas tiek atjauninātas.

Pirms turpināt, nedaudz spēlējiet ar lietotni, lai radÄ«tu trafiku. (tā klātbÅ«tne ir nepiecieÅ”ama skaidrÄ«bas labad turpmākajās darbÄ«bās - apm. tulk.).

Kiali: novērojamība

Lai nokļūtu Kiali administratÄ«vajā saskarnē, palaidiet Ŕādu komandu:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

... un atvērts http://localhost:20001/, piesakoties kā admin/admin. Å eit jÅ«s atradÄ«siet daudzas noderÄ«gas funkcijas, piemēram, lai pārbaudÄ«tu Istio komponentu konfigurāciju, vizualizētu pakalpojumus, izmantojot informāciju, kas savākta, pārtverot tÄ«kla pieprasÄ«jumus, saņemtu atbildes uz jautājumiem ā€œKas ar ko sazinās?ā€, ā€œKura pakalpojuma versija ir pieejama. neveiksmes?ā€ un tā tālāk. VispārÄ«gi izpētiet Kiali iespējas, pirms pāriet pie metrikas vizualizācijas ar Grafana.

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

Grafana: metrikas vizualizācija

Istio apkopotā metrika tiek iekļauta Prometheus un tiek vizualizēta ar Grafana. Lai piekļūtu Grafana administratīvajam interfeisam, palaidiet tālāk norādīto komandu un pēc tam atveriet http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

NoklikŔķinot uz izvēlnes Sākumlapa augŔējā kreisajā stÅ«rÄ« un atlasot Istio pakalpojumu informācijas panelis augŔējā kreisajā stÅ«rÄ« sāciet ar apkalpoÅ”anu sa-web-applai apskatÄ«tu apkopotos rādÄ«tājus:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

Šeit mūs sagaida tukŔa un pilnīgi garlaicīga izrāde - vadība to nekad neapstiprinās. Izveidosim nelielu slodzi ar Ŕādu komandu:

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

Tagad mums ir daudz jaukāki grafiki un papildus tiem brÄ«niŔķīgi Prometheus rÄ«ki uzraudzÄ«bai un Grafana metrikas vizualizācijai, kas ļaus mums uzzināt par veiktspēju, veselÄ«bu, pakalpojumu uzlabojumiem / pasliktināŔanos laika gaitā.

Visbeidzot, apskatīsim pakalpojumu izsekoŔanas pieprasījumus.

Jēgers: izsekoÅ”ana

Mums bÅ«s nepiecieÅ”ama izsekoÅ”ana, jo jo vairāk pakalpojumu mums ir, jo grÅ«tāk ir atrast neveiksmes cēloni. ApskatÄ«sim vienkārÅ”u gadÄ«jumu no tālāk redzamā attēla:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
Tipisks nejauÅ”a neveiksmÄ«ga pieprasÄ«juma piemērs

PieprasÄ«jums nāk, krÄ«t - kāds ir iemesls? Pirmais serviss? Vai arÄ« otrais? Abos ir izņēmumi ā€“ apskatÄ«sim katra žurnālu. Cik bieži esat pieķēris sevi to darām? MÅ«su darbs vairāk lÄ«dzinās programmatÅ«ras detektÄ«viem, nevis izstrādātājiem...

Tā ir izplatÄ«ta problēma mikropakalpojumos, un to risina izkliedētās izsekoÅ”anas sistēmas, kurās pakalpojumi viens otram nodod unikālu galveni, pēc kura Ŕī informācija tiek pārsÅ«tÄ«ta uz izsekoÅ”anas sistēmu, kur tā tiek salÄ«dzināta ar pieprasÄ«juma datiem. Å eit ir ilustrācija:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
TraceId tiek izmantots, lai identificētu pieprasījumu

Istio izmanto Jaeger Tracer, kas ievieÅ” no pārdevēja neatkarÄ«gu OpenTracing API ietvaru. Jaeger lietotāja interfeisam varat piekļūt ar Ŕādu komandu:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

Tagad dodieties uz http://localhost:16686/ un izvēlieties pakalpojumu sa-web-app. Ja pakalpojums netiek rādÄ«ts nolaižamajā izvēlnē, parādiet/Ä£enerējiet lapā darbÄ«bu un atjauniniet saskarni. Pēc tam noklikŔķiniet uz pogas Atrodiet pēdas, kurā bÅ«s redzamas jaunākās pēdas - atlasiet jebkuru - parādÄ«sies detalizēta informācija par visām pēdām:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa

Šī pēda parāda:

  1. PieprasÄ«jums ienāk istio-ingressgateway (Ŕī ir pirmā mijiedarbÄ«ba ar vienu no pakalpojumiem, un pieprasÄ«jumam tiek Ä£enerēts izsekoÅ”anas ID), pēc kura vārteja nosÅ«ta pieprasÄ«jumu pakalpojumam sa-web-app.
  2. Servisā sa-web-app pieprasÄ«jumu paņem sÅ«tņa blakusvāģis, laidumā tiek izveidots ā€œbērnsā€ (tāpēc mēs to redzam pēdās) un novirzÄ«ts uz konteineru sa-web-app. (SprÄ«dis - loÄ£iskā darba vienÄ«ba Jēgerā, kurai ir nosaukums, operācijas sākuma laiks un ilgums. Laidumus var ligzdot un sakārtot. VirzÄ«ts aciklisks laidumu grafiks veido pēdu. ā€” apm. tulk.)
  3. Å eit pieprasÄ«jums tiek apstrādāts pēc metodes sentimenta analÄ«ze. Å Ä«s pēdas jau ir Ä£enerētas lietojumprogrammā, t.i. viņiem bija nepiecieÅ”amas koda izmaiņas.
  4. No Ŕī brīža tiek uzsākts POST pieprasÄ«jums sa-loÄ£ika. IzsekoÅ”anas ID ir jāpārsÅ«ta no sa-web-app.
  5. ...

PiezÄ«me: 4. darbÄ«bā lietojumprogrammai ir jāredz Istio Ä£enerētās galvenes un jānosÅ«ta tās nākamajiem pieprasÄ«jumiem, kā parādÄ«ts tālāk esoÅ”ajā attēlā:

Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
(A) Istio ir atbildÄ«gs par galveņu pārsÅ«tÄ«Å”anu; (B) Pakalpojumi ir atbildÄ«gi par galvenēm

Istio veic lielāko daļu darba, jo... Ä£enerē ienākoÅ”o pieprasÄ«jumu galvenes, katrā blakusaprÅ«pē izveido jaunus posmus un pārsÅ«ta tos. Tomēr, nestrādājot ar galvenēm pakalpojumos, tiks zaudēts viss pieprasÄ«juma izsekoÅ”anas ceļŔ.

Jāņem vērā Ŕādas galvenes:

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

Tas nav sarežģīts uzdevums, taču, lai vienkārÅ”otu tā ievieÅ”anu, tas jau ir daudzas bibliotēkas - piemēram, sa-web-app pakalpojumā RestTemplate klients pārsÅ«ta Ŕīs galvenes, ja jÅ«s vienkārÅ”i pievienojat Jaeger un OpenTracing bibliotēkas viņa atkarÄ«bas.

Ņemiet vērā, ka sentimentu analÄ«zes lietojumprogramma demonstrē ievieÅ”anu Flask, Spring un ASP.NET Core.

Tagad, kad ir skaidrs, ko mēs iegÅ«stam no kastes (vai gandrÄ«z no kastes), apskatÄ«sim precÄ«zi noregulētu marÅ”rutÄ“Å”anu, tÄ«kla trafika pārvaldÄ«bu, droŔību utt.!

PiezÄ«me. tulk.: Lasiet par to nākamajā Rinor Maloku materiālu par Istio daļā, kuru tulkojumi tuvākajā laikā tiks publicēti mÅ«su emuārā. UPDATE (14. marts): Otrā daļa jau ir publicēts.

PS no tulka

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru