{"id":97982,"date":"2020-10-23T14:42:15","date_gmt":"2020-10-23T12:42:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes"},"modified":"2020-11-18T00:58:47","modified_gmt":"2020-11-17T22:58:47","slug":"devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","title":{"rendered":"Nove consigli per migliorare le prestazioni di Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/92dc510aa9d785a31d310816b18bf854.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ciao a tutti! Mi chiamo Oleg Sidorenkov e sono il responsabile del team infrastruttura presso DomKlik. Gestiamo \"Cubik\" in produzione da oltre tre anni e in questo periodo abbiamo vissuto molte esperienze interessanti. Oggi vi racconter\u00f2 come, con il giusto approccio, sia possibile ottenere ancora pi\u00f9 prestazioni dal vostro cluster utilizzando Kubernetes \"vanilla\". Pronti, partenza, via! <\/p>\n<p>Sapete tutti che Kubernetes \u00e8 un sistema scalabile open source per l'orchestrazione dei contenitori; oppure sono 5 binari che compiono magia gestendo il ciclo di vita dei vostri microservizi nell'ambiente server. Inoltre, \u00e8 uno strumento abbastanza flessibile, che pu\u00f2 essere assemblato come un costruttore Lego per una massima personalizzazione in base a diverse esigenze.<\/p>\n<p>E sembra tutto bene: inserisci i server nel cluster come legna da ardere nel camino e non ti preoccupi. Ma se sei attento all'ambiente, ti chiederai: \"Come posso mantenere il fuoco nel camino e risparmiare la foresta?\". In altre parole, come trovare modi per migliorare l'infrastruttura e ridurre i costi.<\/p>\n<h2>1. Monitora le risorse dei team e delle applicazioni<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/91e2e60b47ee985b024532c8b685230c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Uno dei metodi pi\u00f9 semplici ed efficaci \u00e8 l'introduzione di requests\/limits. Suddividete le applicazioni in namespace e i namespace in team di sviluppo. Assegnate ai vostri applicativi valori per il consumo di tempo di CPU, memoria e storage effimero prima del deploy.<\/p>\n<pre><code>resources:\n   requests:\n     memory: 2Gi\n     cpu: 250m\n   limits:\n     memory: 4Gi\n     cpu: 500m<\/code><\/pre>\n<p>Dalla nostra esperienza, abbiamo concluso che non \u00e8 consigliabile gonfiare i requests oltre il doppio dei limits. La dimensione del cluster si basa sui requests, e se designate differenze nelle risorse delle applicazioni, ad esempio di 5-10 volte, immaginate cosa accadr\u00e0 al vostro nodo quando si riempir\u00e0 di pod e ricever\u00e0 improvvisamente un carico. Niente di buono. Al minimo, throttling; al massimo, dovrete dire addio al worker e affrontare un carico ciclico sugli altri nodi dopo che i pod inizieranno a migrare.<\/p>\n<p>Inoltre, grazie a <code>limitranges<\/code> potete impostare per il container valori delle risorse \u2014 minimi, massimi e predefiniti:<\/p>\n<pre><code>\u279c  ~ kubectl describe limitranges --namespace ops\nNome:       limit-range\nNamespace:  ops\nTipo        Risorsa            Min   Max   Richiesta predefinita  Limite predefinito  Massimo rapporto Limite\/Richiesta\n----        --------            ---   ---   ------------------  ---------------  -------------------------\nContainer   cpu                 50m   10    100m                100m             2\nContainer   ephemeral-storage   12Mi  8Gi   128Mi               4Gi              -\nContainer   memory              64Mi  40Gi  128Mi               128Mi            2<\/code><\/pre>\n<p>Non dimenticate di limitare le risorse del namespace affinch\u00e9 un singolo team non possa utilizzare tutte le risorse del cluster:<\/p>\n<pre><code>\u279c  ~ kubectl describe resourcequotas --namespace ops\nNome:                    resource-quota\nNamespace:               ops\nRisorsa                 Utilizzato      Massimo\n--------                -----          -----\nlimits.cpu              77250m        80\nlimits.memory           124814367488  150Gi\npods                    31            45\nrequests.cpu            53850m        80\nrequests.memory         75613234944   150Gi\nservices                26            50\nservices.loadbalancers  0             0\nservices.nodeports      0             0<\/code><\/pre>\n<p>Come si pu\u00f2 vedere dalla descrizione <code>resourcequotas<\/code>, se il team ops desidera distribuire pod che consumeranno altri 10 cpu, il pianificatore non permetter\u00e0 di farlo e restituir\u00e0 un errore:<\/p>\n<pre><code>Errore nella creazione: pods \"nginx-proxy-9967d8d78-nh4fs\" \u00e8 vietato: superato il limite: resource-quota, richiesto: limits.cpu=5, requests.cpu=5, utilizzato: limits.cpu=77250m, requests.cpu=53850m, limitato: limits.cpu=10, requests.cpu=10<\/code><\/pre>\n<p>Per risolvere un problema simile, si pu\u00f2 scrivere uno strumento, ad esempio, come <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pauljamm\/team-operator\">questo<\/a><\/noindex>, in grado di memorizzare e confermare lo stato delle risorse dei team.<\/p>\n<h2>2. Seleziona lo storage file pi\u00f9 adatto<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c7f8bdbf5490acc9061695a6d608015e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Vorrei affrontare il tema dei volumi persistenti e del sistema di archiviazione delle nodi worker di Kubernetes. Spero che nessuno usi \"Kube\" su HDD in produzione, ma a volte anche un comune SSD non \u00e8 pi\u00f9 sufficiente. Ci siamo trovati di fronte al problema per cui i log sovraccaricavano il disco in termini di operazioni di input\/output, e qui le opzioni di soluzione sono piuttosto limitate: <\/p>\n<ul>\n<li>\n<p>Utilizzare SSD ad alte prestazioni o passare a NVMe (se gestisci il tuo hardware).<\/p>\n<\/li>\n<li>\n<p>Ridurre il livello di logging.<\/p>\n<\/li>\n<li>\n<p>Effettuare un bilanciamento \"intelligente\" dei pod che sovraccaricano il disco (<code>podAntiAffinity<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>Lo screenshot sopra mostra cosa succede con il disco del nginx-ingress-controller quando il logging access_logs \u00e8 attivato (~12.000 log\/sec). Una situazione del genere pu\u00f2 naturalmente portare a una degradazione di tutte le applicazioni su quel nodo.<\/p>\n<p>Per quanto riguarda i PV, purtroppo non ho provato tutti <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/#types-of-persistent-volumes\">i tipi<\/a><\/noindex> Volume Persistenti. Scegli la soluzione migliore per te. Storicamente, una piccola parte dei servizi ha bisogno di volumi RWX, e da tempo utilizziamo lo storage NFS per questo scopo. Economico e\u2026 adeguato. Certo, abbiamo avuto le nostre difficolt\u00e0 \u2014 ma alla fine abbiamo imparato a ottimizzarlo, e ora non abbiamo pi\u00f9 problemi. Se possibile, passa allo storage oggetti S3.<\/p>\n<h2>3. Raccogli immagini ottimizzate<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c25ce405d1eb4c01f031e18b0bfa4836.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00c8 consigliabile utilizzare immagini ottimizzate per container, in modo che Kubernetes possa recuperarle pi\u00f9 rapidamente ed eseguirle in modo pi\u00f9 efficiente.&nbsp;<\/p>\n<p>L'ottimizzazione significa che le immagini:<\/p>\n<ul>\n<li>\n<p>contengono solo una singola applicazione o svolgono solo una funzione;<\/p>\n<\/li>\n<li>\n<p>sono di dimensioni ridotte, poich\u00e9 le immagini pi\u00f9 grandi si trasferiscono peggio sulla rete;<\/p>\n<\/li>\n<li>\n<p>hanno endpoint per il controllo della salute e della prontezza, tramite i quali Kubernetes pu\u00f2 intraprendere azioni in caso di inattivit\u00e0;<\/p>\n<\/li>\n<li>\n<p>utilizzano sistemi operativi friendly per i container (come Alpine o CoreOS), che sono pi\u00f9 resilienti agli errori di configurazione;<\/p>\n<\/li>\n<li>\n<p>utilizzano build a pi\u00f9 fasi, in modo da poter distribuire solo applicazioni compilate, anzich\u00e9 i relativi sorgenti.<\/p>\n<\/li>\n<\/ul>\n<p>Ci sono molti strumenti e servizi che permettono di controllare e ottimizzare le immagini al volo. \u00c8 importante mantenerli sempre aggiornati e testati per la sicurezza. In questo modo ottieni: <\/p>\n<ol>\n<li>\n<p>Riduzione del carico di rete su tutto il cluster.<\/p>\n<\/li>\n<li>\n<p>Diminuzione del tempo di avvio del contenitore.<\/p>\n<\/li>\n<li>\n<p>Un minore volume del tuo intero registro Docker.<\/p>\n<\/li>\n<\/ol>\n<h2>4. Utilizza la cache DNS<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/9f4384462a77dc528d7911c56f684f2d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Parlando di carichi elevati, vivere senza ottimizzazione del sistema DNS del cluster pu\u00f2 essere piuttosto difficile. In passato, gli sviluppatori di Kubernetes supportavano la loro soluzione kube-dns. \u00c8 stata implementata anche da noi, ma questo software non \u00e8 stato particolarmente ottimizzato e non forniva le prestazioni richieste, anche se la missione sembrava semplice. Successivamente, \u00e8 emerso coredns, sul quale siamo passati e non abbiamo pi\u00f9 avuto problemi; successivamente \u00e8 diventato il servizio DNS predefinito in K8s. A un certo punto abbiamo raggiunto le 40.000 rps al sistema DNS, e anche questa soluzione ha cominciato a non bastare. Ma, per una felice coincidenza, \u00e8 uscito Nodelocaldns, noto anche come cache locale del nodo, che \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/nodelocaldns\/\">NodeLocal DNSCache<\/a><\/noindex>.<\/p>\n<p>Perch\u00e9 lo usiamo? Nel kernel di Linux c'\u00e8 un bug che, in caso di accessi multipli tramite conntrack NAT su UDP, porta a uno stato di competizione per la scrittura nelle tabelle conntrack, causando la perdita di parte del traffico tramite NAT (ogni richiesta attraverso il Service \u00e8 un NAT). Nodelocaldns risolve questo problema eliminando il NAT e aggiornando la connessione a TCP verso i DNS upstream, oltre a effettuare la memorizzazione nella cache locale delle query DNS agli upstream (inclusa una breve cache negativa di 5 secondi).<\/p>\n<h2>5. Scala i pod orizzontalmente e verticalmente in modo automatico<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3804a14685a55160fa7d9f3226eab1fa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Puoi dire con certezza che tutti i tuoi microservizi sono pronti per una crescita da due a tre volte del carico? Come allocare correttamente le risorse per le tue applicazioni? Mantenere in esecuzione un paio di pod oltre il carico di lavoro pu\u00f2 risultare eccessivo, mentre operare al limite espone al rischio di inattivit\u00e0 a causa di una crescita improvvisa del traffico sul servizio. La soluzione al giusto bilanciamento \u00e8 fornita da servizi come <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/\">Horizontal Pod Autoscaler<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/autoscaler\/tree\/master\/vertical-pod-autoscaler\">Vertical Pod Autoscaler<\/a><\/noindex>. <\/p>\n<p><strong>VPA<\/strong> consente di aumentare automaticamente le risorse richieste\/limate dei tuoi container nel pod in base all'utilizzo effettivo. In che modo pu\u00f2 esserti utile? Se hai pod che per qualche motivo non possono essere scalati orizzontalmente (il che non \u00e8 del tutto affidabile), puoi provare a lasciare che il VPA gestisca le risorse. La sua caratteristica distintiva \u00e8 il sistema di raccomandazioni basato su dati storici e attuali del metric-server, quindi, se non desideri modificare automaticamente richieste\/lime, puoi semplicemente monitorare le risorse raccomandate per i tuoi container e ottimizzare le impostazioni per risparmiare CPU e memoria nel cluster. <\/p>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3965950aa3315faa4bb3e3ff5bd61955.png\" style=\"display:block;margin: 0 auto;\" \/>Immagine presa da https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Il pianificatore in Kubernetes si basa sempre sui requests. Qualunque valore tu inserisca, il pianificatore cercher\u00e0 un nodo adatto in base a esso. I valori dei limits servono al kubelet per comprendere quando limitare o terminare un pod. E poich\u00e9 l'unico parametro importante \u00e8 il valore dei requests, il VPA lavorer\u00e0 con esso. Ogni volta che definisci il ridimensionamento verticale di un'applicazione, stai specificando quale dovrebbe essere il requests. E cosa succede ai limits? Questo parametro sar\u00e0 anche scalato proporzionalmente.<\/p>\n<p>Ad esempio, ecco le impostazioni tipiche di un pod:<\/p>\n<pre><code>resources:\n   requests:\n     memory: 250Mi\n     cpu: 200m\n   limits:\n     memory: 500Mi\n     cpu: 350m<\/code><\/pre>\n<p>Il meccanismo di raccomandazione determina che la tua applicazione ha bisogno di 300m di CPU e 500Mi per funzionare correttamente. Riceverai queste impostazioni:<\/p>\n<pre><code>resources:\n   requests:\n     memory: 500Mi\n     cpu: 300m\n   limits:\n     memory: 1000Mi\n     cpu: 525m<\/code><\/pre>\n<p>Come accennato in precedenza, questo \u00e8 un ridimensionamento proporzionale basato sul rapporto requests\/limits nel manifesto:<\/p>\n<ul>\n<li>\n<p>CPU: 200m \u2192 300m: rapporto 1:1.75;<\/p>\n<\/li>\n<li>\n<p>Memory: 250Mi \u2192 500Mi: rapporto 1:2.<\/p>\n<\/li>\n<\/ul>\n<p>Per quanto riguarda <strong>HPA<\/strong>, qui qui rende il meccanismo di funzionamento pi\u00f9 trasparente. Vengono stabiliti i valori di soglia delle metriche, come ad esempio della CPU e della memoria, e se il valore medio di tutte le repliche supera la soglia, l'applicazione viene scalata di +1 pod fino a quando il valore non scende sotto la soglia, o fino a quando non viene raggiunto il numero massimo di repliche.<\/p>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f7a3fa28177d66be925867e38f5bbed6.png\" style=\"display:block;margin: 0 auto;\" \/>Immagine presa da https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Oltre alle metriche standard come CPU e memoria, puoi configurare soglie per le tue metriche personalizzate da Prometheus e lavorarci, se ritieni che sia la definizione pi\u00f9 accurata per decidere quando scalare la tua applicazione. Una volta che l'applicazione si stabilizza al di sotto del limite di metrica impostato, l'HPA inizier\u00e0 a scalare i pod verso il basso fino al numero minimo di repliche o fino a quando il carico soddisfer\u00e0 la soglia impostata.<\/p>\n<h2>6. Non dimenticare l'Node Affinity e il Pod Affinity<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/e718191d9e8ff25fd3b2d65cba9b3b73.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Non tutti i nodi funzionano su hardware identico, n\u00e9 tutti i pod devono eseguire applicazioni intensive in termini di calcolo. Kubernetes consente di definire la specializzazione dei nodi e dei pod attraverso <strong>Node Affinity<\/strong> e <strong>Pod Affinity<\/strong>.<\/p>\n<p>Se hai nodi adatti per operazioni ad alta intensit\u00e0 di calcolo, per massimizzare l'efficienza \u00e8 meglio associare le applicazioni ai nodi corrispondenti. A tal fine, utilizza <code>nodeSelector<\/code> con un'etichetta del nodo.<\/p>\n<p>Supponiamo che tu abbia due nodi: uno con <code>CPUType=HIGHFREQ<\/code> e un numero elevato di core veloci, l'altro con <code>MemoryType=HIGHMEMORY<\/code> un'elevata quantit\u00e0 di memoria e prestazioni superiori. La soluzione pi\u00f9 semplice \u00e8 assegnare il deployment del pod al nodo <code>HIGHFREQ<\/code>, aggiungendo nella sezione <code>spec<\/code> un selettore come questo:<\/p>\n<pre><code>\u2026\nnodeSelector:\n\tCPUType: HIGHFREQ<\/code><\/pre>\n<p>Un modo pi\u00f9 costoso e specifico per farlo \u00e8 utilizzare <code>nodeAffinity<\/code> nel campo <code>affinity<\/code> nella sezione <code>spec<\/code>. Ci sono due opzioni:<\/p>\n<ul>\n<li>\n<p><code>requiredDuringSchedulingIgnoredDuringExecution<\/code>: impostazione rigida (il planner far\u00e0 il deployment dei pod solo su nodi specifici (e non altrove));<\/p>\n<\/li>\n<li>\n<p><code>preferredDuringSchedulingIgnoredDuringExecution<\/code>: impostazione morbida (il planner cercher\u00e0 di fare il deployment su nodi specifici e, se non ci riesce, prover\u00e0 su un altro nodo disponibile).<\/p>\n<\/li>\n<\/ul>\n<p>Puoi definire una certa sintassi per gestire le etichette dei nodi, ad esempio, <code>In<\/code>, <code>NotIn<\/code>, <code>Exists<\/code>, <code>DoesNotExist<\/code>, <code>Gt<\/code> o <code>Lt<\/code>. Tuttavia, ricorda che metodi complessi in lunghe liste di etichette rallenteranno il processo decisionale in situazioni critiche. In altre parole, non complicare.<\/p>\n<p>Come accennato in precedenza, Kubernetes consente di definire l'affinit\u00e0 dei pod. Ci\u00f2 significa che puoi fare in modo che determinati pod lavorino insieme ad altri pod nella stessa zona di disponibilit\u00e0 (rilevante per i cloud) o nodi.<\/p>\n<p>In <code>podAffinity<\/code> campi <code>affinity<\/code> nella sezione <code>spec<\/code> sono disponibili gli stessi campi che nel caso di <code>nodeAffinity<\/code>: <code>requiredDuringSchedulingIgnoredDuringExecution<\/code><strong> <\/strong>e <code>preferredDuringSchedulingIgnoredDuringExecution<\/code>. L'unica differenza \u00e8 che <code>matchExpressions<\/code> collegher\u00e0 i pod al nodo su cui \u00e8 gi\u00e0 in esecuzione un pod con quella specifica etichetta.<\/p>\n<p>Inoltre, Kubernetes offre il campo <code>podAntiAffinity<\/code>, che, al contrario, non collega il pod a un nodo con determinati pod.<\/p>\n<p>Per quanto riguarda le espressioni <code>nodeAffinity<\/code> si possono dare gli stessi consigli: cerca di mantenere la semplicit\u00e0 e la coerenza delle regole, non cercare di sovraccaricare la specifica dei pod con un insieme complesso di regole. \u00c8 molto facile creare una regola che non soddisfi i requisiti del cluster, creando un carico extra per lo scheduler e riducendo le prestazioni complessive.<\/p>\n<h2>7. Taints &amp; Tolerations<\/h2>\n<p>C'\u00e8 un altro modo per gestire lo scheduler. Se hai un grande cluster con centinaia di nodi e migliaia di microservizi, \u00e8 molto difficile non permettere a determinati pod di essere posizionati su nodi specifici.<\/p>\n<p>A questo ci aiuta il meccanismo dei taint \u2014 regole restrittive. Ad esempio, in determinati scenari puoi vietare a determinati nodi di eseguire pod al loro interno. Per applicare un taint a un nodo specifico, devi utilizzare l'opzione <code>taint<\/code> in kubectl. Specifica la chiave e il valore, e poi il taint come <code>NoSchedule<\/code> o <code>NoExecute<\/code>:<\/p>\n<pre><code>$ kubectl taint nodes node10 node-role.kubernetes.io\/ingress=true:NoSchedule<\/code><\/pre>\n<p>Vale la pena notare che il meccanismo dei taint supporta tre effetti principali: <code>NoSchedule<\/code>, <code>NoExecute<\/code> e <code>PreferNoSchedule<\/code><strong>. <\/strong><\/p>\n<ul>\n<li>\n<p><code>NoSchedule<\/code><strong> <\/strong>significa che finch\u00e9 nella specifica del pod non c'\u00e8 una registrazione corrispondente <code>tolerations<\/code>, non potr\u00e0 essere distribuito su un nodo (in questo esempio <code>node10<\/code>).<\/p>\n<\/li>\n<li>\n<p><code>PreferNoSchedule <\/code>\u2014 una versione semplificata <code>NoSchedule<\/code>. In questo caso, lo scheduler cercher\u00e0 di non distribuire pod che non hanno una registrazione corrispondente <code>tolerations<\/code> su quel nodo, ma non \u00e8 un vincolo rigido. Se non ci sono risorse nel cluster, i pod inizieranno a essere distribuiti su quel nodo.<\/p>\n<\/li>\n<li>\n<p><code>NoExecute<\/code><strong> <\/strong>\u2014 questo effetto avvia un'evacuazione immediata dei pod che non hanno una registrazione corrispondente. <code>tolerations<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u00c8 interessante notare che un comportamento del genere pu\u00f2 essere annullato tramite il meccanismo delle tolleranze. Questo \u00e8 utile quando c'\u00e8 un nodo \"vietato\" e hai bisogno di posizionare solo servizi infrastrutturali su di esso. Come farlo? Consentire solo i pod per i quali esiste una tolleranza appropriata.<\/p>\n<p>Ecco come apparir\u00e0 la specifica del pod:<\/p>\n<pre><code>spec:\n   tolerations:\n     - key: \"node-role.kubernetes.io\/ingress\"\n        operator: \"Equal\"\n        value: \"true\"\n        effect: \"NoSchedule\"<\/code><\/pre>\n<p>Ci\u00f2 non significa che al prossimo ridistribuzione il pod andr\u00e0 su questo nodo; non si tratta di un meccanismo di affinit\u00e0 del nodo e <code>nodeSelector<\/code>. Ma combinando pi\u00f9 funzionalit\u00e0, puoi ottenere una configurazione molto flessibile per lo scheduler.<\/p>\n<h2>8. Configura la priorit\u00e0 di distribuzione dei pod<\/h2>\n<p>Il fatto che hai configurato il vincolo dei pod ai nodi non significa che tutti i pod debbano essere gestiti con la stessa priorit\u00e0. Ad esempio, potresti voler distribuire alcuni pod prima degli altri.<\/p>\n<p>Kubernetes offre vari modi per configurare la priorit\u00e0 dei pod (Pod Priority and Preemption). La configurazione consiste in diverse parti: l'oggetto <code>PriorityClass<\/code><strong> <\/strong>e la descrizione del campo <code>priorityClassName<\/code><strong> <\/strong>nella specifica del pod. Consideriamo un esempio:<\/p>\n<pre><code>apiVersion: scheduling.k8s.io\/v1\nkind: PriorityClass\nmetadata:\n  name: high-priority\nvalue: 99999\nglobalDefault: false\ndescription: \"Questa classe di priorit\u00e0 dovrebbe essere utilizzata solo per i pod molto importanti\"<\/code><\/pre>\n<p>Creiamo <code>PriorityClass<\/code>, assegnandole un nome, una descrizione e un valore.<strong> <\/strong>Pi\u00f9 alto <code>value<\/code>, maggiore \u00e8 la priorit\u00e0. Il valore pu\u00f2 essere qualsiasi numero intero a 32 bit, minore o uguale a 1.000.000.000. Valori pi\u00f9 elevati sono riservati per i pod system critici, che di solito non possono essere espulsi.<strong> <\/strong>L'espulsione avverr\u00e0 solo se non c'\u00e8 spazio per l'esecuzione del pod ad alta priorit\u00e0, allora alcuni pod di un certo nodo verranno evacuati. Se questo meccanismo \u00e8 troppo rigido per te, puoi aggiungere l'opzione <code>preemptionPolicy: Never<\/code>, e allora non ci sar\u00e0 espulsione, il pod sar\u00e0 il primo in coda e attender\u00e0 che il pianificatore trovi risorse disponibili per lui.<\/p>\n<p>Successivamente creiamo un pod, nel quale specifichiamo il nome <code>priorityClassName<\/code>:<\/p>\n<pre><code>apiVersion: v1\nkind: Pod\nmetadata:\n  name: static-web\n  labels:\n    role: myrole\n spec:\n  containers:\n    - name: web\n      image: nginx\n      ports:\n        - name: web\n          containerPort: 80\n          protocol: TCP\n  priorityClassName: high-priority\n          <\/code><\/pre>\n<p>\u00c8 possibile creare un numero illimitato di classi di priorit\u00e0, anche se si consiglia di non esagerare (ad esempio, limitarsi a priorit\u00e0 bassa, media e alta). <\/p>\n<p>In questo modo, se necessario, potrai aumentare l'efficienza del dispiegamento di servizi critici come nginx-ingress-controller, coredns, ecc.<\/p>\n<h2>9. Ottimizza il cluster ETCD<\/h2>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f5917adfa943c789b6c784f43305851b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>L'ETCD pu\u00f2 essere considerato il cervello dell'intero cluster. \u00c8 molto importante mantenere questa base di dati ad un alto livello operativo, in quanto da essa dipende la velocit\u00e0 delle operazioni nel \"Kube\". Una soluzione piuttosto standard e comunque valida \u00e8 mantenere il cluster ETCD sui nodi master, per avere una latenza minima rispetto al kube-apiserver. Se ci\u00f2 non \u00e8 possibile, colloca l'ETCD il pi\u00f9 vicino possibile, assicurandoti di avere una buona larghezza di banda tra i nodi. Fai attenzione anche a quante nodi ETCD possono essere rimossi senza danneggiare il cluster.<\/p>\n<p><img decoding=\"async\" alt=\"Nove consigli per migliorare le prestazioni di Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/cdd2c32eefed253c6ff774899c367ccc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tieni presente che un numero eccessivo di partecipanti nel cluster pu\u00f2 aumentare la tolleranza ai guasti a spese delle prestazioni; tutto deve essere mantenuto in equilibrio.<\/p>\n<p>Per quanto riguarda la configurazione del servizio, ci sono poche raccomandazioni:<\/p>\n<ol>\n<li>\n<p>Avere una buona hardware, in base alle dimensioni del cluster (puoi leggere <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/hardware.md\">qui<\/a><\/noindex>).<\/p>\n<\/li>\n<li>\n<p>Regolare alcuni parametri se hai distribuito il cluster tra un paio di datacenter, oppure se la tua rete e i dischi lasciano a desiderare (puoi leggere <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/tuning.md\">qui<\/a><\/noindex>).<\/p>\n<\/li>\n<\/ol>\n<h2>Conclusione<\/h2>\n<p>In questo articolo vengono descritti i punti che il nostro team cerca di seguire. Non \u00e8 una descrizione passo-passo delle azioni, ma piuttosto opzioni che possono essere utili per ottimizzare i costi operativi del cluster. \u00c8 chiaro che ogni cluster \u00e8 unico e le soluzioni di configurazione possono variare notevolmente, quindi sarebbe interessante ricevere il tuo feedback: come monitori il tuo cluster Kubernetes e quali strumenti utilizzi per migliorarne le prestazioni. Condividi la tua esperienza nei commenti, sar\u00e0 interessante conoscerla. <\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/520968\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041e\u043b\u0435\u0433 \u0421\u0438\u0434\u043e\u0440\u0435\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041c\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u00ab\u041a\u0443\u0431\u0438\u043a\u00bb \u0432 \u043f\u0440\u043e\u0434\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0451\u0445 \u043b\u0435\u0442, \u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0436\u0438\u043b\u0438 \u0441 \u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u043e\u0432\u0435\u0434\u0430\u044e \u0432\u0430\u043c, \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u00ab\u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb Kubernetes \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. Ready steady [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97983,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97982","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041e\u043b\u0435\u0433 \u0421\u0438\u0434\u043e\u0440\u0435\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041c\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u00ab\u041a\u0443\u0431\u0438\u043a\u00bb \u0432 \u043f\u0440\u043e\u0434\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0451\u0445 \u043b\u0435\u0442, \u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0436\u0438\u043b\u0438 \u0441 \u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u043e\u0432\u0435\u0434\u0430\u044e \u0432\u0430\u043c, \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u00ab\u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb Kubernetes \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. Ready steady\" \/>\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\/it\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\u0414\u0435\u0432\u044f\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u043f\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041e\u043b\u0435\u0433 \u0421\u0438\u0434\u043e\u0440\u0435\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041c\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u00ab\u041a\u0443\u0431\u0438\u043a\u00bb \u0432 \u043f\u0440\u043e\u0434\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0451\u0445 \u043b\u0435\u0442, \u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0436\u0438\u043b\u0438 \u0441 \u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u043e\u0432\u0435\u0434\u0430\u044e \u0432\u0430\u043c, \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u00ab\u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb Kubernetes \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. Ready steady\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes\" \/>\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-10-23T12:42:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-11-17T22:58:47+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\udd47Nove consigli per migliorare le prestazioni di Kubernetes | ProHoster","description":"Ciao a tutti! Mi chiamo Oleg Sidorenkov, lavoro nell'azienda DomClick come responsabile del team infrastruttura. Sfruttiamo \"Kubik\" in produzione da oltre tre anni, e nel frattempo abbiamo vissuto molte situazioni interessanti. Oggi vi racconter\u00f2 come, con un approccio corretto, si possa ottenere ancora pi\u00f9 prestazioni da un Kubernetes \"vanilla\" per il vostro cluster. Pronti, partenza","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\u0414\u0435\u0432\u044f\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u043f\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 Kubernetes | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041e\u043b\u0435\u0433 \u0421\u0438\u0434\u043e\u0440\u0435\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041c\u044b \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u00ab\u041a\u0443\u0431\u0438\u043a\u00bb \u0432 \u043f\u0440\u043e\u0434\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0451\u0445 \u043b\u0435\u0442, \u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0436\u0438\u043b\u0438 \u0441 \u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u043e\u0432\u0435\u0434\u0430\u044e \u0432\u0430\u043c, \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u00ab\u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb Kubernetes \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. Ready steady","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","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-10-23T12:42:15+00:00","article:modified_time":"2020-11-17T22:58:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97982","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 10:08:27","updated":"2022-09-30 17:30:03"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/97982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=97982"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/97982\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/97983"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=97982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=97982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=97982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}