{"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\/da\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Opdatering af Kubernetes-klyngen uden nedetid","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Opdatering af Kubernetes-klyngen uden nedetid\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Opdateringsprocessen for din Kubernetes-klynge<\/em><\/p>\n<p><\/p>\n<p>P\u00e5 et tidspunkt, n\u00e5r du bruger din Kubernetes-klynge, opst\u00e5r der et behov for at opdatere de aktive noder. Dette kan inkludere opdateringer af pakker, opdatering af kernen eller implementering af nye billeder af virtuelle maskiner. I Kubernetes-terminologi kaldes dette <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\"Frivillig Afbrydelse\"<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Dette indl\u00e6g er en del af en cyklus p\u00e5 4 indl\u00e6g:<\/p>\n<p><\/p>\n<ol>\n<li>Dette indl\u00e6g.<\/li>\n<li>Korrekt nedlukning af pods i Kubernetes-klyngen<\/li>\n<li>Forsinket afslutning af pod'en ved dens sletning<\/li>\n<li>Hvordan man undg\u00e5r nedetid i Kubernetes-klyngen ved hj\u00e6lp af PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(note til overs\u00e6tteren - overs\u00e6ttelser af de \u00f8vrige artikler i cyklen kan forventes snart)<\/em><\/p>\n<p><\/p>\n<p>I denne artikel vil vi beskrive alle de v\u00e6rkt\u00f8jer, som Kubernetes tilbyder for at opn\u00e5 nul nedetid for de noder, der k\u00f8rer i din klynge.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Definere problemet<\/h2>\n<p><\/p>\n<p>I starten vil vi bruge en naiv tilgang til at definere problemerne og vurderer de potentielle risici ved denne tilgang og samle viden til at l\u00f8se hvert af de problemer, vi m\u00f8der i l\u00f8bet af cyklen. Som resultat vil vi opn\u00e5 en konfiguration, der bruger lifecycle hooks, readiness probes og Pod disruption budgets for at n\u00e5 vores nul nedetid. <\/p>\n<p><\/p>\n<p>For at starte vores rejse, lad os tage et konkret eksempel. Antag, at vi har et Kubernetes-kluster med to noder, hvor en applikation k\u00f8rer med to pods, der er bag <code>Service<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Opdatering af Kubernetes-klyngen uden nedetid\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Lad os begynde med to pods med Nginx og Service, der k\u00f8rer p\u00e5 vores to noder i Kubernetes-klyngen.<\/em><\/p>\n<p><\/p>\n<p>Vi \u00f8nsker at opdatere kerneversionen p\u00e5 de to arbejdende noder i vores klynge. Hvordan g\u00f8r vi det? En simpel l\u00f8sning ville v\u00e6re at starte nye noder med den opdaterede konfiguration og derefter slukke for de gamle noder, samtidig med at de nye startes. Selvom dette vil fungere, vil der v\u00e6re nogle problemer med denne tilgang:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00e5r du slukker for de gamle noder, vil de k\u00f8rende pods ogs\u00e5 blive slukket. Hvad hvis pods skal ryddes for korrekt afbrydelse? Virtualiseringssystemet, du bruger, venter m\u00e5ske ikke p\u00e5, at rydningsprocessen er f\u00e6rdig.<\/li>\n<li>Hvad hvis du slukker for alle noder samtidig? Du vil opleve en betydelig nedetid, mens pods flytter til de nye noder.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vi har brug for en m\u00e5de at migrere pods korrekt fra de gamle noder, samtidig med at vi er sikre p\u00e5, at ingen af vores arbejdsprocesser er i gang, mens vi foretager \u00e6ndringer for noden. Eller n\u00e5r vi laver en fuldst\u00e6ndig udskiftning af klyngen, som i eksemplet (dvs. vi erstatter VM-billederne), \u00f8nsker vi at flytte aktive applikationer fra de gamle noder til de nye. I begge tilf\u00e6lde \u00f8nsker vi at forhindre planl\u00e6gning af nye pods p\u00e5 de gamle noder, og derefter fjerne alle k\u00f8rende pods fra dem. For at opn\u00e5 disse m\u00e5l kan vi bruge kommandoen <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Flytning af alle pods fra noden<\/h2>\n<p><\/p>\n<p>Drain-operationen tillader os at flytte alle pods fra noden. Under udf\u00f8relsen af drain bliver noden markeret som unschedulable (flag <code>i kubectl. Angiv n\u00f8gle og v\u00e6rdi, og derefter en taint s\u00e5som<\/code>). Dette forhindrer nye pods i at blive planlagt p\u00e5 den. Derefter begynder drain at fjerne pods fra noden, afslutter arbejdet i de containere, der i \u00f8jeblikket k\u00f8rer p\u00e5 noden ved at sende signalet <code>TERM<\/code> til containere i pod'en.<\/p>\n<p><\/p>\n<p>Selvom <code>kubectl drain<\/code> Selvom den klarer at fjerne pods, er der yderligere to faktorer, som kan resultere i, at drain-operationen mislykkes:<\/p>\n<p><\/p>\n<ul>\n<li>Din applikation skal kunne afsluttes korrekt, n\u00e5r der sendes <code>TERM<\/code> et signal. N\u00e5r pods flyttes, sender Kubernetes et signal <code>TERM<\/code> til containerne og venter et angivet tidsrum p\u00e5, at de stopper, hvorefter de, hvis de ikke er stoppet, afsluttes med tvang. Uanset hvad, hvis din container ikke reagerer korrekt p\u00e5 signalet, kan du stadig slukke for pods inkorrekt, hvis de i det specifikke \u00f8jeblik k\u00f8rer (f.eks. hvis der er en transaktion i databasen).<\/li>\n<li>Du mister alle pods, der indeholder din applikation. Den kan v\u00e6re utilg\u00e6ngelig, n\u00e5r de nye containere startes p\u00e5 de nye noder, eller hvis dine pods er blevet distribueret uden controllere, kan de m\u00e5ske slet ikke genstartes. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Undg\u00e5 nedetid<\/h2>\n<p><\/p>\n<p>For at minimere nedetiden fra frivillig forstyrrelse, som f.eks. fra drain-operationen for noden, giver Kubernetes f\u00f8lgende muligheder for fejlh\u00e5ndtering:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/#termination-of-pods\">Mild afslutning<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/\">Livscyklus-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>I de \u00f8vrige dele af cyklussen vil vi bruge disse Kubernetes-funktioner til at mindske konsekvenserne ved flytning af pods. For at f\u00f8lge hovedideen lettere, vil vi bruge vores ovenst\u00e5ende eksempel med f\u00f8lgende ressourcekonfiguration:<\/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>Denne konfiguration er et minimalt eksempel <code>Deployment<\/code>, der styrer nginx pods i klyngen. Desuden beskriver konfigurationen en ressource <code>Service<\/code>, som kan bruges til at tilg\u00e5 nginx pods i klyngen.<\/p>\n<p><\/p>\n<p>I l\u00f8bet af cyklen vil vi iterativt udvide denne konfiguration, s\u00e5 den til sidst inkluderer alle de funktioner, som Kubernetes tilbyder for at reducere nedetid.<\/p>\n<p><\/p>\n<p><em>For at f\u00e5 en fuldt implementeret og testet version af opdateringerne til Kubernetes-klyngen for nul nedetid p\u00e5 AWS og andre ressourcer, bes\u00f8g <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\">L\u00e6s ogs\u00e5 andre artikler p\u00e5 vores blog:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Zero Downtime Deployment og databaser<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: hvorfor det er s\u00e5 vigtigt at konfigurere ressourceh\u00e5ndtering?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 Kubernetes-native pipelines<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Byggelse af dynamiske moduler til Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Introduksjon til Hashicorp Consul\u2019s Kubernetes-autorisering<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Hvad migrationen fra ClickHouse med autorisation til ClickHouse uden autorisation f\u00f8rte til<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Opdatering af Kubernetes-klynge uden nedetid | ProHoster","description":"Opdateringsprocessen for din.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}