{"id":31139,"date":"2019-10-31T21:39:40","date_gmt":"2019-10-31T18:39:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monitorim-resursy-klasterov-kubernetes\/"},"modified":"2019-10-31T21:39:40","modified_gmt":"2019-10-31T18:39:40","slug":"monitorim-resursy-klasterov-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","title":{"rendered":"Monitorujemy zasoby klastr\u00f3w Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bn\/g6\/jg\/bng6jgpkvlzy8-2zahywzsnz8du.png\"><img decoding=\"async\" alt=\"Monitorujemy zasoby klastr\u00f3w Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/e3e07ee5a2271263948b3d3b39f3b66d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Stworzy\u0142em Kube Eagle \u2014 eksportera Prometheus. Okaza\u0142o si\u0119, \u017ce to \u015bwietne narz\u0119dzie, kt\u00f3re pomaga lepiej zrozumie\u0107 zasoby ma\u0142ych i \u015brednich klastr\u00f3w. W efekcie zaoszcz\u0119dzi\u0142em nie jedn\u0105 st\u00f3wk\u0119, poniewa\u017c dobra\u0142em odpowiednie typy maszyn i dostosowa\u0142em ograniczenia zasob\u00f3w aplikacji do obci\u0105\u017ce\u0144 roboczych.<\/p>\n<p><\/p>\n<p>Opowiem o zaletach <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex>, ale najpierw wyja\u015bni\u0119, co doprowadzi\u0142o do zamieszania i dlaczego potrzebny by\u0142 solidny monitoring.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Zarz\u0105dza\u0142em kilkoma klastrami od 4 do 50 w\u0119z\u0142\u00f3w. W ka\u017cdym klastrze by\u0142o maksymalnie 200 mikroserwis\u00f3w i aplikacji. Aby efektywniej wykorzysta\u0107 dost\u0119pny sprz\u0119t, wi\u0119kszo\u015b\u0107 wdro\u017ce\u0144 by\u0142a skonfigurowana z burstable pami\u0119ci\u0105 operacyjn\u0105 i zasobami CPU. Dzi\u0119ki temu pod'y mog\u0142y si\u0119gn\u0105\u0107 po dost\u0119pne zasoby, je\u015bli zajdzie taka potrzeba, nie przeszkadzaj\u0105c innym aplikacjom na tym w\u0119\u017ale. No, czy to nie \u015bwietne?<\/p>\n<p><\/p>\n<p>I chocia\u017c klaster zu\u017cywa\u0142 stosunkowo ma\u0142o CPU (8%) i pami\u0119ci (40%), ci\u0105gle mieli\u015bmy problemy z wyparciem pod\u00f3w, gdy pr\u00f3bowa\u0142y przydzieli\u0107 wi\u0119cej pami\u0119ci ni\u017c dost\u0119pne na w\u0119\u017ale. Mieli\u015bmy wtedy tylko jeden panel do monitorowania zasob\u00f3w Kubernetes. Taki w\u0142a\u015bnie:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qr\/cp\/x2\/qrcpx2avguhqnbxxg7trlxfnh4u.png\"><img decoding=\"async\" alt=\"Monitorujemy zasoby klastr\u00f3w Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/4ff784375fd4d01cc420d0d5b6389524.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>Panel Grafana z metrykami cAdvisor<\/em><\/p>\n<p><\/p>\n<p>Z takim panelem w\u0119z\u0142y, kt\u00f3re konsumuj\u0105 du\u017co pami\u0119ci i CPU, nie stanowi\u0105 problemu. Problem polega na zrozumieniu, co jest przyczyn\u0105. Aby pod'y pozosta\u0142y na miejscu, mo\u017cna by\u0142o oczywi\u015bcie ustawi\u0107 gwarantowane zasoby dla wszystkich pod\u00f3w (\u017c\u0105dane zasoby r\u00f3wne limitowi). Ale to nie jest m\u0105dre wykorzystanie sprz\u0119tu. Klaster mia\u0142 kilka setek gigabajt\u00f3w pami\u0119ci, podczas gdy niekt\u00f3re w\u0119z\u0142y cierpia\u0142y na g\u0142\u00f3d, a inne mia\u0142y w zapasie po 4\u201310 GB.<\/p>\n<p><\/p>\n<p>Okazuje si\u0119, \u017ce scheduler Kubernetes nier\u00f3wnomiernie rozdziela\u0142 obci\u0105\u017cenia robocze wed\u0142ug dost\u0119pnych zasob\u00f3w. Scheduler Kubernetes bierze pod uwag\u0119 r\u00f3\u017cne konfiguracje: regu\u0142y affinity, taints i tolerancje, selektory w\u0119z\u0142\u00f3w, kt\u00f3re mog\u0105 ogranicza\u0107 dost\u0119pne w\u0119z\u0142y. W moim przypadku nic takiego nie by\u0142o, a pod'y by\u0142y planowane w zale\u017cno\u015bci od \u017c\u0105danych zasob\u00f3w na ka\u017cdym w\u0119\u017ale.<\/p>\n<p><\/p>\n<p>Dla pod'a wybierany by\u0142 w\u0119ze\u0142 z najwi\u0119ksz\u0105 ilo\u015bci\u0105 dost\u0119pnych zasob\u00f3w, kt\u00f3ry spe\u0142nia\u0142 wymagania \u017c\u0105dania. Okaza\u0142o si\u0119, \u017ce \u017c\u0105dane zasoby na w\u0119z\u0142ach nie pokrywaj\u0105 si\u0119 z rzeczywistym wykorzystaniem i tutaj na pomoc przyszed\u0142 Kube Eagle oraz jego mo\u017cliwo\u015bci monitorowania zasob\u00f3w.<\/p>\n<p><\/p>\n<p>Prawie wszystkie moje klastry Kubernetes by\u0142y monitorowane tylko za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/node_exporter\">Node exporter.<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kube-state-metrics\">Kube State Metrics<\/a><\/noindex>. Node Exporter dostarcza statystyki dotycz\u0105ce wej\u015bcia\/wyj\u015bcia oraz wykorzystania dysku, CPU i pami\u0119ci RAM, podczas gdy Kube State Metrics pokazuje metryki obiekt\u00f3w Kubernetes, na przyk\u0142ad zapotrzebowanie i limity dotycz\u0105ce zasob\u00f3w CPU i pami\u0119ci.<\/p>\n<p><\/p>\n<p>Musimy po\u0142\u0105czy\u0107 metryki zu\u017cycia z metrykami zapotrzebowa\u0144 i limit\u00f3w w Grafanie, a wtedy uzyskamy pe\u0142ne informacje o problemie. Brzmi prosto, ale w rzeczywisto\u015bci w tych dw\u00f3ch narz\u0119dziach etykiety maj\u0105 r\u00f3\u017cne nazwy, a niekt\u00f3re metryki wcale nie maj\u0105 etykiet metadanych. Kube Eagle robi to wszystko samodzielnie, a panel wygl\u0105da tak:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/u3\/ce\/hk\/u3cehkycztlwc9m7lpip-4lw2xe.png\"><img decoding=\"async\" alt=\"Monitorujemy zasoby klastr\u00f3w Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/53898543679d337df5a151b54fb75f5d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/po\/zi\/fm\/pozifm1dgtkf9nsasb42k1faqi4.png\"><img decoding=\"async\" alt=\"Monitorujemy zasoby klastr\u00f3w Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/a549c865b24f90fcc4375ffbb76ea270.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/dashboards\/9871\">Panel monitorowania Kube Eagle<\/a><\/noindex><\/em><\/p>\n<p><\/p>\n<p>Uda\u0142o nam si\u0119 rozwi\u0105za\u0107 wiele problem\u00f3w z zasobami i zaoszcz\u0119dzi\u0107 sprz\u0119t:<\/p>\n<p><\/p>\n<ol>\n<li>Niekt\u00f3rzy deweloperzy nie wiedzieli, ile zasob\u00f3w potrzebuj\u0105 mikroserwisy (lub po prostu nie zwracali na to uwagi). Nie mieli\u015bmy sposobu, aby znale\u017a\u0107 nieprawid\u0142owe zapotrzebowania na zasoby \u2014 do tego potrzebne s\u0105 dane o zu\u017cyciu oraz zapotrzebowania i limity. Teraz widz\u0105 metryki Prometheus, monitoruj\u0105 faktyczne wykorzystanie i dostosowuj\u0105 zapotrzebowania i limity.<\/li>\n<li>Aplikacje JVM zjadaj\u0105 tyle pami\u0119ci RAM, ile s\u0105 w stanie. Garbage Collector zwalnia pami\u0119\u0107 tylko wtedy, gdy wykorzystanie przekracza 75%. A poniewa\u017c wi\u0119kszo\u015b\u0107 serwis\u00f3w korzysta z pami\u0119ci burstable, RAM by\u0142 zawsze zajmowany przez JVM. Dlatego wszystkie te aplikacje Java poch\u0142ania\u0142y znacznie wi\u0119cej pami\u0119ci, ni\u017c oczekiwano.<\/li>\n<li>Niekt\u00f3re aplikacje \u017c\u0105da\u0142y zbyt du\u017co pami\u0119ci, a scheduler Kubernetes nie przydziela\u0142 tych w\u0119z\u0142\u00f3w innym aplikacjom, mimo \u017ce w rzeczywisto\u015bci by\u0142y one mniej obci\u0105\u017cone ni\u017c inne w\u0119z\u0142y. Jeden deweloper przypadkowo doda\u0142 dodatkow\u0105 cyfr\u0119 w zapotrzebowaniu, przejmuj\u0105c du\u017c\u0105 cz\u0119\u015b\u0107 pami\u0119ci RAM: 20 GB zamiast 2. Nikt tego nie zauwa\u017cy\u0142. Aplikacja mia\u0142a 3 repliki, wi\u0119c ucierpia\u0142y a\u017c 3 w\u0119z\u0142y.<\/li>\n<li>Wprowadzili\u015bmy ograniczenia zasob\u00f3w, przeplanowali\u015bmy pody z odpowiednimi zapotrzebowaniami i osi\u0105gn\u0119li\u015bmy idealn\u0105 r\u00f3wnowag\u0119 wykorzystania sprz\u0119tu w ca\u0142ym klastrze. Niekt\u00f3re w\u0119z\u0142y mo\u017cna by\u0142o nawet zamkn\u0105\u0107. Potem zauwa\u017cyli\u015bmy, \u017ce mamy nieprawid\u0142owe maszyny (zorientowane na CPU, a nie na pami\u0119\u0107). Zmienili\u015bmy typ i usun\u0119li\u015bmy jeszcze kilka w\u0119z\u0142\u00f3w.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"itogi\">Podsumowanie<\/h3>\n<p><\/p>\n<p>Z zasobami burstable w klastrze skuteczniej wykorzystujesz dost\u0119pny sprz\u0119t, ale scheduler Kubernetes planuje pody na podstawie zapotrzebowa\u0144, co mo\u017ce przynie\u015b\u0107 k\u0142opoty. Aby upiec dwie pieczenie na jednym ogniu: unika\u0107 problem\u00f3w i maksymalnie wykorzystywa\u0107 zasoby, potrzebny jest dobry monitoring. I do tego si\u0119 przyda. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex> (eksporter Prometheus i panel monitoringu Grafana).<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/447336\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b Kube Eagle\u00a0\u2014 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 Prometheus. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043a\u0440\u0443\u0442\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b \u043d\u0435 \u043e\u0434\u043d\u0443 \u0441\u043e\u0442\u043d\u044e \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u0430\u0448\u0438\u043d \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u0445 Kube Eagle, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u043b \u0441\u044b\u0440-\u0431\u043e\u0440 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23107,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31139","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.1.1 - aioseo.com -->\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\/pl\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitorim-resursy-klasterov-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=\"2019-10-31T18:39:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:39:40+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\udd47Monitorujemy zasoby klastr\u00f3w Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitorim-resursy-klasterov-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":"2019-10-31T18:39:40+00:00","article:modified_time":"2019-10-31T18:39:40+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31139","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":"2026-01-21 04:42:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:22:34","updated":"2026-01-21 04:42:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=31139"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/23107"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=31139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=31139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=31139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}