PagÄtnÄ
PirmÄ lieta, kas daudziem izstrÄdÄtÄjiem un sistÄmu administratoriem ienÄk prÄtÄ, dzirdot vÄrdus Service Mesh is tracing. PatieÅ”Äm, katram tÄ«kla mezglam, caur kuru iet visa TCP trafika, mÄs pievienojam Ä«paÅ”u starpniekserveri. Å Ä·iet, ka tagad ir iespÄjams viegli nosÅ«tÄ«t informÄciju par visÄm tÄ«kla mijiedarbÄ«bÄm tÄ«klÄ. DiemžÄl patiesÄ«bÄ ir daudz nianÅ”u, kas jÄÅem vÄrÄ. ApskatÄ«sim tos.
Nepareizs uzskats numur viens: mÄs varam iegÅ«t tieÅ”saistes pÄrgÄjienu datus bez maksas.
Faktiski salÄ«dzinoÅ”i bez maksas mÄs varam iegÅ«t tikai mÅ«su sistÄmas mezglus, kas savienoti ar bultiÅÄm un datu pÄrraides Ätrumu starp pakalpojumiem (patiesÄ«bÄ tikai baitu skaits laika vienÄ«bÄ). TomÄr vairumÄ gadÄ«jumu mÅ«su pakalpojumi sazinÄs, izmantojot kÄdu lietojumprogrammas slÄÅa protokolu, piemÄram, HTTP, gRPC, Redis un tÄ tÄlÄk. Un, protams, mÄs vÄlamies redzÄt izsekoÅ”anas informÄciju tieÅ”i Å”iem protokoliem; mÄs vÄlamies redzÄt pieprasÄ«juma Ätrumu, nevis datu pÄrraides Ätrumu. MÄs vÄlamies izprast pieprasÄ«jumu latentumu, izmantojot mÅ«su protokolu. Visbeidzot, mÄs vÄlamies redzÄt pilnu ceļu, kÄds pieprasÄ«jumam nepiecieÅ”ams no pieteikÅ”anÄs mÅ«su sistÄmÄ lÄ«dz atbildes saÅemÅ”anai no lietotÄja. Å o problÄmu vairs nav tik vienkÄrÅ”i atrisinÄt.
Vispirms apskatÄ«sim, kÄ Istio arhitektÅ«ras skatÄ«jumÄ izskatÄs izsekoÅ”anas posmu nosÅ«tÄ«Å”ana. KÄ mÄs atceramies no pirmÄs daļas, Istio ir atseviŔķs komponents ar nosaukumu Mixer telemetrijas apkopoÅ”anai. TaÄu paÅ”reizÄjÄ versijÄ 1.0.* sÅ«tÄ«Å”ana notiek tieÅ”i no starpniekserveriem, proti, no sÅ«tÅa starpniekservera. SÅ«tÅa starpniekserveris atbalsta izsekoÅ”anas posmu nosÅ«tÄ«Å”anu, izmantojot zipkin protokolu. Ir iespÄjams pieslÄgt citus protokolus, bet tikai caur spraudni. Izmantojot Istio, mÄs nekavÄjoties iegÅ«stam samontÄtu un konfigurÄtu sÅ«tÅa starpniekserveri, kas atbalsta tikai zipkin protokolu. Ja mÄs vÄlamies izmantot, piemÄram, Jaeger protokolu un sÅ«tÄ«t izsekoÅ”anas posmus, izmantojot UDP, mums bÅ«s jÄizveido savs istio-starpniekservera attÄls. Ir pieejams pielÄgotu spraudÅu atbalsts istio-proxy, taÄu tas joprojÄm ir alfa versijÄ. TÄpÄc, ja vÄlamies iztikt bez liela skaita pielÄgotu iestatÄ«jumu, tiek samazinÄts izsekoÅ”anas diapazonu glabÄÅ”anai un saÅemÅ”anai izmantoto tehnoloÄ£iju klÄsts. No galvenajÄm sistÄmÄm tagad jÅ«s varat izmantot paÅ”u Zipkin vai Jaeger, bet sÅ«tÄ«t visu, izmantojot zipkin saderÄ«gu protokolu (kas ir daudz mazÄk efektÄ«vs). Zipkin protokols pats par sevi ietver visas izsekoÅ”anas informÄcijas nosÅ«tÄ«Å”anu kolekcionÄriem, izmantojot HTTP protokolu, kas ir diezgan dÄrgs.
KÄ jau teicu, mÄs vÄlamies izsekot lietojumprogrammu lÄ«meÅa protokoliem. Tas nozÄ«mÄ, ka starpniekserveriem, kas atrodas blakus katram pakalpojumam, ir jÄsaprot, kÄda veida mijiedarbÄ«ba notiek tagad. PÄc noklusÄjuma Istio konfigurÄ visus portus kÄ vienkÄrÅ”us TCP, kas nozÄ«mÄ, ka netiks nosÅ«tÄ«ti pÄdas. Lai izsekoÅ”ana tiktu nosÅ«tÄ«ta, jums, pirmkÄrt, ir jÄiespÄjo Ŕī opcija galvenajÄ tÄ«kla konfigurÄcijÄ un, kas ir ļoti svarÄ«gi, jÄnosauc visi kubernetes pakalpojumu entÄ«tiju porti saskaÅÄ ar protokolu, kas tiek izmantots pakalpojumÄ. Tas ir, piemÄram, Å”Ädi:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
targetPort: 80
name: http
selector:
app: nginx
Varat arÄ« izmantot saliktos nosaukumus, piemÄram, http-magic (Istio redzÄs http un atpazÄ«s Å”o portu kÄ http galapunktu). FormÄts ir: proto-extra.
Lai protokola noteikÅ”anai netiktu ielÄgots liels skaits konfigurÄciju, varat izmantot netÄ«ru risinÄjumu: izlabojiet Pilot komponentu brÄ«dÄ«, kad tas ir tikai
Lai saprastu, vai protokols tieÅ”Äm ir definÄts pareizi, jÄieiet kÄdÄ no blakusvÄÄ£u konteineriem ar sÅ«tÅa starpniekserveri un jÄiesniedz pieprasÄ«jums sÅ«tÅa interfeisa admin portam ar atraÅ”anÄs vietu /config_dump. IegÅ«tajÄ konfigurÄcijÄ ir jÄaplÅ«ko vÄlamÄ pakalpojuma darbÄ«bas lauks. Istio tas tiek izmantots kÄ pieprasÄ«juma iesniegÅ”anas vietas identifikators. Lai pielÄgotu Ŕī parametra vÄrtÄ«bu Istio (pÄc tam mÄs to redzÄsim mÅ«su izsekoÅ”anas sistÄmÄ), blakusvÄÄ£a konteinera palaiÅ”anas posmÄ ir jÄnorÄda serviceCluster karodziÅÅ”. PiemÄram, to var aprÄÄ·inÄt Å”Ädi, izmantojot mainÄ«gos lielumus, kas iegÅ«ti no lejupvÄrstÄs kubernetes API:
--serviceCluster ${POD_NAMESPACE}.$(echo ${POD_NAME} | sed -e 's/-[a-z0-9]*-[a-z0-9]*$//g')
Labs piemÄrs, lai saprastu, kÄ notiek izsekoÅ”ana sÅ«tnÄ«
Pats galapunkts izsekoÅ”anas diapazonu nosÅ«tÄ«Å”anai ir jÄnorÄda arÄ« sÅ«tÅa starpniekservera palaiÅ”anas karodziÅÄs, piemÄram: --zipkinAddress tracing-collector.tracing:9411
Nepareizs priekÅ”stats numur divi: mÄs varam lÄti iegÅ«t pilnÄ«gas pieprasÄ«jumu pÄdas, izmantojot sistÄmu no kastes
DiemžÄl tÄ nav. IevieÅ”anas sarežģītÄ«ba ir atkarÄ«ga no tÄ, kÄ jÅ«s jau esat ieviesis pakalpojumu mijiedarbÄ«bu. KÄpÄc ir tÄ, ka?
Fakts ir tÄds, ka, lai istio-proxy varÄtu saprast pakalpojumam ienÄkoÅ”o pieprasÄ«jumu atbilstÄ«bu tiem, kas atstÄj to paÅ”u pakalpojumu, nepietiek tikai ar visas trafika pÄrtverÅ”anu. Jums ir jÄbÅ«t sava veida saziÅas identifikatoram. HTTP sÅ«tÅa starpniekserveris izmanto Ä«paÅ”as galvenes, ar kurÄm sÅ«tnis saprot, kurÅ” konkrÄtais pakalpojuma pieprasÄ«jums Ä£enerÄ Ä«paÅ”us pieprasÄ«jumus citiem pakalpojumiem. Å Ädu virsrakstu saraksts:
- x-pieprasījuma ID,
- x-b3-traceid,
- x-b3-spanid,
- x-b3-parentsspanid,
- x-b3-izlase,
- x-b3 karogi,
- x-ot-span-konteksts.
Ja jums ir viens punkts, piemÄram, pamata klients, kurÄ varat pievienot Å”Ädu loÄ£iku, tad viss ir kÄrtÄ«bÄ, jums tikai jÄgaida, lÄ«dz Ŕī bibliotÄka tiks atjauninÄta visiem klientiem. Bet, ja jums ir ļoti neviendabÄ«ga sistÄma un pÄrejot no pakalpojuma uz pakalpojumu tÄ«klÄ nav vienotÄ«bas, visticamÄk, tÄ bÅ«s liela problÄma. Nepievienojot Å”Ädu loÄ£iku, visa izsekoÅ”anas informÄcija bÅ«s tikai āviena lÄ«meÅaā. Tas ir, mÄs saÅemsim visas starpdienestu mijiedarbÄ«bas, taÄu tÄs netiks salÄ«mÄtas atseviŔķÄs tÄ«kla caurbraukÅ”anas Ä·ÄdÄs.
SecinÄjums
Istio nodroÅ”ina Ärtu rÄ«ku izsekoÅ”anas informÄcijas vÄkÅ”anai tÄ«klÄ, taÄu jums jÄsaprot, ka ievieÅ”anai jums bÅ«s jÄpielÄgo sistÄma un jÄÅem vÄrÄ Istio ievieÅ”anas iespÄjas. RezultÄtÄ ir jÄatrisina divi galvenie punkti: lietojumprogrammas lÄ«meÅa protokola noteikÅ”ana (kas jÄatbalsta sÅ«tÅa starpniekserverim) un informÄcijas pÄrsÅ«tÄ«Å”anas iestatÄ«Å”ana par pieprasÄ«jumu savienoÅ”anu ar pakalpojumu no dienesta pieprasÄ«jumiem (izmantojot galvenes , HTTP protokola gadÄ«jumÄ). Kad Ŕīs problÄmas ir atrisinÄtas, mums ir jaudÄ«gs rÄ«ks, kas ļauj pÄrredzami vÄkt informÄciju no tÄ«kla pat ļoti neviendabÄ«gÄs sistÄmÄs, kas rakstÄ«tas daudzÄs dažÄdÄs valodÄs un ietvaros.
NÄkamajÄ rakstÄ par Service Mesh mÄs apskatÄ«sim vienu no lielÄkajÄm Istio problÄmÄm ā lielo RAM patÄriÅu katrÄ blakusvÄÄ£a starpniekservera konteinerÄ un apspriedÄ«sim, kÄ ar to tikt galÄ.
Avots: www.habr.com