{"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\/et\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Kubernetes klastrite uuendamine ilma seiskamiseta","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kubernetes klastrite uuendamine ilma seiskamiseta\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Teie Kubernetes-klastri uuendusprotsess<\/em><\/p>\n<p><\/p>\n<p>Kubernetes-klastri kasutamise ajal tekib varem v\u00f5i hiljem vajadus t\u00f6\u00f6kindlate s\u00f5lmede uuendamiseks. See v\u00f5ib h\u00f5lmata pakettuuendusi, tuumauuendusi v\u00f5i uute virtuaalmasinate piltide rakendamist. Kuberneteses t\u00e4hendab see \"Voluntary Disruption\". <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">&quot;Voluntary Disruption&quot;<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>See postitus on osa neljast postitusest:<\/p>\n<p><\/p>\n<ol>\n<li>See postitus.<\/li>\n<li>Podide korrektne v\u00e4ljal\u00fclitamine Kubernetes-klastri raames<\/li>\n<li>\u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 pod&#8217;\u0430 \u043f\u0440\u0438 \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438<\/li>\n<li>Kuidas v\u00e4ltida Kubernetes-klastri t\u00f6\u00f6seisakuid PodDisruptionBudgets'i abil<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(m\u00e4rkus t\u00f5lkijale: kaasnevad artiklid on oodata varsti)<\/em><\/p>\n<p><\/p>\n<p>Selles artiklis kirjeldame k\u00f5iki t\u00f6\u00f6riistu, mida Kubernetes pakub teie klastri s\u00f5lmede nullaja t\u00f6\u00f6katkestuse saavutamiseks.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Probleemi m\u00e4\u00e4ratlemine<\/h2>\n<p><\/p>\n<p>Alguses kasutame esialgset l\u00e4henemist, et m\u00e4\u00e4ratleda probleeme ja hinnata nende l\u00e4henemiste v\u00f5imalikke riske, kogudes teadmisi iga probleemiga tegelemiseks, millega kogu ts\u00fckli v\u00e4ltel silmitsi seisame. Tulemuseks on konfiguratsioon, mis kasutab eluts\u00fckli konksu, valmiduse proove ja Pod disruption budgets'i meie nullaja t\u00f6\u00f6katkestuse saavutamiseks. <\/p>\n<p><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0443\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes \u0438\u0437 \u0434\u0432\u0443\u0445 \u043d\u043e\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0434\u0432\u0443\u043c\u044f pod&#8217;a\u043c\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u0437\u0430 <code>Teenused<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Kubernetes klastrite uuendamine ilma seiskamiseta\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Hakkame pihta kahe pod'iga, kus Nginx ja teenus on k\u00e4ivitatud meie kahes Kubernetes-klastri s\u00f5lmes.<\/em><\/p>\n<p><\/p>\n<p>Soovime uuendada kahe t\u00f6\u00f6kindla s\u00f5lme tuumaversiooni meie klastris. Kuidas me seda teeme? Lihtsaim lahendus oleks laadida uued s\u00f5lmed uuendatud seadistusega ja seej\u00e4rel v\u00e4lja l\u00fclitada vanad s\u00f5lmed, samal ajal uute sissel\u00fckkamisega. Kuigi see t\u00f6\u00f6tab, tekivad sellise l\u00e4henemisega m\u00f5ned probleemid:<\/p>\n<p><\/p>\n<ul>\n<li>Kui v\u00e4lja l\u00fclitate vanad s\u00f5lmed, siis nende peal t\u00f6\u00f6tavad pod\u2019id l\u00fclituvad samuti v\u00e4lja. Mis saab, kui pod\u2019id tuleb \u00f5igeks v\u00e4ljal\u00fclitamiseks puhastada? Teie kasutatav virtualiseerimiss\u00fcsteem ei pruugi oodata puhastusprotsessi l\u00f5puleviimist.<\/li>\n<li>Mis juhtub, kui l\u00fclitate v\u00e4lja k\u00f5ik s\u00f5lmed korraga? Saate m\u00e4rkimisv\u00e4\u00e4rse t\u00f6\u00f6seisaku, kui pod\u2019id liiguvad uutele s\u00f5lmedele.<\/li>\n<\/ul>\n<p><\/p>\n<p>Me vajame \u00f5iget viisi podide migreerimiseks vanadelt noodidelt ning samal ajal peame olema kindlad, et \u00fckski meie t\u00f6\u00f6sisestest protsessidest ei k\u00e4ivitu muudatuste tegemise ajal nodide kohta. V\u00f5i kui teeme kogu klastri asenduse, nagu n\u00e4ites (st asendame VM-pildid), tahame t\u00f6\u00f6tavad rakendused vana nodide pealt uutele \u00fcle kanda. M\u00f5lemal juhul soovime v\u00e4ltida uute podide ajastamist vanadele nodidele ja seej\u00e4rel k\u00f5igi t\u00f6\u00f6tavate podide \u00fcmberpaigutamist. Selle saavutamiseks saame kasutada k\u00e4sku <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">K\u00f5ikide podide \u00fcmberpaigutamine nodilt<\/h2>\n<p><\/p>\n<p>Drain-operatsioon v\u00f5imaldab n\u00f5ustada k\u00f5iki podide nodilt. Drain'i k\u00e4ivitamisel m\u00e4rgitakse node kui unschedulable (lipp <code>NoSchedule<\/code>). See takistab uudsete podide tekke. Seej\u00e4rel drain hakkab podide node'ilt v\u00e4lja t\u00f5stma, l\u00f5petades konteinerid, mis on hetkel nodis t\u00f6\u00f6tavad, edastades neile signaali <code>TERM<\/code> konteineritele podis.<\/p>\n<p><\/p>\n<p>Kuigi <code>kubectl drain<\/code> Kuigi see toimetab podide \u00fcmberpaigutamisega h\u00e4sti, on veel kaks tegurit, mis v\u00f5ivad p\u00f5hjustada drain operatsiooni eba\u00f5nnestumise:<\/p>\n<p><\/p>\n<ul>\n<li>Teie rakendus peab suutma \u00f5iget moodi l\u00f5petada signaali saamisel. <code>TERM<\/code> Kui podid t\u00f5stetakse v\u00e4lja, saadab Kubernetes signaali <code>TERM<\/code> konteineritele ja ootab nende l\u00f5petamist m\u00e4\u00e4ratud aja jooksul, p\u00e4rast mida, kui nad ei ole l\u00f5petanud, l\u00f5petatakse need j\u00f5u abil. Igatahes, kui teie konteiner ei t\u00f5lgenda signaali \u00f5igesti, v\u00f5ite ikkagi l\u00f5petada podid vale moodi, kui nad on mingil konkreetsel hetkel t\u00f6\u00f6s (nt k\u00e4ib tehing andmebaasis).<\/li>\n<li>Te kaotate k\u00f5ik podid, kus asub teie rakendus. See v\u00f5ib olla ajal, mil uued konteinerid alustavad t\u00f6\u00f6d uutelt nodidelt, v\u00f5i kui teie podid on juurutatud ilma kontrolleriteta, ei pruugi need \u00fcldse uuesti k\u00e4ivituda. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">V\u00e4ltige seisakuaega<\/h2>\n<p><\/p>\n<p>Kuna soovime minimaalset seisaku aega vabatahtliku t\u00f5rke korral, n\u00e4iteks nodi drain operatsiooni t\u00f5ttu, pakub Kubernetes j\u00e4rgmisi t\u00f5rkeid v\u00e4hendamise v\u00f5imalusi:<\/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\/\">Eluts\u00fckli konksud<\/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>Ts\u00fckli teistes osades kasutame neid Kubernetes funktsioone podide \u00fcleviimise tagaj\u00e4rgede leevendamiseks. P\u00f5him\u00f5tte j\u00e4lgimise lihtsustamiseks kasutame \u00fclaltoodud n\u00e4idet j\u00e4rgmise ressursikonfiguratsiooniga:<\/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>See config on a minimal example <code>Deployment<\/code>, which manages nginx pods in the cluster. Furthermore, the configuration describes a resource <code>Teenused<\/code>, which can be used to access the nginx pods in the cluster.<\/p>\n<p><\/p>\n<p>Throughout this cycle, we will iteratively expand this configuration so that in the end it includes all capabilities provided by Kubernetes to minimize downtime.<\/p>\n<p><\/p>\n<p><em>To obtain a fully implemented and tested version of Kubernetes cluster updates for zero downtime on AWS and other resources, visit <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\">Vaata ka teisi artikleid meie blogis:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Nulli seiskumise rakendamine ja andmebaasid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: miks on oluline seadistada s\u00fcsteemi ressursside haldamine?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 Kubernetes'e natiivsed pipelines<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">D\u00fcnaamiliste moodulite ehitamine Nginxi jaoks<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Sissejuhatus Hashicorp Consul\u2019i Kubernetes Autoriseerimisse<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Milleni viis migratsioon ClickHouse'ist ilma autentsuseta ClickHouse'ile autentsusega<\/a><\/noindex><\/li>\n<\/ul>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Kubernetes cluster updates without downtime | ProHoster","description":"Update process for yours.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}