{"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\/pt\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Atualiza\u00e7\u00e3o do cluster Kubernetes sem downtime","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Atualiza\u00e7\u00e3o do cluster Kubernetes sem downtime\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>O processo de atualiza\u00e7\u00e3o para o seu cluster Kubernetes<\/em><\/p>\n<p><\/p>\n<p>Em algum momento, ao usar um cluster Kubernetes, surge a necessidade de atualizar os n\u00f3s em funcionamento. Isso pode incluir atualiza\u00e7\u00f5es de pacotes, atualiza\u00e7\u00e3o do n\u00facleo ou implanta\u00e7\u00e3o de novas imagens de m\u00e1quinas virtuais. Na terminologia do Kubernetes, isso \u00e9 chamado de <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\"Interrup\u00e7\u00e3o Volunt\u00e1ria\"<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Este post \u00e9 parte de um ciclo de 4 posts:<\/p>\n<p><\/p>\n<ol>\n<li>Este post.<\/li>\n<li>Finaliza\u00e7\u00e3o correta dos pods em um cluster Kubernetes<\/li>\n<li>Finaliza\u00e7\u00e3o adiada do pod ao ser removido<\/li>\n<li>Como evitar downtime em um cluster Kubernetes usando PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(Nota do tradutor: as tradu\u00e7\u00f5es dos outros artigos do ciclo estar\u00e3o dispon\u00edveis em breve)<\/em><\/p>\n<p><\/p>\n<p>Neste artigo, descreveremos todas as ferramentas que o Kubernetes oferece para alcan\u00e7ar zero downtime para os n\u00f3s em seu cluster.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Defini\u00e7\u00e3o do problema<\/h2>\n<p><\/p>\n<p>A princ\u00edpio, usaremos uma abordagem ing\u00eanua, identificando problemas e avaliando os riscos potenciais dessa abordagem, acumulando conhecimento para resolver cada um dos problemas que encontrarmos ao longo do ciclo. Como resultado, teremos uma configura\u00e7\u00e3o que utiliza hooks de ciclo de vida, probes de prontid\u00e3o e or\u00e7amentos de interrup\u00e7\u00e3o de pods para alcan\u00e7ar nosso objetivo de zero downtime. <\/p>\n<p><\/p>\n<p>Para come\u00e7ar nossa jornada, vamos usar um exemplo espec\u00edfico. Suponha que temos um cluster Kubernetes com duas n\u00f3des, onde um aplicativo est\u00e1 em execu\u00e7\u00e3o com dois pods, localizados atr\u00e1s <code>Service<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Atualiza\u00e7\u00e3o do cluster Kubernetes sem downtime\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Come\u00e7aremos com dois pods com Nginx e um Service sendo executados em nossos dois n\u00f3s do cluster Kubernetes.<\/em><\/p>\n<p><\/p>\n<p>Queremos atualizar a vers\u00e3o do n\u00facleo dos dois n\u00f3s de trabalho em nosso cluster. Como faremos isso? Uma solu\u00e7\u00e3o simples seria inicializar novos n\u00f3s com a configura\u00e7\u00e3o atualizada e, em seguida, desligar os n\u00f3s antigos, enquanto ligamos os novos. Embora isso funcione, haver\u00e1 alguns problemas com essa abordagem:<\/p>\n<p><\/p>\n<ul>\n<li>Quando voc\u00ea desligar os n\u00f3s antigos, os pods em execu\u00e7\u00e3o neles tamb\u00e9m ser\u00e3o desligados. E se os pods precisarem ser limpos para uma desconex\u00e3o adequada? O sistema de virtualiza\u00e7\u00e3o que voc\u00ea est\u00e1 usando pode n\u00e3o aguardar o t\u00e9rmino do processo de limpeza.<\/li>\n<li>E se voc\u00ea desligar todos os n\u00f3s ao mesmo tempo? Voc\u00ea ter\u00e1 um downtime consider\u00e1vel enquanto os pods s\u00e3o realocados para os novos n\u00f3s.<\/li>\n<\/ul>\n<p><\/p>\n<p>Precisamos de uma maneira adequada de migrar pods de n\u00f3s antigos e, ao mesmo tempo, garantir que nenhum dos nossos processos de trabalho esteja em execu\u00e7\u00e3o enquanto fazemos altera\u00e7\u00f5es no n\u00f3. Ou, quando fazemos uma substitui\u00e7\u00e3o completa do cluster, como no exemplo (ou seja, substituindo imagens de VM), queremos transferir aplicativos em funcionamento de n\u00f3s antigos para novos. Em ambos os casos, queremos evitar o agendamento de novos pods em n\u00f3s antigos e, em seguida, desalojar todos os pods em execu\u00e7\u00e3o deles. Para alcan\u00e7ar esses objetivos, podemos usar o comando <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Redistribui\u00e7\u00e3o de todos os pods do n\u00f3<\/h2>\n<p><\/p>\n<p>A opera\u00e7\u00e3o drain permite redistribuir todos os pods do n\u00f3. Durante a execu\u00e7\u00e3o do drain, o n\u00f3 \u00e9 marcado como n\u00e3o agend\u00e1vel (flag <code>NoSchedule<\/code>). Isso impede que novos pods sejam agendados nele. Em seguida, o drain come\u00e7a a desalojar os pods do n\u00f3, finalizando os cont\u00eaineres que est\u00e3o em execu\u00e7\u00e3o no n\u00f3 atualmente, enviando o sinal <code>TERM<\/code> para os cont\u00eaineres no pod.<\/p>\n<p><\/p>\n<p>Embora <code>kubectl drain<\/code> Embora se saia bem ao desalojar pods, h\u00e1 mais dois fatores que podem causar falhas na opera\u00e7\u00e3o drain:<\/p>\n<p><\/p>\n<ul>\n<li>Seu aplicativo deve ser capaz de finalizar corretamente ao receber <code>TERM<\/code> o sinal. Quando os pods s\u00e3o desalojados, o Kubernetes envia um sinal <code>TERM<\/code> para os cont\u00eaineres e aguarda sua parada por um determinado per\u00edodo, ap\u00f3s o qual, se n\u00e3o tiverem parado, finaliza-os for\u00e7osamente. De qualquer forma, se seu cont\u00eainer n\u00e3o atender ao sinal corretamente, voc\u00ea ainda pode desligar pods de maneira inadequada se eles estiverem em funcionamento naquele momento espec\u00edfico (por exemplo, se uma transa\u00e7\u00e3o estiver sendo realizada no BD).<\/li>\n<li>Voc\u00ea perde todos os pods que cont\u00eam seu aplicativo. Ele pode estar indispon\u00edvel no momento do in\u00edcio de novos cont\u00eaineres em novos n\u00f3s ou, se seus pods estiverem implantados sem controladores, eles podem n\u00e3o reiniciar de forma alguma. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Evitando o tempo de inatividade<\/h2>\n<p><\/p>\n<p>Para minimizar o tempo de inatividade de interrup\u00e7\u00f5es volunt\u00e1rias, como a opera\u00e7\u00e3o drain para o n\u00f3, o Kubernetes oferece as seguintes op\u00e7\u00f5es para lidar com falhas:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/#termination-of-pods\">Termina\u00e7\u00e3o graciosa<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/\">Ganchos de ciclo de vida<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#how-disruption-budgets-work\">Or\u00e7amentos de interrup\u00e7\u00e3o de pod<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Nas demais partes do ciclo, usaremos essas fun\u00e7\u00f5es do Kubernetes para atenuar os efeitos da migra\u00e7\u00e3o de pods. Para facilitar o acompanhamento da ideia principal, utilizaremos nosso exemplo acima com a seguinte configura\u00e7\u00e3o de recursos:<\/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>Esta configura\u00e7\u00e3o \u00e9 um exemplo m\u00ednimo <code>Deployment<\/code>, que gerencia pods nginx no cluster. Al\u00e9m disso, a configura\u00e7\u00e3o descreve o recurso <code>Service<\/code>, que pode ser utilizado para acessar os pods nginx no cluster.<\/p>\n<p><\/p>\n<p>Ao longo de todo o ciclo, expandiremos iterativamente esta configura\u00e7\u00e3o, de modo que, ao final, ela inclua todas as capacidades fornecidas pelo Kubernetes para reduzir o tempo de inatividade.<\/p>\n<p><\/p>\n<p><em>Para obter uma vers\u00e3o completamente implementada e testada de atualiza\u00e7\u00f5es do cluster Kubernetes com tempo de inatividade zero na AWS e outros recursos, visite <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\">Leia tamb\u00e9m outros artigos em nosso blog:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Implanta\u00e7\u00e3o de Zero Downtime e bancos de dados<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: por que \u00e9 t\u00e3o importante configurar a gest\u00e3o de recursos do sistema?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 pipelines nativos de Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Compila\u00e7\u00e3o de m\u00f3dulos din\u00e2micos para Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Introdu\u00e7\u00e3o \u00e0 Autoriza\u00e7\u00e3o do Kubernetes do Hashicorp Consul<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Para onde nos levou a migra\u00e7\u00e3o do ClickHouse sem autentica\u00e7\u00e3o para o ClickHouse com autentica\u00e7\u00e3o<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fonte: <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.5 - 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\/pt\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Atualiza\u00e7\u00e3o do cluster Kubernetes sem tempo de inatividade | ProHoster","description":"O processo de atualiza\u00e7\u00e3o para o seu.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}