{"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\/ro\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Actualizarea clusterului Kubernetes f\u0103r\u0103 timpi de nefunc\u021bionare","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Actualizarea clusterului Kubernetes f\u0103r\u0103 timpi de nefunc\u021bionare\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Procesul de actualizare pentru clusterul dvs. Kubernetes<\/em><\/p>\n<p><\/p>\n<p>La un moment dat, utiliz\u00e2nd un cluster Kubernetes, apare necesitatea de a actualiza nodurile func\u021bionale. Aceasta poate include actualiz\u0103ri ale pachetelor, actualizarea nucleului sau desf\u0103\u0219urarea de noi imagini ale ma\u0219inilor virtuale. \u00cen terminologia Kubernetes, aceasta se nume\u0219te <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\u201eInterven\u021bie Voluntar\u0103\u201c<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Aceast\u0103 postare face parte dintr-un ciclu de 4 post\u0103ri:<\/p>\n<p><\/p>\n<ol>\n<li>Aceast\u0103 postare.<\/li>\n<li>Finalizarea corect\u0103 a pod-urilor \u00een clusterul Kubernetes<\/li>\n<li>Finalizarea \u00eent\u00e2rziat\u0103 a pod-ului la \u0219tergerea acestuia<\/li>\n<li>Cum s\u0103 evita\u021bi timpilor de nefunc\u021bionare \u00een clusterul Kubernetes cu ajutorul PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(nota traduc\u0103torului: a\u0219tepta\u021bi traducerile celorlalte articole din ciclu \u00een cur\u00e2nd)<\/em><\/p>\n<p><\/p>\n<p>\u00cen acest articol, vom descrie toate instrumentele pe care Kubernetes le ofer\u0103 pentru a ob\u021bine un timp de nefunc\u021bionare zero pentru nodurile active din clusterul dvs.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Definirea problemei<\/h2>\n<p><\/p>\n<p>La \u00eenceput, vom folosi o abordare naiv\u0103, definind problemele \u0219i evalu\u00e2nd riscurile poten\u021biale ale acestei abord\u0103ri, acumul\u00e2nd astfel cuno\u0219tin\u021be pentru a rezolva fiecare dintre problemele pe care le \u00eent\u00e2lnim pe parcursul \u00eentregului ciclu. Drept rezultat, vom ob\u021bine o configura\u021bie care utilizeaz\u0103 lifecycle hooks, readiness probes \u0219i Pod disruption budgets pentru a atinge timpul nostru zero de nefunc\u021bionare. <\/p>\n<p><\/p>\n<p>Pentru a \u00eencepe c\u0103l\u0103toria noastr\u0103, s\u0103 lu\u0103m un exemplu concret. S\u0103 presupunem c\u0103 avem un cluster Kubernetes format din dou\u0103 noduri, pe care ruleaz\u0103 o aplica\u021bie cu dou\u0103 pod-uri, situate \u00een spatele <code>Serviciu<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Actualizarea clusterului Kubernetes f\u0103r\u0103 timpi de nefunc\u021bionare\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>S\u0103 \u00eencepem cu dou\u0103 pod-uri cu Nginx \u0219i un serviciu rulate pe cele dou\u0103 noduri ale clusterului nostru Kubernetes.<\/em><\/p>\n<p><\/p>\n<p>Dorim s\u0103 actualiz\u0103m versiunea nucleului celor dou\u0103 noduri de lucru din clusterul nostru. Cum o vom face? O solu\u021bie simpl\u0103 ar fi s\u0103 \u00eenc\u0103rc\u0103m noduri noi cu configura\u021bia actualizat\u0103 \u0219i apoi s\u0103 oprim nodurile vechi, \u00een timp ce pornim cele noi. De\u0219i aceasta va func\u021biona, vor ap\u0103rea c\u00e2teva probleme cu aceast\u0103 abordare:<\/p>\n<p><\/p>\n<ul>\n<li>C\u00e2nd opri\u021bi nodurile vechi, pod-urile rulate pe acestea vor fi de asemenea oprite. Ce se \u00eent\u00e2mpl\u0103 dac\u0103 pod-urile trebuie cur\u0103\u021bate pentru o deconectare corect\u0103? Sistemul de virtualizare pe care \u00eel utiliza\u021bi poate s\u0103 nu a\u0219tepte finalizarea procesului de cur\u0103\u021bare.<\/li>\n<li>Ce se \u00eent\u00e2mpl\u0103 dac\u0103 opri\u021bi toate nodurile simultan? Ve\u021bi experimenta un timp considerabil de nefunc\u021bionare \u00een timp ce pod-urile sunt mutate pe noile noduri.<\/li>\n<\/ul>\n<p><\/p>\n<p>Avem nevoie de un mod corect de migrare a pod-urilor de pe noduri vechi \u0219i, de asemenea, trebuie s\u0103 ne asigur\u0103m c\u0103 niciunul dintre procesele noastre de lucru nu este \u00een execu\u021bie \u00een timp ce facem modific\u0103ri la nod. Sau c\u00e2nd facem o \u00eenlocuire complet\u0103 a cluster-ului, ca \u00een exemplul acesta (adic\u0103 \u00eenlocuind imaginile VM), dorim s\u0103 transfer\u0103m aplica\u021biile func\u021bionale de pe nodurile vechi pe cele noi. \u00cen ambele cazuri, dorim s\u0103 prevenim programarea unor noi pod-uri pe nodurile vechi pentru a evacua toate pod-urile \u00een execu\u021bie de pe acestea. Pentru a atinge aceste obiective, putem folosi comanda <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Repartizarea tuturor pod-urilor de pe nod<\/h2>\n<p><\/p>\n<p>Opera\u021biunea drain permite repartizarea tuturor pod-urilor de pe nod. \u00cen timpul execu\u021biei drain, nodul este marcat ca neschedulabil (flagra <code>NoSchedule<\/code>). Aceasta \u00eempiedic\u0103 apari\u021bia de noi pod-uri pe acesta. Apoi, drain \u00eencepe s\u0103 evacueze pod-urile de pe nod, oprind containerele care sunt \u00een prezent \u00een execu\u021bie pe nod, trimi\u021b\u00e2nd semnalul <code>TERM<\/code> la containerele din pod.<\/p>\n<p><\/p>\n<p>De\u0219i <code>kubectl drain<\/code> De\u0219i reu\u0219e\u0219te bine \u00een evacuarea pod-urilor, exist\u0103 \u00eenc\u0103 dou\u0103 factoare care ar putea cauza e\u0219ecul opera\u021biunii drain:<\/p>\n<p><\/p>\n<ul>\n<li>Aplica\u021bia dvs. trebuie s\u0103 fie capabil\u0103 s\u0103 se opreasc\u0103 corect atunci c\u00e2nd prime\u0219te <code>TERM<\/code> un semnal. C\u00e2nd pod-urile sunt evacuate, Kubernetes trimite semnalul <code>TERM<\/code> la containere \u0219i a\u0219teapt\u0103 s\u0103 se opreasc\u0103 pentru o perioad\u0103 de timp definit\u0103, dup\u0103 care, dac\u0103 nu s-au oprit, le finalizeaz\u0103 for\u021bat. \u00cen orice caz, dac\u0103 containerul dvs. nu r\u0103spunde corect la semnal, este posibil s\u0103 \u00eenchide\u021bi pod-urile incorect, dac\u0103 acestea sunt \u00een execu\u021bie \u00een acel moment (de exemplu, o tranzac\u021bie \u00een baza de date).<\/li>\n<li>Ve\u021bi pierde toate pod-urile care con\u021bin aplica\u021bia dvs. Aceasta poate fi inaccesibil\u0103 \u00een momentul lans\u0103rii noilor containere pe noile noduri sau, dac\u0103 pod-urile dvs. sunt desf\u0103\u0219urate f\u0103r\u0103 controllere, acestea ar putea s\u0103 nu se reporneasc\u0103 deloc. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Evitarea timpului de inactivitate<\/h2>\n<p><\/p>\n<p>Pentru a minimiza timpul de inactivitate cauzat de \u00eentreruperea voluntar\u0103, cum ar fi opera\u021biunea drain pentru un nod, Kubernetes ofer\u0103 urm\u0103toarele op\u021biuni de gestionare a e\u0219ecurilor:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/#termination-of-pods\">Terminare gra\u021bioas\u0103<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/\">Hooks de ciclul de via\u021b\u0103<\/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>\u00cen celelalte p\u0103r\u021bi ale ciclului, vom folosi aceste func\u021bii Kubernetes pentru a atenua impactul transferului pod-urilor. Pentru a urm\u0103ri mai u\u0219or ideea principal\u0103, vom folosi exemplul nostru de mai sus cu urm\u0103toarea configura\u021bie de resurse:<\/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>Aceast\u0103 configura\u021bie este un exemplu minim <code>Deployment<\/code>, care gestioneaz\u0103 pod-urile nginx \u00een cluster. De asemenea, configura\u021bia descrie resursa <code>Serviciu<\/code>, care poate fi folosit\u0103 pentru a accesa pod-urile nginx \u00een cluster.<\/p>\n<p><\/p>\n<p>Pe parcursul \u00eentregului ciclu, vom extinde iterativ aceast\u0103 configura\u021bie, astfel \u00eenc\u00e2t, la final, s\u0103 includ\u0103 toate func\u021bionalit\u0103\u021bile oferite de Kubernetes pentru a reduce timpul de nefunc\u021bionare.<\/p>\n<p><\/p>\n<p><em>Pentru a ob\u021bine o versiune complet implementat\u0103 \u0219i testat\u0103 a actualiz\u0103rilor clusterului Kubernetes care asigur\u0103 zero timp de nefunc\u021bionare pe AWS \u0219i alte resurse, vizita\u021bi <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\">Citi\u021bi \u0219i alte articole de pe blogul nostru:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Implementarea f\u0103r\u0103 timpi de nefunc\u021bionare \u0219i bazele de date<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: de ce este at\u00e2t de important s\u0103 configur\u0103m gestionarea resurselor sistemului?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 pipelines nativ Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Compilarea modulelor dinamice pentru Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Introducerea \u00een Autorizarea Kubernetes a Hashicorp Consul<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Ce a rezultat din migrarea de la ClickHouse f\u0103r\u0103 autorizare la ClickHouse cu autorizare<\/a><\/noindex><\/li>\n<\/ul>\n<p>Sursa: <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.2.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\/ro\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Actualizarea clusterului Kubernetes f\u0103r\u0103 nefunc\u021bionare | ProHoster","description":"Procesul de actualizare pentru al dvs.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/70831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}