{"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\/hr\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"A\u017euriranje Kubernetes klastera bez zastoja","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"A\u017euriranje Kubernetes klastera bez zastoja\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Proces a\u017euriranja za va\u0161 Kubernetes klaster<\/em><\/p>\n<p><\/p>\n<p>U nekom trenutku kori\u0161tenja Kubernetes klastera pojavljuje se potreba za a\u017euriranjem aktivnih nodova. To mo\u017ee uklju\u010divati a\u017euriranja paketa, a\u017euriranje jezgre ili implementaciju novih slika virtualnih strojeva. U terminologiji Kubernetes to se naziva <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\u201eDobrovoljna prekidanje\u201c<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ova objava je dio ciklusa od 4 objave:<\/p>\n<p><\/p>\n<ol>\n<li>Ova objava.<\/li>\n<li>Ispravno ga\u0161enje podova u Kubernetes klasteru<\/li>\n<li>Odgo\u0111eno uklanjanje pod-a prilikom njegove brisanja<\/li>\n<li>Kako izbje\u0107i zastoj u radu Kubernetes klastera pomo\u0107u PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(napomena prevo\u0111a\u010da: prijevode preostalih \u010dlanaka ciklusa o\u010dekujte uskoro)<\/em><\/p>\n<p><\/p>\n<p>U ovom \u010dlanku opisat \u0107emo sve alate koje Kubernetes pru\u017ea za postizanje nultog vremena zastoja za aktivne nodove u va\u0161em klasteru.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Definiranje problema<\/h2>\n<p><\/p>\n<p>U po\u010detku \u0107emo koristiti naive pristup, definirati probleme i procijeniti potencijalne rizike tog pristupa, te akumulirati znanja za rje\u0161avanje svakog od problema na koje \u0107emo nai\u0107i tijekom cijelog ciklusa. Kao rezultat, dobit \u0107emo konfiguraciju koja koristi lifecycle hooks, readiness probes i Pod disruption budgets za postizanje na\u0161eg nultog vremena zastoja. <\/p>\n<p><\/p>\n<p>Da bismo zapo\u010deli na\u0161 put, uzmimo konkretan primjer. Pretpostavimo da imamo Kubernetes klaster s dva \u010dvora, u kojem se pokre\u0107e aplikacija s dva pod-a koja se nalaze iza <code>Service<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"A\u017euriranje Kubernetes klastera bez zastoja\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Zapo\u010dnimo s dva poda s Nginx i Service pokrenuta na na\u0161ih dvaju nodovima Kubernetes klastera.<\/em><\/p>\n<p><\/p>\n<p>\u017delimo a\u017eurirati verziju jezgre dvaju radnih nodova u na\u0161em klasteru. Kako bismo to u\u010dinili? Jednostavno rje\u0161enje bi bilo pokrenuti nove nodove s a\u017euriranom konfiguracijom, a zatim isklju\u010diti stare nodove, istodobno pokre\u0107u\u0107i nove. Iako \u0107e to funkcionirati, bit \u0107e nekoliko problema s takvim pristupom:<\/p>\n<p><\/p>\n<ul>\n<li>Kada isklju\u010dite stare nodove, podovi koji se na njima izvode tako\u0111er \u0107e biti isklju\u010deni. \u0160to ako se podovi trebaju o\u010distiti za pravilno isklju\u010divanje? Sustav virtualizacije koji koristite mo\u017eda ne\u0107e pri\u010dekati zavr\u0161etak procesa \u010di\u0161\u0107enja.<\/li>\n<li>\u0160to ako isklju\u010dite sve nodove istodobno? Dobit \u0107ete zna\u010dajan zastoj dok se podovi preseljavaju na nove nodove.<\/li>\n<\/ul>\n<p><\/p>\n<p>Trebamo na\u010din ispravne migracije podova sa starih \u010dvorova, uz osiguranje da nijedan od na\u0161ih radnih procesa nije pokrenut dok vr\u0161imo promjene na \u010dvoru. Ili kada radimo potpunu zamjenu klastera, kao u primjeru (tj. zamjenjujemo slike VM), \u017eelimo prenijeti aktivne aplikacije sa starih \u010dvorova na nove. U oba slu\u010daja \u017eelimo sprije\u010diti planiranje novih podova na starim \u010dvorovima, a zatim iseliti sve pokrenute podove s njih. Kako bismo postigli te ciljeve, mo\u017eemo koristiti naredbu <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Preusmjeravanje svih podova s \u010dvora<\/h2>\n<p><\/p>\n<p>Operacija drain omogu\u0107ava preusmjeravanje svih podova s \u010dvora. Tijekom izvr\u0161avanja drain \u010dvor se ozna\u010dava kao unschedulable (oznaka <code>NoSchedule<\/code>). To sprje\u010dava pojavu novih podova na njemu. Zatim drain po\u010dinje iseljavati podove s \u010dvora, zavr\u0161ava rad kontejnera koji su trenutno pokrenuti na \u010dvoru slanjem signala <code>TERM<\/code> kontejnerima u podu.<\/p>\n<p><\/p>\n<p>Iako <code>kubectl drain<\/code> odli\u010dan je za iseljavanje podova, no postoje jo\u0161 dva faktora koji mogu uzrokovati neuspjeh prilikom izvr\u0161avanja operacije drain:<\/p>\n<p><\/p>\n<ul>\n<li>Va\u0161a aplikacija mora biti u mogu\u0107nosti ispravno zavr\u0161iti kada primi <code>TERM<\/code> signal. Kada se podovi iseljavaju, Kubernetes \u0161alje signal <code>TERM<\/code> kontejnerima i \u010deka da se zaustave odre\u0111eno vrijeme, nakon \u010dega, ako se nisu zaustavili, silom ih zatvara. U svakom slu\u010daju, ako va\u0161 kontejner ne reagira na signal ispravno, jo\u0161 uvijek mo\u017eete isklju\u010diti podove neispravno, ako su u tim trenucima aktivni (npr. ako se izvodi transakcija u BDP-u).<\/li>\n<li>Gubite sve podove koji sadr\u017ee va\u0161u aplikaciju. Ona mo\u017ee biti nedostupna u trenutku pokretanja novih kontejnera na novim \u010dvorovima ili, ako su va\u0161i podovi raspore\u0111eni bez kontrolera, mo\u017eda se ne\u0107e ponovno pokrenuti uop\u0107e. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Izbjegavanje zastoja<\/h2>\n<p><\/p>\n<p>Kako bismo minimalizirali vrijeme zastoja od voluntary disruption, kao \u0161to je operacija drain za \u010dvor, Kubernetes nudi sljede\u0107e opcije za upravljanje neuspjesima:<\/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>U ostalim dijelovima ciklusa koristit \u0107emo ove funkcije Kubernetes-a za ubla\u017eavanje posljedica migracije podova. Kako bismo lak\u0161e pratili osnovnu misao, koristit \u0107emo na\u0161 prethodni primjer s slijede\u0107om konfiguracijom resursa:<\/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>Ova konfiguracija je minimalni primjer <code>Deployment<\/code>, koji upravlja podovima nginx u klasteru. Nadalje, konfiguracija opisuje resurs <code>Service<\/code>, koji se mo\u017ee koristiti za pristup podovima nginx u klasteru.<\/p>\n<p><\/p>\n<p>Tijekom \u010ditavog ciklusa \u0107emo iterativno pro\u0161irivati ovu konfiguraciju, tako da \u0107e na kraju obuhvatiti sve mogu\u0107nosti koje Kubernetes nudi za smanjenje vremena zastoja.<\/p>\n<p><\/p>\n<p><em>Kako biste dobili potpuno implementiranu i testiranu verziju nadogradnji Kubernetes klastera za nulti vrijeme zastoja na AWS-u i drugim resursima, posjetite <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\">Tako\u0111er pro\u010ditajte druge \u010dlanke na 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 i baze podataka<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: za\u0161to je va\u017eno postaviti upravljanje resursima sustava?<\/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\/\">Izrada dinami\u010dkih modula za Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Uvod u Hashicorp Consulovu autorizaciju za Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">K \u010demu je dovela migracija s ClickHousea bez autorizacije na ClickHouse s autorizacijom<\/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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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\udd47Nadogradnja Kubernetes klastera bez zastoja | ProHoster","description":"Proces nadogradnje za va\u0161u.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}