{"id":70831,"date":"2020-02-21T14:42:15","date_gmt":"2020-02-21T11:42:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/obnovlenie-kubernetes-klastera-bez-prostoya"},"modified":"2020-03-03T16:14:45","modified_gmt":"2020-03-03T13:14:45","slug":"obnovlenie-kubernetes-klastera-bez-prostoya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Posodobitev Kubernetes klustra brez izpada","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Posodobitev Kubernetes klustra brez izpada\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Postopek posodobitve za va\u0161 Kubernetes klaster<\/em><\/p>\n<p><\/p>\n<p>Ob nekem trenutku pri uporabi Kubernetes klastra se pojavi potreba po posodobitvi delujo\u010dih vozli\u0161\u010d. To lahko vklju\u010duje posodobitve paketov, posodobitev jedra ali uvedbo novih slik virtualnih strojev. V terminologiji Kubernetes to imenujemo <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\"Prostovoljna prekinitev\"<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ta objava je del cikla \u0161tirih objav:<\/p>\n<p><\/p>\n<ol>\n<li>Ta objava.<\/li>\n<li>Pravilno zaklju\u010devanje podov v Kubernetes klastru<\/li>\n<li>Odlo\u017eeno zaklju\u010devanje pod'a pri njegovi odstranitvi<\/li>\n<li>Kako se izogniti zastoju v delu Kubernetes klastra z uporabo PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(op. prev. prevodi drugih \u010dlankov cikla pri\u010dakujte kmalu)<\/em><\/p>\n<p><\/p>\n<p>V tem \u010dlanku bomo opisali vsa orodja, ki jih Kubernetes nudi za dosego ni\u010delnega \u010dasa zastoja za delujo\u010da vozli\u0161\u010da v va\u0161em klastru.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Opredelitev problema<\/h2>\n<p><\/p>\n<p>Sprva bomo uporabili naiven pristop, da opredelimo probleme in ocenimo morebitna tveganja tega pristopa ter nabiramo znanje za re\u0161evanje vsakega od problemov, s katerimi se bomo sre\u010dali skozi celoten cikel. Kot rezultat bomo dobili konfiguracijo, ki uporablja lifecycle hooks, readiness probes in Pod disruption budgets za dosego na\u0161ega ni\u010delnega \u010dasa zastoja. <\/p>\n<p><\/p>\n<p>Da za\u010dnemo na\u0161e potovanje, poglejmo konkreten primer. Recimo, da imamo Kubernetes klaster z dvema vozli, kjer deluje aplikacija s dvema podoma, ki sta za <code>Storitev<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Posodobitev Kubernetes klustra brez izpada\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Za\u010dnimo z dvema podoma z Nginx in storitvijo, zagnanima na na\u0161ih dveh vozli\u0161\u010dih Kubernetes klastra.<\/em><\/p>\n<p><\/p>\n<p>\u017delimo posodobiti razli\u010dico jedra dveh delovnih vozli\u0161\u010d v na\u0161em klastru. Kako to storimo? Enostavna re\u0161itev bi bila nalaganje novih vozli\u0161\u010d s posodobljeno konfiguracijo in nato izklop starej\u0161ih vozli\u0161\u010d, hkrati z zagon novih. \u010ceprav to deluje, se pojavijo dolo\u010dene te\u017eave s takim pristopom:<\/p>\n<p><\/p>\n<ul>\n<li>Ko izklopite starej\u0161a vozli\u0161\u010da, se bodo tudi podi, ki te\u010dejo na njih, izklopili. Kaj storiti, \u010de je potrebno pod o\u010di\u0161\u010diti za pravilno izklop? Virtualizacijski sistem, ki ga uporabljate, morda ne bo po\u010dakal na dokon\u010danje \u010di\u0161\u010denja.<\/li>\n<li>Kaj \u010de izklopite vsa vozli\u0161\u010da hkrati? Prejeli boste znaten zastoj, medtem ko se podi preselijo na nova vozli\u0161\u010da.<\/li>\n<\/ul>\n<p><\/p>\n<p>Potrebujemo na\u010din za pravilno migracijo podov s starih vozli\u0161\u010d in hkrati moramo biti prepri\u010dani, da noben od na\u0161ih delovnih procesov ni spro\u017een, medtem ko spreminjamo vozli\u0161\u010de. Ali ko izvajamo popolno zamenjavo klasterja, kot v primeru (tj. zamenjamo slike VM), \u017eelimo prenesti delujo\u010de aplikacije s starih vozli\u0161\u010d na nove. V obeh primerih \u017eelimo prepre\u010diti razporejanje novih podov na starih vozli\u0161\u010dih in nato izseliti vse aktivne pode. Za dosego teh ciljev lahko uporabimo ukaz <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Preusmeritev vseh podov z vozli\u0161\u010da<\/h2>\n<p><\/p>\n<p>Operacija drain omogo\u010da preusmeritev vseh podov z vozli\u0161\u010da. Med izvajanjem drain je vozli\u0161\u010de ozna\u010deno kot unschedulable (oznake <code>NoSchedule<\/code>). To prepre\u010duje pojavljanje novih podov na njem. Nato drain za\u010dne izseljevati pode z vozli\u0161\u010da, zaklju\u010di delo kontejnerjev, ki so trenutno zagnani na vozli\u0161\u010du, in po\u0161ilja signal <code>TERM<\/code> kontejnerjem v podu.<\/p>\n<p><\/p>\n<p>\u010ceprav <code>kubectl drain<\/code> \u010ceprav odli\u010dno upravlja z izseljevanjem podov, obstaja \u0161e dva dejavnika, ki lahko povzro\u010dita neuspeh pri izvajanju operacije drain:<\/p>\n<p><\/p>\n<ul>\n<li>Va\u0161a aplikacija mora znati pravilno kon\u010dati ob prejemu <code>TERM<\/code> signala. Ko se pode izselijo, Kubernetes po\u0161lje signal <code>TERM<\/code> kontejnerjem in \u010daka na njihovo ustavitev dolo\u010den \u010das, po katerem, \u010de se niso ustavili, jih prisilno zaklju\u010di. V vsakem primeru, \u010de va\u0161 kontejner ne bo pravilno sprejel signala, lahko \u0161e vedno nedotaknjeni ugasnete pode, \u010de so v tistem trenutku aktivni (na primer, ko poteka tranzakcija v BDP).<\/li>\n<li>Izgubite vse pode, ki vsebujejo va\u0161o aplikacijo. Morda bo nedostopna ob zagonu novih kontejnerjev na novih vozli\u0161\u010dih ali, \u010de so va\u0161i pode name\u0161\u010deni brez nadzornikov, se morda sploh ne bodo ponovno zagnali. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Izogibanje izpustom<\/h2>\n<p><\/p>\n<p>Da bi minimalizirali \u010das izpada zaradi prostovoljne prekinitve, kot je operacija drain za vozli\u0161\u010de, Kubernetes ponuja naslednje mo\u017enosti obravnave napak:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/#termination-of-pods\">Graceful termination<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/\">Lifecycle hooks<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#how-disruption-budgets-work\">PodDisruptionBudgets<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>V preostalih delih cikla bomo uporabili te funkcije Kubernetes za omilitev posledic prenosa podov. Da bo la\u017eje slediti osnovni misli, bomo uporabili na\u0161 zgornji primer z naslednjo konfiguracijo virov:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n name: nginx-deployment\n labels:\n   app: nginx\nspec:\n replicas: 2\n selector:\n   matchLabels:\n     app: nginx\n template:\n   metadata:\n     labels:\n       app: nginx\n   spec:\n     containers:\n     - name: nginx\n       image: nginx:1.15\n       ports:\n       - containerPort: 80\n---\nkind: Service\napiVersion: v1\nmetadata:\n name: nginx-service\nspec:\n selector:\n   app: nginx\n ports:\n - protocol: TCP\n   targetPort: 80\n   port: 80<\/code><\/pre>\n<p><\/p>\n<p>Ta konfiguracija je minimalni primer <code>Deployment<\/code>, ki upravlja s pod'i nginx v grozdu. Poleg tega konfiguracija opisuje sredstvo <code>Storitev<\/code>, ki se lahko uporablja za dostop do pod'ov nginx v grozdu.<\/p>\n<p><\/p>\n<p>Vsak cikel bomo iterativno \u0161irili to konfiguracijo, da bo na koncu vklju\u010dila vse mo\u017enosti, ki jih Kubernetes ponuja za zmanj\u0161anje \u010dasa izpada.<\/p>\n<p><\/p>\n<p><em>\u010ce \u017eelite pridobiti popolnoma implementirano in testirano razli\u010dico posodobitev grozda Kubernetes za ni\u010delni \u010das izpada na AWS in drugih virih, obi\u0161\u010dite <noindex><a rel=\"nofollow\" href=\"https:\/\/gruntwork.io\/\">Gruntwork.io<\/a><\/noindex>.<\/em><\/p>\n<p><\/p>\n<h2 id=\"takzhe-chitayte-drugie-stati-v-nashem-bloge\">Preberite tudi druge \u010dlanke v na\u0161em blogu:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Zero Downtime Deployment in baze podatkov<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: zakaj je tako pomembno nastaviti upravljanje z viri sistema?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 Kubernetes-nativni pipelines<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Zbira dinami\u010dnih modulov za Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Uvod u autorizaciju Hashicorp Consul-a za Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Kaj je privedlo do migracije iz ClickHouse brez avtorizacije na ClickHouse z avtorizacijo<\/a><\/noindex><\/li>\n<\/ul>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/489164\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u043e\u0434. \u041e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Kubernetes \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &quot;Voluntary Disruption&quot;. \u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0446\u0438\u043a\u043b\u0430 \u0438\u0437 4 \u043f\u043e\u0441\u0442\u043e\u0432: \u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b pod\u2019\u043e\u0432 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":70832,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-70831","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e.\" \/>\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\/sl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\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-02-21T11:42:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:45+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\udd47Posodobitev Kubernetes-grozda brez izpada | ProHoster","description":"Postopek posodobitve za va\u0161.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f | ProHoster","og:description":"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","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-02-21T11:42:15+00:00","article:modified_time":"2020-03-03T13:14:45+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"70831","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 19:13:22","updated":"2022-09-29 13:06:50","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}