{"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\/sv\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Uppdatering av Kubernetes-kluster utan driftstopp","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Uppdatering av Kubernetes-kluster utan driftstopp\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Uppdateringsprocessen f\u00f6r din Kubernetes-kluster<\/em><\/p>\n<p><\/p>\n<p>Vid n\u00e5got tillf\u00e4lle n\u00e4r du anv\u00e4nder ett Kubernetes-kluster uppst\u00e5r behovet av att uppdatera de befintliga noderna. Det kan innefatta paketuppdateringar, k\u00e4rnuppdateringar eller distribution av nya virtuella maskinbilder. Inom Kubernetes-terminologi kallas detta <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\"Frivillig St\u00f6rung\"<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Detta inl\u00e4gg \u00e4r en del av en serie p\u00e5 4 inl\u00e4gg:<\/p>\n<p><\/p>\n<ol>\n<li>Detta inl\u00e4gg.<\/li>\n<li>Korrekt avst\u00e4ngning av poddar i ett Kubernetes-kluster<\/li>\n<li>Uppskjutet avslutande av podden vid dess borttagning<\/li>\n<li>Hur man undviker stillest\u00e5nd i ett Kubernetes-kluster med hj\u00e4lp av PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(not. \u00f6vers. \u00f6vers\u00e4ttningar av de \u00f6vriga artiklarna i serien kan f\u00f6rv\u00e4ntas inom kort)<\/em><\/p>\n<p><\/p>\n<p>I denna artikel kommer vi att beskriva alla verktyg som Kubernetes tillhandah\u00e5ller f\u00f6r att uppn\u00e5 noll stillest\u00e5ndstid f\u00f6r de noder som k\u00f6rs i ditt kluster.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Problemdefinition<\/h2>\n<p><\/p>\n<p>Till att b\u00f6rja med kommer vi att anv\u00e4nda en naiv metod f\u00f6r att identifiera problem och utv\u00e4rdera de potentiella riskerna med denna metod och samla kunskap f\u00f6r att l\u00f6sa varje problem vi st\u00f6ter p\u00e5 under hela serien. Resultatet blir en konfiguration som anv\u00e4nder lifecycle hooks, readiness probes och Pod disruption budgets f\u00f6r att uppn\u00e5 v\u00e5r noll stillest\u00e5ndstid. <\/p>\n<p><\/p>\n<p>F\u00f6r att p\u00e5b\u00f6rja v\u00e5r resa, l\u00e5t oss ta ett konkret exempel. Anta att vi har ett Kubernetes-kluster med tv\u00e5 noder d\u00e4r en applikation k\u00f6rs med tv\u00e5 pods, som \u00e4r bakom <code>Tj\u00e4nst<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Uppdatering av Kubernetes-kluster utan driftstopp\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Vi b\u00f6rjar med tv\u00e5 poddar med Nginx och en Tj\u00e4nst som k\u00f6rs p\u00e5 v\u00e5ra tv\u00e5 noder i Kubernetes-klustret.<\/em><\/p>\n<p><\/p>\n<p>Vi vill uppdatera k\u00e4rnversionen av de tv\u00e5 arbetsnoderna i v\u00e5rt kluster. Hur g\u00f6r vi det? En enkel l\u00f6sning skulle vara att ladda nya noder med den uppdaterade konfigurationen och sedan st\u00e4nga av de gamla noderna samtidigt som de nya startas. \u00c4ven om det skulle fungera, finns det flera problem med denna metod:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00e4r du st\u00e4nger av de gamla noderna kommer de k\u00f6rda poddarna p\u00e5 dem ocks\u00e5 att st\u00e4ngas av. Vad h\u00e4nder om poddarna beh\u00f6ver rensas f\u00f6r korrekt avst\u00e4ngning? Den virtualiseringssystem du anv\u00e4nder kanske inte v\u00e4ntar p\u00e5 att rensningsprocessen ska avslutas.<\/li>\n<li>Vad h\u00e4nder om du st\u00e4nger av alla noder samtidigt? Du kommer att f\u00e5 ett betydande stillest\u00e5nd medan poddarna flyttar \u00f6ver till de nya noderna.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vi beh\u00f6ver en metod f\u00f6r korrekt migrering av poddar fr\u00e5n gamla noder och samtidigt vara s\u00e4kra p\u00e5 att inga av v\u00e5ra arbetsfl\u00f6den k\u00f6rs medan vi g\u00f6r \u00e4ndringar f\u00f6r noden. Eller n\u00e4r vi g\u00f6r en fullst\u00e4ndig ers\u00e4ttning av klustret, som i exemplet (det vill s\u00e4ga byter ut VM-bilder), vill vi \u00f6verf\u00f6ra aktiva applikationer fr\u00e5n gamla noder till nya. I b\u00e5da fallen vill vi f\u00f6rhindra planering av nya poddar p\u00e5 gamla noder och sedan avhysa alla k\u00f6rande poddar fr\u00e5n dem. F\u00f6r att uppn\u00e5 dessa m\u00e5l kan vi anv\u00e4nda kommandot <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Ombalansering av alla poddar fr\u00e5n noden<\/h2>\n<p><\/p>\n<p>Drain-operationen m\u00f6jligg\u00f6r ombalansering av alla poddar fr\u00e5n noden. Under utf\u00f6randet av drain markeras noden som unschedulable (flagga <code>NoSchedule<\/code>). Detta f\u00f6rhindrar nya poddar fr\u00e5n att starta p\u00e5 den. Drain b\u00f6rjar sedan avhysa poddar fr\u00e5n noden, avslutar alla beh\u00e5llare som f\u00f6r n\u00e4rvarande k\u00f6rs p\u00e5 noden genom att skicka en signal <code>TERM<\/code> till beh\u00e5llarna i podden.<\/p>\n<p><\/p>\n<p>\u00c4ven om <code>kubectl drain<\/code> \u00c4ven om det fungerar bra f\u00f6r avhysning av poddar, finns det tv\u00e5 faktorer som kan orsaka misslyckande vid utf\u00f6rande av drain-operationen:<\/p>\n<p><\/p>\n<ul>\n<li>Din applikation m\u00e5ste kunna avslutas korrekt n\u00e4r den f\u00e5r <code>TERM<\/code> signalen. N\u00e4r poddar avhyses skickar Kubernetes en signal <code>TERM<\/code> till beh\u00e5llarna och v\u00e4ntar p\u00e5 att de ska stoppa under en angiven tidsperiod, efter vilken, om de inte har stoppat, avslutas de tvingat. I alla fall, om din beh\u00e5llare inte hanterar signalen korrekt, kan du fortfarande st\u00e4nga ner poddar p\u00e5 ett ol\u00e4mpligt s\u00e4tt om de f\u00f6r n\u00e4rvarande \u00e4r aktiva (till exempel om en transaktion p\u00e5g\u00e5r i databasen).<\/li>\n<li>Du f\u00f6rlorar alla poddar som inneh\u00e5ller din applikation. Den kan vara otillg\u00e4nglig vid starten av nya beh\u00e5llare p\u00e5 de nya noderna eller, om dina poddar har distribuerats utan kontroller, kanske de inte startar om \u00f6verhuvudtaget. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Undvik stillest\u00e5nd<\/h2>\n<p><\/p>\n<p>F\u00f6r att minimera stillest\u00e5ndstid vid frivilliga st\u00f6rningar, som vid drain-operationer f\u00f6r noder, erbjuder Kubernetes f\u00f6ljande alternativ f\u00f6r att hantera fel:<\/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>I \u00f6vriga delar av cykeln kommer vi att anv\u00e4nda dessa Kubernetes-funktioner f\u00f6r att mildra konsekvenserna av flytt av poddar. F\u00f6r att l\u00e4ttare f\u00f6lja huvudtankeg\u00e5ngen kommer vi att anv\u00e4nda v\u00e5rt exempel ovan med f\u00f6ljande resurskonfiguration:<\/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>Denna konfiguration \u00e4r ett minimalt exempel <code>Deployment<\/code>, som hanterar nginx-poddar i klustret. Dessutom beskriver konfigurationen en resurs <code>Tj\u00e4nst<\/code>, som kan anv\u00e4ndas f\u00f6r att f\u00e5 \u00e5tkomst till nginx-poddarna i klustret.<\/p>\n<p><\/p>\n<p>Under hela cykeln kommer vi iterativt att ut\u00f6ka denna konfiguration s\u00e5 att den i slut\u00e4nden omfattar alla funktioner som Kubernetes erbjuder f\u00f6r att minska stillest\u00e5ndstiden.<\/p>\n<p><\/p>\n<p><em>F\u00f6r att f\u00e5 en helt implementerad och testad version av Kubernetes-klusteruppdateringar med noll stillest\u00e5ndstid p\u00e5 AWS och andra resurser, bes\u00f6k <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\u00e4s \u00e4ven andra artiklar i v\u00e5r blogg:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Zero Downtime Deployment och databaser<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: Varf\u00f6r \u00e4r det s\u00e5 viktigt att konfigurera systemresursf\u00f6rvaltning?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline - Kubernetes-nativa pipelines<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Bygg dynamiska moduler f\u00f6r Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Introduktion till Hashicorp Consuls Kubernetes-autorisering<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Vad migreringen fr\u00e5n ClickHouse utan autentisering till ClickHouse med autentisering ledde till<\/a><\/noindex><\/li>\n<\/ul>\n<p>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Uppdatera Kubernetes-klustret utan stillest\u00e5nd | ProHoster","description":"Uppdateringsprocessen f\u00f6r din.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}