{"id":94977,"date":"2020-09-24T07:43:00","date_gmt":"2020-09-24T05:43:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes"},"modified":"2020-09-24T07:43:00","modified_gmt":"2020-09-24T05:43:00","slug":"nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","title":{"rendered":"M\u016bsu secin\u0101jumi p\u0113c gada, kas pavad\u012bts GitLab.com migr\u0101cij\u0101 uz Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Piez\u012bme:<\/b>: Kubernetes piel\u0101go\u0161anu GitLab uzskata par vienu no diviem galvenajiem faktoriem, kas veicina uz\u0146\u0113muma izaugsmi. Tom\u0113r l\u012bdz nesenam laikam GitLab.com tie\u0161saistes pakalpojuma infrastrukt\u016bra tika veidota uz virtu\u0101laj\u0101m ma\u0161\u012bn\u0101m, un tikai pirms apm\u0113ram gada tika uzs\u0101kta t\u0101s migr\u0101cija uz K8s, kas joproj\u0101m nav pabeigta. Priec\u0101jamies pied\u0101v\u0101t tulkojumu nesenai GitLab SRE in\u017eeniera rakstam par to, k\u0101 tas notiek un k\u0101di secin\u0101jumi ir in\u017eenieriem, kas piedal\u0101s projekt\u0101.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"M\u016bsu secin\u0101jumi p\u0113c gada, kas pavad\u012bts GitLab.com migr\u0101cij\u0101 uz Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/58429abf60cd19a49c5ce593051c2fca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJau gadu m\u016bsu infrastrukt\u016bras noda\u013ca str\u0101d\u0101 pie visu pakalpojumu migr\u0113\u0161anas, kas darbojas GitLab.com, uz Kubernetes. \u0160aj\u0101 laik\u0101 m\u0113s sask\u0101r\u0101mies ar probl\u0113m\u0101m, kas saist\u012btas ne tikai ar pakalpojumu p\u0101rvieto\u0161anu uz Kubernetes, bet ar\u012b ar hibr\u012bda izvietojuma p\u0101rvald\u012bbu p\u0101rejas laik\u0101. Par v\u0113rt\u012bgaj\u0101m m\u0101c\u012bb\u0101m, ko esam guvu\u0161i, b\u016bs runa \u0161aj\u0101 rakst\u0101.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Kop\u0161 pa\u0161a s\u0101kuma GitLab.com t\u0101 serveri darboj\u0101s m\u0101kon\u012b uz virtu\u0101laj\u0101m ma\u0161\u012bn\u0101m. \u0160\u012bs virtu\u0101l\u0101s ma\u0161\u012bnas p\u0101rvalda Chef, un to uzst\u0101d\u012b\u0161ana notiek, izmantojot m\u016bsu <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/#ubuntu\">ofici\u0101lo Linux paketi<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/release\/docs\/-\/blob\/master\/general\/deploy\/gitlab-com-deployer.md\">Izvieto\u0161anas strat\u0113\u0123ija<\/a><\/noindex> gad\u012bjumam, ja nepiecie\u0161ams atjaunin\u0101t lietojumprogrammu, sast\u0101v no vienk\u0101r\u0161a serveru parka atjaunin\u0101\u0161anas saska\u0146ot\u0101 sec\u012bg\u0101 veid\u0101, izmantojot CI cauru\u013cvadu. \u0160\u012b metode \u2014 lai gan t\u0101 ir l\u0113na un nedaudz <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/values\/#boring-solutions\">garlaic\u012bga<\/a><\/noindex> \u2014 nodro\u0161ina, ka GitLab.com izmanto t\u0101dus pa\u0161us uzst\u0101d\u012b\u0161anas un konfigur\u0113\u0161anas veidus, k\u0101 lietot\u0101ji autonom\u0101s <i>(self-managed)<\/i> GitLab instal\u0101cij\u0101s, kas izmanto m\u016bsu Linux paketes.<\/p>\n<p>M\u0113s izmantojam \u0161o metodi, jo ir \u0101rk\u0101rt\u012bgi svar\u012bgi izjust visas b\u0113das un priekus, ko piedz\u012bvo parastie kopienas p\u0101rst\u0101vji, kad uzst\u0101da un konfigur\u0113 savas GitLab kopijas. \u0160is pieejas ce\u013c\u0161 labi darboj\u0101s k\u0101du laiku, ta\u010du kad projektu skaits GitLab p\u0101rsniedza 10 miljonus, m\u0113s saprat\u0101m, ka tas vairs nesniedz m\u016bsu pras\u012bb\u0101m p\u0113c m\u0113rogojam\u012bbas un izvieto\u0161anas.<\/p>\n<h2>Pirmie so\u013ci uz Kubernetes un cloud-native GitLab<\/h2>\n<p>\n2017. gad\u0101 tika izveidots projekts <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\">GitLab Charts<\/a><\/noindex> lai sagatavotu GitLab ievie\u0161anai m\u0101ko\u0146os un sniegtu lietot\u0101jiem iesp\u0113ju instal\u0113t GitLab Kubernetes klasteros. Taj\u0101 laik\u0101 m\u0113s saprat\u0101m, ka GitLab p\u0101rvieto\u0161ana uz Kubernetes palielin\u0101s SaaS platformas m\u0113rogojam\u012bbu, atvieglos izvietojumus un uzlabos skait\u013co\u0161anas resursu izmanto\u0161anas efektivit\u0101ti. Taj\u0101 pa\u0161\u0101 laik\u0101 daudzas m\u016bsu lietojumprogrammas funkcijas bija atkar\u012bgas no pievienotiem NFS nodal\u012bjumiem, kas kav\u0113ja p\u0101reju no virtu\u0101laj\u0101m ma\u0161\u012bn\u0101m.<\/p>\n<p>Tieksme uz cloud native un Kubernetes \u013c\u0101va m\u016bsu in\u017eenieriem pl\u0101not pak\u0101penisku p\u0101reju, kuras laik\u0101 m\u0113s atteic\u0101mies no da\u017e\u0101m lietojumprogrammas atkar\u012bb\u0101m no t\u012bkla glab\u0101tuv\u0113m, vienlaikus turpinot att\u012bst\u012bt jaunas funkcijas. Kop\u0161 m\u0113s s\u0101k\u0101m pl\u0101not migr\u0101ciju 2019. gada vasar\u0101, daudzi no \u0161iem ierobe\u017eojumiem ir nov\u0113rsti, un GitLab.com p\u0101rcel\u0161ana uz Kubernetes tagad norit piln\u0101 spar\u0101!<\/p>\n<h2>GitLab.com darb\u012bbas \u012bpa\u0161\u012bbas Kubernetes vid\u0113<\/h2>\n<p>\nGitLab.com m\u0113s izmantojam vienu re\u0123ion\u0101lo GKE kopu, kas apstr\u0101d\u0101 visu lietotnes trafiku. Lai minimiz\u0113tu migr\u0101cijas sare\u017e\u0123\u012bt\u012bbu (kas t\u0101pat ir pietiekami komplic\u0113ta), m\u0113s koncentr\u0113jamies uz pakalpojumiem, kas nav atkar\u012bgi no lok\u0101l\u0101s glab\u0101\u0161anas vai NFS. GitLab.com galvenok\u0101rt izmanto monol\u012btu koda b\u0101zi uz Rails, un m\u0113s virz\u0101m trafiku atkar\u012bb\u0101 no darba slodzes raksturojuma uz da\u017e\u0101diem galapunktiem, kas ir izol\u0113ti savos mezglu baseinos.<\/p>\n<p>Frontend\u0101 \u0161ie veidi tiek dal\u012bti uz piepras\u012bjumiem uz web, API, Git SSH\/HTTPS un Registry. Backend\u0101 m\u0113s sadal\u0101m uzdevumus rind\u0101 atbilsto\u0161i da\u017e\u0101diem raksturojumiem atkar\u012bb\u0101 no <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/blog\/2020\/06\/24\/scaling-our-use-of-sidekiq\/\">iepriek\u0161 noteiktajiem resursu ierobe\u017eojumiem<\/a><\/noindex>, kas \u013cauj mums noteikt pakalpojuma l\u012bme\u0146a m\u0113r\u0137us (Service-Level Objectives, SLOs) da\u017e\u0101d\u0101m slodz\u0113m.<\/p>\n<p>Visi \u0161ie pakalpojumi GitLab.com ir konfigur\u0113ti, izmantojot nemodific\u0113tu GitLab Helm chart. Konfigur\u0101cija tiek veikta apak\u0161grafikos, kas var tikt izv\u0113les veid\u0101 iek\u013cauti pak\u0101peniski, kad m\u0113s p\u0101rvietojam pakalpojumus uz klasteri. Pat \u0146emot v\u0113r\u0101, ka tika nolemts neiek\u013caut migr\u0101cij\u0101 da\u017eus no m\u016bsu stateful pakalpojumiem, piem\u0113ram, Redis, Postgres, GitLab Pages un Gitaly, Kubernetes izmanto\u0161ana \u013cauj radik\u0101li samazin\u0101t virtu\u0101lo ma\u0161\u012bnu skaitu, kuras \u0161obr\u012bd p\u0101rvalda Chef.<\/p>\n<h2>Kubernetes caursp\u012bd\u012bgums un konfigur\u0101cijas p\u0101rvald\u012bba<\/h2>\n<p>\nVisas konfigur\u0101cijas p\u0101rvalda pats GitLab. Tam tiek izmantoti tr\u012bs konfigur\u0101cijas projekti, kas balst\u012bti uz Terraform un Helm. M\u0113s cen\u0161amies visur izmantot pa\u0161u GitLab, lai palaistu GitLab, bet ekspluat\u0101cijas uzdevumiem mums darbojas atsevi\u0161\u0137a GitLab instal\u0101cija. T\u0101 ir nepiecie\u0161ama, lai neb\u016btu atkar\u012bgiem no GitLab.com pieejam\u012bbas izvietojumu un atjaunin\u0101jumu veik\u0161anai.<\/p>\n<p>Lai gan m\u016bsu Kubernetes klastera caurules darbojas atsevi\u0161\u0137\u0101 GitLab instal\u0101cij\u0101, kodu repozitorijiem ir spogu\u013ci, kas publiski pieejami \u0161\u0101d\u0101s adres\u0113s:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\">k8s-workloads\/gitlab-com<\/a><\/noindex> \u2014 konfigur\u0101cijas saite GitLab.com Helm diagrammai;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-helmfiles\/\">k8s-workloads\/gitlab-helmfiles<\/a><\/noindex> \u2014 satur konfigur\u0101cijas pakalpojumiem, kas nav tie\u0161i saist\u012bti ar GitLab lietotni. Tajos ietilpst konfigur\u0101cijas \u017eurn\u0101lu p\u0101rvald\u012bbai un klastera uzraudz\u012bbai, k\u0101 ar\u012b integr\u0113tiem r\u012bkiem, piem\u0113ram, PlantUML;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gitlab-com-infrastructure\">Gitlab-com-infrastructure<\/a><\/noindex> \u2014 Terraform konfigur\u0101cija Kubernetes un vecajai (legacy) VM infrastrukt\u016brai. \u0160eit tiek konfigur\u0113ti visi resursi, kas nepiecie\u0161ami klastera palai\u0161anai, tostarp pats klasteris, mezglu kopas, dienesta konti, IP adre\u0161u rezerv\u0113\u0161ana.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"M\u016bsu secin\u0101jumi p\u0113c gada, kas pavad\u012bts GitLab.com migr\u0101cij\u0101 uz Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/612125403171d73106a081bf4244a52b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Veicot izmai\u0146as, tiek r\u0101d\u012bts publisks <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/k8s-workloads\/gitlab-com\/-\/merge_requests\/315#note_390180361\"><i>\u012bss kopsavilkums<\/i><\/a><\/noindex><i> ar saiti uz detaliz\u0113tu diff, ko SRE analiz\u0113 pirms izmai\u0146u veik\u0161anas klaster\u012b.<\/i><\/p>\n<p>SRE saite ved uz detaliz\u0113tu difu GitLab instal\u0101cij\u0101, kas tiek izmantota ekspluat\u0101cij\u0101 un piek\u013cuve kurai ir ierobe\u017eota. Tas \u013cauj darbiniekiem un kopienai, kam nav piek\u013cuves ekspluat\u0101cijas projektam (tas ir atv\u0113rts tikai SRE), apskat\u012bt ieteiktos izmai\u0146u variantus konfigur\u0101cij\u0101. Apvienojot publisku GitLab instanci kodam ar sl\u0113gtu instanci CI cauru\u013cvadiem, m\u0113s saglab\u0101jam vienotu darba procesu, vienlaikus garant\u0113jot neatkar\u012bbu no GitLab.com konfigur\u0101cijas atjaunin\u0101jumos.<\/p>\n<h2>Ko m\u0113s uzzin\u0101j\u0101m migr\u0101cijas laik\u0101<\/h2>\n<p>\nMigr\u0101cijas proces\u0101 tika g\u016bta pieredze, kuru m\u0113s pielietojam jaun\u0101s migr\u0101cij\u0101s un izvietojumos Kubernetes.<\/p>\n<h3>1. Izmaksu pieaugums d\u0113\u013c trafika starp pieejam\u012bbas zon\u0101m.<\/h3>\n<p>\n<img decoding=\"async\" alt=\"M\u016bsu secin\u0101jumi p\u0113c gada, kas pavad\u012bts GitLab.com migr\u0101cij\u0101 uz Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/3dce44b3f803ffcea13e0101e7343d91.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ikdienas egress statistika (baiti dien\u0101) GitLab.com Git glab\u0101tuves parkam.<\/i><\/p>\n<p>Google dala savu t\u012bklu re\u0123ioniem. Tie savuk\u0101rt tiek iedal\u012bti pieejam\u012bbas zon\u0101s (AZ). Git mitin\u0101\u0161ana ir saist\u012bta ar lieliem datu apjomiem, t\u0101p\u0113c mums ir svar\u012bgi kontrol\u0113t t\u012bkla egress. iek\u0161\u0113j\u0101 satiksm\u0113 egress ir bezmaksas tikai tad, ja tas paliek vienas pieejam\u012bbas zonas robe\u017e\u0101s. Rakst\u012b\u0161anas br\u012bd\u012b m\u0113s katru parasto darba dienu nododam aptuveni 100 TB datu (un tas ir tikai Git repozitorijiem). Pakalpojumi, kas m\u016bsu vecaj\u0101 VM balst\u012btaj\u0101 topolo\u0123ij\u0101 atrad\u0101s taj\u0101s pa\u0161\u0101s virtu\u0101laj\u0101s ma\u0161\u012bn\u0101s, tagad str\u0101d\u0101 da\u017e\u0101dos Kubernetes pod'os. Tas noz\u012bm\u0113, ka da\u013ca satiksmes, kas agr\u0101k bija lok\u0101la VM, var potenci\u0101li iziet \u0101rpus pieejam\u012bbas zon\u0101m.<\/p>\n<p>Re\u0123ion\u0101lie GKE klasteri \u013cauj aptvert vair\u0101kas pieejam\u012bbas zonas rezerves nodro\u0161in\u0101\u0161anai. M\u0113s apsveram iesp\u0113ju <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/1175\">sadali re\u0123ion\u0101lo GKE klasteri vienas zonas klasteros<\/a><\/noindex> pakalpojumiem, kas \u0123ener\u0113 lielus datu pl\u016bsmu apjomus. Tas samazin\u0101s egress izmaksas, saglab\u0101jot klastera l\u012bme\u0146a rezerves nodro\u0161in\u0101\u0161anu.<\/p>\n<h3>2. Ierobe\u017eojumi, resursu piepras\u012bjumi un m\u0113rogo\u0161ana<\/h3>\n<p>\n<img decoding=\"async\" alt=\"M\u016bsu secin\u0101jumi p\u0113c gada, kas pavad\u012bts GitLab.com migr\u0101cij\u0101 uz Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/6e2e1ca4d37666b49358d94cd8660c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Replik\u0101ciju skaits, kas apstr\u0101d\u0101 ra\u017eotnes datu pl\u016bsmu uz registry.gitlab.com. Datu pl\u016bsma sasniedz maksimumu ~15:00 UTC.<\/i><\/p>\n<p>M\u016bsu migr\u0101cijas st\u0101sts s\u0101k\u0101s 2019. gada august\u0101, kad m\u0113s p\u0101rvietoj\u0101m pirmo pakalpojumu \u2014 GitLab konteineru re\u0123istru (GitLab Container Registry) \u2014 uz Kubernetes. \u0160is kritiski svar\u012bgais augsta trafika pakalpojums bija labi piem\u0113rots pirmajai migr\u0101cijai, jo tas ir stateless lietojums ar nelielu skaitu \u0101r\u0113jo atkar\u012bbu. Pirmaj\u0101 probl\u0113m\u0101, ar kuru m\u0113s sask\u0101r\u0101mies, bija liels piespiedu pod'\u0173 skaits viet\u0113jo mezglu atmi\u0146as tr\u016bkuma d\u0113\u013c. T\u0101p\u0113c mums n\u0101c\u0101s main\u012bt piepras\u012bjumus un ierobe\u017eojumus.<\/p>\n<p>Tika atkl\u0101ts, ka lietojumprogramm\u0101m, kuru atmi\u0146as pat\u0113ri\u0146\u0161 laika gait\u0101 pieaug, zemas v\u0113rt\u012bbas piepras\u012bjumiem (rezerv\u0113jot atmi\u0146u katram pod'ui) kop\u0101 ar \"d\u0101sn\u0101m\" stingrajiem ierobe\u017eojumiem izmanto\u0161anai noveda pie pies\u0101tin\u0101juma. <i>(saturation)<\/i> mezglos un augstu izraid\u012b\u0161anas l\u012bmeni. Lai tiktu gal\u0101 ar \u0161o probl\u0113mu, tika <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/gl-infra\/delivery\/-\/issues\/998#note_388983696\">nol\u0113ma palielin\u0101t piepras\u012bjumus un samazin\u0101t ierobe\u017eojumus.<\/a><\/noindex>Tas mazin\u0101ja slodzi uz mezgliem un nodro\u0161in\u0101ja pod'\u0173 dz\u012bves ciklu, kas nerad\u012bja p\u0101r\u0101k lielu spiedienu uz mezglu. Tagad migr\u0101cijas s\u0101kam ar d\u0101sn\u0101m (un gandr\u012bz vien\u0101d\u0101m) piepras\u012bjuma un ierobe\u017eojuma v\u0113rt\u012bb\u0101m, piel\u0101gojot t\u0101s p\u0113c nepiecie\u0161am\u012bbas.<\/p>\n<h3>3. Metri un \u017eurn\u0101li<\/h3>\n<p>\n<img decoding=\"async\" alt=\"M\u016bsu secin\u0101jumi p\u0113c gada, kas pavad\u012bts GitLab.com migr\u0101cij\u0101 uz Kubernetes\" src=\"\/wp-content\/uploads\/2020\/09\/66d1fd47b57d5826f13defa6e6a7fe3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Infrastrukt\u016bras noda\u013ca koncentr\u0113jas uz kav\u0113jumiem, k\u013c\u016bmju procentiem un pies\u0101tin\u0101jumu ar noteiktajiem <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\"><i>apkalpo\u0161anas l\u012bme\u0146a m\u0113r\u0137iem<\/i><\/a><\/noindex><i> (SLO), saist\u012btiem ar <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-com\/dashboards-gitlab-com\/-\/metrics\/sla-dashboard.yml?environment=1790496&amp;duration_seconds=86400\"><i>kop\u0113jo pieejam\u012bbu m\u016bsu sist\u0113mai.<\/i><\/a><\/noindex><i>.<\/i><\/p>\n<p>Pag\u0101ju\u0161aj\u0101 gad\u0101 viens no galvenajiem notikumiem infrastrukt\u016bras noda\u013c\u0101 bija uzlabojumi monitor\u0113\u0161an\u0101 un darb\u0101 ar SLO. SLO \u013c\u0101va mums izvirz\u012bt m\u0113r\u0137us atsevi\u0161\u0137iem pakalpojumiem, ko m\u0113s r\u016bp\u012bgi uzraudz\u012bj\u0101m migr\u0101cijas laik\u0101. Bet pat ar \u0161\u0101du uzlabotu nov\u0113rojam\u012bbu ne vienm\u0113r var nekav\u0113joties saskat\u012bt probl\u0113mas, izmantojot metrikas un br\u012bdin\u0101jumus. Piem\u0113ram, koncentr\u0113joties uz kav\u0113jumiem un k\u013c\u016bmju procentiem, m\u0113s nepiln\u012bb\u0101 aptveram visus pakalpojuma izmanto\u0161anas scen\u0101rijus migr\u0101cijas laik\u0101.<\/p>\n<p>\u0160\u012b probl\u0113ma tika atkl\u0101ta gandr\u012bz nekav\u0113joties p\u0113c da\u013cas darba slod\u017eu p\u0101rvieto\u0161anas uz klasteri. \u012apa\u0161i asi t\u0101 izpaud\u0101s, kad bija j\u0101 p\u0101rbauda funkcijas, kuru piepras\u012bjumu skaits nav liels, bet kur\u0101m ir \u013coti specifiskas konfigur\u0101cijas atkar\u012bbas. Viens no galvenajiem m\u0101c\u012bbu secin\u0101jumiem p\u0113c migr\u0101cijas bija nepiecie\u0161am\u012bba monitor\u0113\u0161an\u0101 \u0146emt v\u0113r\u0101 ne tikai metriku, bet ar\u012b \u017eurn\u0101lus un \u201cgaro asti\u201d <i>(run\u0101jot par <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\"><i>t\u0101du to sadal\u012bjumu<\/i><\/a><\/noindex><i> uz grafika \u2014 tulk. piez.)<\/i> k\u013c\u016bd\u0101m. Tagad katrai migr\u0101cijai m\u0113s iek\u013caujam detaliz\u0113tu piepras\u012bjumu sarakstu \u017eurn\u0101liem <i>(log queries)<\/i> un pl\u0101nojam skaidras atgrie\u0161anas proced\u016bras, kuras, ja rodas probl\u0113mas, var nodot no vienas mai\u0146as uz citu.<\/p>\n<p>Vienlaic\u012bga to pa\u0161u piepras\u012bjumu apkalpo\u0161ana vecaj\u0101 VM infrastrukt\u016br\u0101 un jaunaj\u0101, kas balst\u012bta uz Kubernetes, bija unik\u0101la uzdevums. At\u0161\u0137ir\u012bb\u0101 no lift-and-shift migr\u0101cijas <i>(\u0101tra lietot\u0146u p\u0101rvieto\u0161anas \u201ck\u0101 ir\u201d jaun\u0101 infrastrukt\u016br\u0101; vair\u0101k var izlas\u012bt, piem\u0113ram, <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/cloud\/learn\/lift-and-shift\"><i>\u0161eit<\/i><\/a><\/noindex><i> \u2014 piez\u012bme tulkot\u0101jam)<\/i>, paral\u0113l\u0101 darb\u012bba uz \u00abvecaj\u0101m\u00bb VM un Kubernetes prasa, lai uzraudz\u012bbas r\u012bki b\u016btu sader\u012bgi ar ab\u0101m vid\u0113m un sp\u0113tu apvienot metrikas vien\u0101 skat\u0101. Ir svar\u012bgi, ka m\u0113s izmantojam tos pa\u0161us dashboard\u2019us un vaic\u0101jumus uz \u017eurn\u0101liem, lai nodro\u0161in\u0101tu konsekventu nov\u0113rojam\u012bbu p\u0101rejas period\u0101.<\/p>\n<h3>4. P\u0101radres\u0113t satiksmi uz jauno klasteri<\/h3>\n<p>\nGitLab.com da\u013ca serveru tiek pie\u0161\u0137irta <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/#canary-testing\">kan\u0101riju (canary) posmam<\/a><\/noindex>. Kan\u0101riju parks kalpo m\u016bsu iek\u0161\u0113jiem projektiem, k\u0101 ar\u012b var <noindex><a rel=\"nofollow\" href=\"https:\/\/next.gitlab.com\/\">tikt aktiviz\u0113ts lietot\u0101ju<\/a><\/noindex>. Bet vispirms tas ir paredz\u0113ts izmai\u0146u, kas tiek veiktas infrastrukt\u016br\u0101 un lietojumprogramm\u0101, p\u0101rbaudei. Pirmais p\u0101rvietotais pakalpojums s\u0101ka ar ierobe\u017eota iek\u0161\u0113j\u0101 satiksmes apjoma pie\u0146em\u0161anu, un m\u0113s turpin\u0101m izmantot \u0161o metodi, lai p\u0101rliecin\u0101tos par SLO iev\u0113ro\u0161anu, pirms nos\u016bt\u012bt visu satiksmi uz klasteri.<\/p>\n<p>Migr\u0101cijas gad\u012bjum\u0101 tas noz\u012bm\u0113, ka vispirms Kubernetes tiek nos\u016bt\u012bti piepras\u012bjumi uz iek\u0161\u0113jiem projektiem, un p\u0113c tam m\u0113s pak\u0101peniski p\u0101radres\u0113jam uz klasteri p\u0101r\u0113jo satiksmi, mainot svaru backend caur HAProxy. P\u0101rejas proces\u0101 no VM uz Kubernetes k\u013cuva skaidrs, ka ir \u013coti izdev\u012bgi, ja ir pieejams vienk\u0101r\u0161s veids, k\u0101 novirz\u012bt satiksmi starp veco un jauno infrastrukt\u016bru, un attiec\u012bgi tur\u0113t veco infrastrukt\u016bru gatav\u012bb\u0101 atgaitai pirm\u0101s p\u0101rejas dien\u0101s.<\/p>\n<h3>5. Rezerves jauda pod'\u0173 un to izmanto\u0161ana<\/h3>\n<p>\nGandr\u012bz nekav\u0113joties tika konstat\u0113ta n\u0101kam\u0101 probl\u0113ma: re\u0123istra pakalpojuma pod'\u0173 palai\u0161ana notika \u0101tri, ta\u010du Sidekiq pod'\u0173 palai\u0161ana pras\u012bja l\u012bdz. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">div\u0101m min\u016bt\u0113m<\/a><\/noindex>Ilgsto\u0161a Sidekiq pod'\u0173 palai\u0161ana k\u013cuva par probl\u0113mu, kad m\u0113s s\u0101k\u0101m migr\u0101ciju Kubernetes darba slodz\u0113m darbiniekiem, kuriem nepiecie\u0161ams \u0101tri apstr\u0101d\u0101t darbus un \u0101tri m\u0113rogot.<\/p>\n<p>\u0160aj\u0101 gad\u012bjum\u0101 m\u0101c\u012bba bija t\u0101da, ka, lai gan Horizontal Pod Autoscaler (HPA) Kubernetes labi tiek gal\u0101 ar trafika pieaugumu, ir svar\u012bgi \u0146emt v\u0113r\u0101 darba slod\u017eu raksturlielumus un atv\u0113l\u0113t rezerves resursus pod'iem (\u012bpa\u0161i nevienm\u0113r\u012bgas piepras\u012bjuma sadal\u012bjuma apst\u0101k\u013cos). M\u016bsu gad\u012bjum\u0101 v\u0113roj\u0101m p\u0113k\u0161\u0146u uzdevumu pieaugumu, kas izrais\u012bja strauju \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0113\u0161anu, kas noveda pie CPU resursu pies\u0101tin\u0101juma, pirms m\u0113s sp\u0113jam palielin\u0101t mezglu grupu.<\/p>\n<p>Vienm\u0113r ir k\u0101rdin\u0101jums izspiest no klastera maksim\u0101li iesp\u0113jamo, tom\u0113r m\u0113s, s\u0101kotn\u0113ji saskaroties ar veiktsp\u0113jas probl\u0113m\u0101m, tagad s\u0101kam ar d\u0101snu pod bud\u017eetu un v\u0113l\u0101k to samazin\u0101m, r\u016bp\u012bgi uzraugot SLO. Pod'iem Sidekiq pakalpojuma izpilde ir iev\u0113rojami pa\u0101trin\u0101jusies un tagad vid\u0113ji aiz\u0146em aptuveni 40 sekundes. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/gitlab-org\/charts\/gitlab\/-\/issues\/1775\">Izpildes laika sa\u012bsin\u0101\u0161ana pod'iem<\/a><\/noindex> ieguva gan GitLab.com, gan m\u016bsu self-managed instal\u0101cijas, kas izmanto ofici\u0101lo GitLab Helm diagrammu.<\/p>\n<h2>Secin\u0101jums<\/h2>\n<p>\nP\u0113c katra pakalpojuma p\u0101rvieto\u0161anas m\u0113s priec\u0101j\u0101mies par Kubernetes izmanto\u0161anas priek\u0161roc\u012bb\u0101m produkcij\u0101: \u0101tr\u0101ku un dro\u0161\u0101ku lietojumprogrammu izvieto\u0161anu, m\u0113rogojam\u012bbu un efekt\u012bv\u0101ku resursu sadal\u012bjumu. Turkl\u0101t migr\u0101cijas ieguvumi sniedzas t\u0101l\u0101k par GitLab.com. No katra uzlabojuma ofici\u0101lo Helm diagrammu ieg\u016bst ar\u012b t\u0101s lietot\u0101ji.<\/p>\n<p>Ceru, ka jums patika st\u0101sts par m\u016bsu piedz\u012bvojumiem migr\u0101cij\u0101 uz Kubernetes. M\u0113s turpin\u0101m p\u0101rvietot arvien jaunus pakalpojumus uz klasteri. Papildu inform\u0101ciju var ieg\u016bt no \u0161\u0101d\u0101m publik\u0101cij\u0101m:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/kubernetes\/gitlab-com\/\">K\u0101p\u0113c m\u0113s migr\u0113jam uz Kubernetes?<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/handbook\/engineering\/infrastructure\/production\/architecture\/#gitlab-com-on-kubernetes\">GitLab.com uz Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/groups\/gitlab-com\/gl-infra\/-\/epics\/112\">Epiks par GitLab.com migr\u0101ciju uz Kubernetes<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S. no tulka<\/h2>\n<p>\nLasiet ar\u012b m\u016bsu emu\u0101ra rakstos:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/519962\/\">3 gadi ar Kubernetes produkcij\u0101: ko m\u0113s saprat\u0101m<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/504396\/\">10 tipiskas k\u013c\u016bdas, izmantojot Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/335814\/\">Kubernetes veiksmes st\u0101sti produkcij\u0101. 3. da\u013ca: GitHub<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440278\/\">Tinder p\u0101reja uz Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/520150\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 GitLab.com \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0435\u0451 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0432 K8s, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 SRE-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 GitLab \u043e \u0442\u043e\u043c, \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":94978,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-94977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u0448\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0437\u0430 \u0433\u043e\u0434 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 GitLab.com \u043d\u0430 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-24T05:43:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-24T05:43:00+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47M\u016bsu secin\u0101jumi par gadu, migr\u0113jot GitLab.com uz Kubernetes | ProHoster","description":"Piez. tulk.: Kubernetes piel\u0101go\u0161anu GitLab uzskata par vienu no diviem galvenajiem faktoriem, kas veicina uz\u0146\u0113muma izaugsmi.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u0448\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0437\u0430 \u0433\u043e\u0434 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 GitLab.com \u043d\u0430 Kubernetes | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e Kubernetes \u0432 GitLab \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u043e\u0441\u0442\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/nashi-vyvody-za-god-migraczii-gitlab-com-na-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-24T05:43:00+00:00","article:modified_time":"2020-09-24T05:43:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"94977","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:14:45","updated":"2022-10-03 07:39:43","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/94977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=94977"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/94977\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/94978"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=94977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=94977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=94977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}