{"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\/sl\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","title":{"rendered":"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/92dc510aa9d785a31d310816b18bf854.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u017divjo! Sem Oleg Sidorenkov, vodja infrastrukturne ekipe pri podjetju DomClick. V produkciji delamo z \u201eKocko\u201c \u017ee ve\u010d kot tri leta in v tem \u010dasu smo do\u017eiveli veliko razli\u010dnih zanimivih trenutkov. Danes vam bom povedal, kako lahko ob pravnem pristopu iz \u201evanilijevega\u201c Kubernetes izvle\u010dete \u0161e ve\u010djo zmogljivost za va\u0161 klaster. Ready steady go! <\/p>\n<p>Vsi veste, da je Kubernetes raz\u0161irljiv sistem z odprto kodo za orkestracijo kontejnerjev; no, ali pa 5 binarnih datotek, ki ustvarjajo \u010darovnijo, upravljajo\u010d \u017eivljenjski cikel va\u0161ih mikroservisov v stre\u017eni\u0161kem okolju. Poleg tega je to precej prilagodljiv instrument, ki ga lahko sestavite kot Lego kocke za maksimalno prilagoditev razli\u010dnim nalogam.<\/p>\n<p>In vse se zdi v redu: vklopi stre\u017enike v klaster kot drva v pe\u010d, in ne skrbi. A \u010de si za ekologijo, se bo\u0161 vpra\u0161al: \u201eKako lahko ohranim ogenj v pe\u010di in hkrati \u0161param gozd?\u201c. Drugimi besedami, kako najti na\u010dine za izbolj\u0161anje infrastrukture in zmanj\u0161anje stro\u0161kov.<\/p>\n<h2>1. Spremljajte vire ekip in aplikacij<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/91e2e60b47ee985b024532c8b685230c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Eden najslaj\u0161ih, a u\u010dinkovitih metod je uvedba zahtev\/naredb. Razdelite aplikacije po imenskih prostorih in imenske prostore po razvojnim ekipam. Dolo\u010dite vrednosti porabe procesorskega \u010dasa, pomnilnika in minljivega shranjevanja, preden aplikacije namestite.<\/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>Z izku\u0161njami smo pri\u0161li do zaklju\u010dka: ne smete pove\u010dati zahtevani pri maksimumih za ve\u010d kot dvakrat. Obseg klasterja se izra\u010duna na podlagi zahtev, in \u010de boste dolo\u010dili aplikacijam razliko v virih, na primer 5-10 krat, si predstavljajte, kaj se zgodi z va\u0161im vozli\u0161\u010dem, ko se napolni z podi in nenadoma dobi obremenitev. Ni\u010d dobrega. Vsaj trotliranje, najslab\u0161e pa se poslovite od delavca in dobite cikli\u010dno obremenitev preostalih vozli\u0161\u010d po tem, ko se podi za\u010dnejo seliti.<\/p>\n<p>Osim toga, putem <code>limitranges<\/code> lahko na za\u010detku dolo\u010dite vrednosti za vire za vsebnik \u2014 minimalne, maksimalne in privzete:<\/p>\n<pre><code>\u279c  ~ kubectl opisati limitranges --namespace ops\nIme:       limit-range\nNamespace:  ops\nTip        Resurs           Min   Max   Zadnji zahtev  Zadnja ograni\u010denja  Maksimalni odnos ograni\u010denja\/zahteva\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>Ne zaboravite ograni\u010diti resurse namespace-a kako jedna ekipa ne bi mogla da potro\u0161i sve resurse klastera:<\/p>\n<pre><code>\u279c  ~ kubectl opisati resourcequotas --namespace ops\nIme:                   resource-quota\nNamespace:              ops\nResurs                Kori\u0161\u0107eno          Ograni\u010deno\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>Kao \u0161to se mo\u017ee videti iz opisa <code>resourcequotas<\/code>, ako ekipa ops \u017eeli da postavi podove koji \u0107e koristiti jo\u0161 10 cpu, planifier ne\u0107e dozvoliti to da se uradi i izda\u0107e gre\u0161ku:<\/p>\n<pre><code>Gre\u0161ka prilikom kreiranja: podovi \"nginx-proxy-9967d8d78-nh4fs\" su zabranjeni: prekora\u010deno kvota: resource-quota, zahtevano: limits.cpu=5, requests.cpu=5, kori\u0161\u0107eno: limits.cpu=77250m, requests.cpu=53850m, ograni\u010deno: limits.cpu=10, requests.cpu=10<\/code><\/pre>\n<p>Za re\u0161avanje ovakvog problema mo\u017eete napisati alat, recimo, kao <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pauljamm\/team-operator\">ta<\/a><\/noindex>, koji mo\u017ee da \u010duva i komituje stanje resursa timova.<\/p>\n<h2>2. Prona\u0111ite optimalnu uslugu skladi\u0161tenja datoteka<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c7f8bdbf5490acc9061695a6d608015e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ovde bih \u017eeleo da se dotaknem teme persistenta volumena i diskovnog sistema worker-nodova Kubernetes-a. Nadam se da niko ne koristi \"Kube\" na HDD-u u produkciji, ali ponekad i obi\u010dni SSD postaje nedovoljan. Suo\u010davali smo se sa problemom gde su logovi uni\u0161tavali disk zbog operacija ulaza-izlaza i re\u0161enja nije mnogo: <\/p>\n<ul>\n<li>\n<p>Koristite visokoperformantne SSD ili pre\u0111ite na NVMe (ako upravljate svojom opremom).<\/p>\n<\/li>\n<li>\n<p>Smanjite nivo logovanja.<\/p>\n<\/li>\n<li>\n<p>Osigurajte \u201epametno\u201c balansiranje podova koji optere\u0107uju disk (<code>podAntiAffinity<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>Screenshot iznad pokazuje \u0161ta se de\u0161ava pod nginx-ingress-controller-om sa diskom kada je uklju\u010deno logovanje access_logs (~12k logova\/sek.). Ovakvo stanje, svakako, mo\u017ee dovesti do degradacije svih aplikacija na toj nodi.<\/p>\n<p>\u0160to se ti\u010de PV, na\u017ealost, nisam isprobao sve <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/#types-of-persistent-volumes\">vrste<\/a><\/noindex> Persistent Volumes. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0430\u043c. \u0423 \u043d\u0430\u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 RWX-\u0442\u043e\u043c\u0430\u0445, \u0438 \u0434\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e \u043f\u043e\u0434 \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c NFS-\u0445\u0440\u0430\u043d\u0438\u043b\u043a\u0443. \u0414\u0451\u0448\u0435\u0432\u043e \u0438&#8230; \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u044b \u0441 \u043d\u0438\u043c \u043d\u0430\u0435\u043b\u0438\u0441\u044c \u0433\u043e\u0432\u043d\u0430 \u2014 \u0431\u0443\u0434\u044c \u0437\u0434\u043e\u0440\u043e\u0432, \u043d\u043e \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0435\u0433\u043e \u0442\u044e\u043d\u0438\u0442\u044c, \u0438 \u0433\u043e\u043b\u043e\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u043e\u043b\u0438\u0442. \u0410 \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 S3.<\/p>\n<h2>3. Zberite optimizirane slike<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c25ce405d1eb4c01f031e18b0bfa4836.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Najbolje je uporabiti slike, optimizirane za kontejnerje, da lahko Kubernetes hitreje dostopa do njih in jih u\u010dinkoviteje izvaja.&nbsp;<\/p>\n<p>Optimiziranost pomeni, da slike:<\/p>\n<ul>\n<li>\n<p>vsebujejo le eno aplikacijo ali izvajajo le eno funkcijo;<\/p>\n<\/li>\n<li>\n<p>so majhne, ker velike slike slab\u0161e potujejo po omre\u017eju;<\/p>\n<\/li>\n<li>\n<p>imajo kon\u010dne to\u010dke za preverjanje delovanja in pripravljenosti, s katerimi lahko Kubernetes sprejme ukrepe v primeru izpadov;<\/p>\n<\/li>\n<li>\n<p>uporabljajo operacijske sisteme, prijazne do kontejnerjev (kot sta Alpine ali CoreOS), ki so bolj odporne na napake konfiguracije;<\/p>\n<\/li>\n<li>\n<p>uporabljajo ve\u010dstopenjske gradnje, da lahko namestite le prevedene aplikacije in ne prilo\u017eene izvorne kode.<\/p>\n<\/li>\n<\/ul>\n<p>Obstaja veliko orodij in storitev, ki omogo\u010dajo preverjanje in optimizacijo slik v realnem \u010dasu. Pomembno je, da jih vedno ohranjate posodobljene in preverjene glede varnosti. Na koncu dobite: <\/p>\n<ol>\n<li>\n<p>Zmanj\u0161anje omre\u017enega obremenitve celotnega grozda.<\/p>\n<\/li>\n<li>\n<p>Kraj\u0161i \u010das zagona kontejnerja.<\/p>\n<\/li>\n<li>\n<p>Manj\u0161i obseg va\u0161ega Docker registrarja.<\/p>\n<\/li>\n<\/ol>\n<h2>4. Uporabite DNS predpomnilnik<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/9f4384462a77dc528d7911c56f684f2d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u010ce govorimo o visokih obremenitvah, je brez optimizacije DNS sistema grozda \u017eivljenje precej slabo. Pred dolgo \u010dasa so razvijalci Kubernetes podprli svojo re\u0161itev kube-dns. Uvedena je bila tudi pri nas, vendar ta programska oprema ni bila posebej optimizirana in ni zagotavljala zahtevane zmogljivosti, \u010deprav se zdi, da je naloga preprosta. Nato se je pojavila coredns, na katero smo pre\u0161li in nismo imeli te\u017eav, kasneje je postala DNS storitev po privzetku v K8s. V dolo\u010denem trenutku smo dosegli 40.000 rps na DNS sistemu in ta re\u0161itev tudi ni zadostovala. A po sre\u010dni naklju\u010dju je iz\u0161el Nodelocaldns, znan tudi kot local cache, znan tudi kot <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/nodelocaldns\/\">NodeLocal DNSCache<\/a><\/noindex>.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c? \u0412 \u044f\u0434\u0440\u0435 Linux \u0435\u0441\u0442\u044c \u0431\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 conntrack NAT \u043f\u043e UDP \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0433\u043e\u043d\u043a\u0438 \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 conntrack-\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0438 \u0447\u0430\u0441\u0442\u044c&nbsp;\u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 NAT \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f (\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 Service \u2014 \u044d\u0442\u043e NAT). Nodelocaldns \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0443\u0442\u0435\u043c \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 NAT \u0438 \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e TCP \u043a \u0430\u043f\u0441\u0442\u0440\u0438\u043c\u043e\u0432\u044b\u043c DNS, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0430\u043f\u0441\u0442\u0440\u0438\u043c\u0430\u043c (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 5-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u044d\u0448).<\/p>\n<h2>5. Horizontalno in vertikalno avtomatsko skaliranje podov<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3804a14685a55160fa7d9f3226eab1fa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ali lahko z zagotovostjo trdite, da so vsi va\u0161i mikroservisi pripravljeni na dvakratno ali trikratno pove\u010danje obremenitve? Kako pravilno dodeliti vire svojim aplikacijam? Imajo\u010d aktivna dodatna dva poda nad delovno obremenitvijo se lahko izka\u017ee za odve\u010dno, medtem ko imeti na robu tveganja prena\u0161ate izpad zaradi nenadnega pove\u010danja prometa na storitev. Zlate sredine pomagajo dose\u010di \u010darobne storitve, kot je <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/\">Horizontal Pod Autoscaler<\/a><\/noindex> in <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> omogo\u010da avtomatsko pove\u010danje requests\/limits va\u0161ih kontejnerjev v podu glede na dejansko porabo. Kako vam lahko pomaga? \u010ce imate pode, ki jih iz kakr\u0161nega koli razloga ni mogo\u010de horizontalno skalirati (kar ni povsem zanesljivo), lahko poskusite zaupati VPA za spremembo njegovih virov. Njegova zna\u010dilnost je sistem priporo\u010dil na podlagi zgodovinskih in trenutnih podatkov iz metric-serverja, zato, \u010de ne \u017eelite samodejno spreminjati requests\/limits, preprosto spremljajte priporo\u010dene vire za va\u0161e kontejnerje in optimizirajte nastavitve za var\u010devanje s procesorjem in pomnilnikom v klastru. <\/p>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3965950aa3315faa4bb3e3ff5bd61955.png\" style=\"display:block;margin: 0 auto;\" \/>Slika je bila prevzeta z https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Na\u010drtovalnik v Kubernetesu se vedno temelji na requests. Kakr\u0161no koli vrednost vnesete, na\u010drtovalnik bo iskal ustrezno vozli\u0161\u010de na osnovi tega. Vrednosti limits potrebujemo kubeletu, da razume, kdaj omejiti ali ubiti pod. In ker je edini pomemben parameter vrednost requests, bo VPA delal z njim. Vsaki\u010d, ko dolo\u010dite vertikalno skaliranje aplikacije, dolo\u010dite, kak\u0161ne naj bodo requests. Kaj pa torej limits? Ta parameter bo prav tako proporcionalno skaliran.<\/p>\n<p>Na primer, tukaj so obi\u010dajne nastavitve poda:<\/p>\n<pre><code>viri:\n   zahteve:\n     pomnilnik: 250Mi\n     cpu: 200m\n   omejitve:\n     pomnilnik: 500Mi\n     cpu: 350m<\/code><\/pre>\n<p>Mehanizem priporo\u010dil dolo\u010da, da va\u0161a aplikacija za normalno delovanje potrebuje 300m CPU in 500Mi. Dobili boste tak\u0161ne nastavitve:<\/p>\n<pre><code>viri:\n   zahteve:\n     pomnilnik: 500Mi\n     cpu: 300m\n   omejitve:\n     pomnilnik: 1000Mi\n     cpu: 525m<\/code><\/pre>\n<p>Kot je bilo omenjeno zgoraj, to predstavlja sorazmerno skaliranje na podlagi razmerja zahtev\/omejitev v manifestu:<\/p>\n<ul>\n<li>\n<p>CPU: 200m \u2192 300m: razmerje 1:1,75;<\/p>\n<\/li>\n<li>\n<p>Pomnilnik: 250Mi \u2192 500Mi: razmerje 1:2.<\/p>\n<\/li>\n<\/ul>\n<p>Kar zadeva <strong>HPA<\/strong>, v tem primeru je mehanizem delovanja bolj pregleden. Dolo\u010dene so pragovne vrednosti metrik, na primer, CPU in pomnilnik, in \u010de povpre\u010dna vrednost vseh replik prese\u017ee prag, se aplikacija pove\u010da za +1 pod, dokler vrednost ne pade pod prag ali dokler ne dose\u017ee najve\u010djega \u0161tevila replik.<\/p>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f7a3fa28177d66be925867e38f5bbed6.png\" style=\"display:block;margin: 0 auto;\" \/>Slika je bila prevzeta z https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Poleg obi\u010dajnih metrik, kot sta CPU in pomnilnik, lahko nastavite pragove na svojih prilagojenih metrikah iz Prometheus in z njimi upravljate, \u010de menite, da je to najbolj natan\u010dna opredelitev trenutka, ko je treba skalirati va\u0161o aplikacijo. Ko se aplikacija stabilizira pod dolo\u010deno mejo metrike, bo HPA za\u010del zmanj\u0161evati pode navzdol do minimalnega \u0161tevila replik ali do trenutka, ko bo obremenitev zadovoljila dolo\u010den prag.<\/p>\n<h2>6. Ne pozabite na Node Affinity in Pod Affinity<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/e718191d9e8ff25fd3b2d65cba9b3b73.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ne vse vozli\u0161\u010da delujejo na enaki opremi, ne vse pode morajo izvajati aplikacije, ki zahtevajo intenzivno obdelavo. Kubernetes omogo\u010da dolo\u010ditev specializacije vozli\u0161\u010d in podov s pomo\u010djo <strong>Node Affinity<\/strong> in <strong>Pod Affinity<\/strong>.<\/p>\n<p>\u010ce imate vozli\u0161\u010da, primerna za operacije z intenzivno obdelavo, je za najve\u010djo u\u010dinkovitost najbolje povezati aplikacije z ustreznimi vozli\u0161\u010di. Za to uporabite <code>nodeSelector<\/code> z oznako vozli\u0161\u010da.<\/p>\n<p>Recimo, da imate dve vozli: eno z <code>CPUType=HIGHFREQ<\/code> in velikim \u0161tevilom hitrih jeder, drugo z <code>MemoryType=HIGHMEMORY<\/code> velikim \u0161tevilom pomnilnika in ve\u010djo hitrostjo. Najla\u017eje je dodeliti uvajanje poda vozli\u0161\u010du <code>HIGHFREQ<\/code>, tako da dodate v razdelku <code>spec<\/code> tak\u0161en selektor:<\/p>\n<pre><code>\u2026\nnodeSelector:\n\tCPUType: HIGHFREQ<\/code><\/pre>\n<p>Bolj draga in specifi\u010dna mo\u017enost, da to dose\u017eete, je uporaba <code>nodeAffinity<\/code> u polju <code>affinity<\/code> razdelka. <code>spec<\/code>Obstajata dva mo\u017enosti:<\/p>\n<ul>\n<li>\n<p><code>requiredDuringSchedulingIgnoredDuringExecution<\/code>: stroga nastavitev (na\u010drtovalnik bo uvajal pode samo na dolo\u010denih vozli\u0161\u010dih (in nikjer drugje));<\/p>\n<\/li>\n<li>\n<p><code>preferredDuringSchedulingIgnoredDuringExecution<\/code>: mehka konfiguracija (na\u010drtovalec bo posku\u0161al razporediti na dolo\u010denih vozlih, in \u010de to ne uspe, bo posku\u0161al razporediti na naslednjem razpolo\u017eljivem vozlu).<\/p>\n<\/li>\n<\/ul>\n<p>Lahko dolo\u010dite dolo\u010den sintaksis za upravljanje oznak vozlov, na primer, <code>V<\/code>, <code>NeV<\/code>, <code>Obstaja<\/code>, <code>NeObstaja<\/code>, <code>Ve\u010dji<\/code> ili <code>Manj\u0161i<\/code>. Vendar pa ne pozabite, da zapleteni Metodi v dolgih seznamih oznak upo\u010dasnijo sprejemanje odlo\u010ditev v kriti\u010dnih situacijah. Drugimi besedami, ne zapletajte.<\/p>\n<p>Kot je \u017ee omenjeno, Kubernetes omogo\u010da dolo\u010ditev vezave trenutnih podov. To pomeni, da lahko dolo\u010dite, da dolo\u010deni podi delujejo z drugimi podi v isti razpolo\u017eljivostni coni (kar je pomembno za oblake) ali vozlih.<\/p>\n<p>V <code>podAffinity<\/code> polja <code>affinity<\/code> razdelka. <code>spec<\/code> so na voljo ista polja kot v primeru <code>nodeAffinity<\/code>: <code>requiredDuringSchedulingIgnoredDuringExecution<\/code><strong> <\/strong>in <code>preferredDuringSchedulingIgnoredDuringExecution<\/code>. Edina razlika je, da <code>matchExpressions<\/code> ve\u017ee pode na vozlo, na katerem \u017ee te\u010de pod s to oznako.<\/p>\n<p>Poleg tega Kubernetes ponuja polje <code>podAntiAffinity<\/code>, ki pa ne ve\u017ee poda na vozlo s specifi\u010dnimi podi.<\/p>\n<p>Glede izrazov <code>nodeAffinity<\/code> lahko damo isti nasvet: trudite se ohraniti enostavnost in logi\u010dnost pravil, ne posku\u0161ajte preobremeniti specifikacije podov s kompleksnim naborom pravil. Zelo enostavno je ustvariti pravilo, ki ne bo ustrezalo pogojem grozda, kar ustvarja nepotrebno obremenitev za na\u010drtovalec in zmanj\u0161a splo\u0161no zmogljivost.<\/p>\n<h2>7. Tainti &amp; Tolerancije<\/h2>\n<p>Obstaja \u0161e en na\u010din za upravljanje na\u010drtovalca. \u010ce imate veliko grozda s stotinami vozlov in tiso\u010di mikro storitev, je zelo te\u017eko prepre\u010diti, da se nekateri podi ne razporejajo na dolo\u010dene vozle.<\/p>\n<p>Pri tem pomaga mehanizem taintov \u2014 prepovedujo\u010dih pravil. Na primer, lahko v dolo\u010denih scenarijih prepoveste dolo\u010denim vozlom, da pri sebi izvajajo pode. Za uporabo tainta na dolo\u010denem vozlu morate uporabiti mo\u017enost <code>taint<\/code> v kubectl. Dolo\u010dite klju\u010di in vrednost ter nato taint, kot je <code>NoSchedule<\/code> ili <code>NoExecute<\/code>:<\/p>\n<pre><code>$ kubectl taint nodes node10 node-role.kubernetes.io\/ingress=true:NoSchedule<\/code><\/pre>\n<p>Prav tako je vredno omeniti, da mehanizem taint podpira tri osnovne u\u010dinke: <code>NoSchedule<\/code>, <code>NoExecute<\/code> in <code>PreferNoSchedule<\/code><strong>. <\/strong><\/p>\n<ul>\n<li>\n<p><code>NoSchedule<\/code><strong> <\/strong>pomeni, da dokler v specifikaciji poda ne bo ustrezajo\u010de vnos <code>tolerations<\/code>, ne bo mogel biti razporejen na vozlu (v tem primeru <code>node10<\/code>).<\/p>\n<\/li>\n<li>\n<p><code>PreferNoSchedule <\/code>\u2014 poenostavljena razli\u010dica <code>NoSchedule<\/code>. V tem primeru se na\u010drtovalec trudi, da ne razporedi podov, ki nimajo ustreznega vnosa <code>tolerations<\/code> na vozlo, vendar to ni stroga omejitev. \u010ce v grozdu ne bo virov, se bodo podi za\u010deli razporejati na to vozlo.<\/p>\n<\/li>\n<li>\n<p><code>NoExecute<\/code><strong> <\/strong>\u2014 ta efekt povzro\u010di takoj\u0161njo evakuacijo pods, ki nimajo ustreznega zapisa <code>tolerations<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>Zanimivo je, da se to vedenje lahko prekli\u010de z mehanizmom toleranc. To je priro\u010dno, ko obstaja 'prepovedana' vozli\u0161\u010da in morate na njej postaviti le infrastrukturne storitve. Kako to storiti? Dovolite le tiste pods, za katere obstaja ustrezna toleranca.<\/p>\n<p>Tako bo izgledala specifikacija poda:<\/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>To ne pomeni, da bo pri naslednjem redeployu pod padel ravno na to vozli\u0161\u010de, to ni mehanizem Node Affinity in <code>nodeSelector<\/code>. Toda s kombiniranjem ve\u010d funkcij lahko dose\u017eete zelo prilagodljivo nastavitev razporejevalnika.<\/p>\n<h2>8. Nastavite prioriteto uvajanja pods<\/h2>\n<p>To, da ste nastavili priklju\u010ditev pods na vozli\u0161\u010da, ne pomeni, da morajo biti vsi pods obravnavani z enako prioriteto. Na primer, morda boste \u017eeleli uvajati nekatere pods pred drugimi.<\/p>\n<p>Kubernetes ponuja razli\u010dne na\u010dine za nastavitev prioritete pods (Pod Priority and Preemption). Nastavitev se sestavlja iz ve\u010d delov: objekta <code>PriorityClass<\/code><strong> <\/strong>in opisa polja <code>priorityClassName<\/code><strong> <\/strong>v specifikaciji poda. Poglejmo primer:<\/p>\n<pre><code>apiVersion: scheduling.k8s.io\/v1\nkind: PriorityClass\nmetadata:\n  name: high-priority\nvalue: 99999\nglobalDefault: false\ndescription: \"Ta razred prednosti naj se uporablja le za zelo pomembne pods\"<\/code><\/pre>\n<p>Ustvarjamo <code>PriorityClass<\/code>, mu dodelimo ime, opis in vrednost.<strong> <\/strong>Bolj <code>value<\/code>, vi\u0161ja prioriteta. Vrednost je lahko katerokoli 32-bitno celo \u0161tevilo, manj\u0161e ali enako 1 000 000 000. Vi\u0161je vrednosti so rezervirane za kriti\u010dne sistemske pods, ki obi\u010dajno ne morejo biti izpodrinjeni.<strong> <\/strong>Izpodrivanje se bo zgodilo samo, \u010de visoko prioritiziranemu podu ne bo mogo\u010de razporediti, nato bodo nekateri pods z dolo\u010denega vozli\u0161\u010da evakuirani. \u010ce se vam zdi ta mehanizem preve\u010d strog, lahko dodate mo\u017enost <code>preemptionPolicy: Never<\/code>, in takrat ne bo izpodrivanja, pod bo stal prvi v vrsti in \u010dakal, da razporejevalnik najde proste vire zanj.<\/p>\n<p>Nato ustvarimo pod, kjer navedemo ime <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>Lahko ustvarite neomejeno \u0161tevilo razredov prioritet, \u010deprav se priporo\u010da, da se s tem ne pretirava (na primer, omejite se na nizko, srednjo in visoko prioriteto). <\/p>\n<p>Tako boste v primeru potrebe lahko pove\u010dali u\u010dinkovitost razporejanja kriti\u010dnih storitev, kot sta nginx-ingress-controller, coredns itd.<\/p>\n<h2>9. Optimizirajte ETCD-klaster<\/h2>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f5917adfa943c789b6c784f43305851b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>ETCD lahko imenujemo mo\u017egani celotnega klasterja. Zelo pomembno je, da to bazo podatkov vzdr\u017eujete na visoki ravni, saj od nje odvisna hitrost operacij v 'Kubi'. Standardna in hkrati dobra re\u0161itev je, da ETCD klaster postavite na glavne vozli\u0161\u010da, da boste imeli minimalno zakasnitev do kube-apiserver. \u010ce to ni izvedljivo, postavite ETCD \u010dim bli\u017eje z dobrim prepustnostjo med udele\u017eenci. Prav tako bodite pozorni na to, koliko vozli\u0161\u010d iz ETCD lahko izpade brez \u0161kode za klaster.<\/p>\n<p><img decoding=\"async\" alt=\"Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/cdd2c32eefed253c6ff774899c367ccc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Imejte v mislih, da lahko pretirano pove\u010danje \u0161tevila udele\u017eencev v klasterju pove\u010da odpornost proti napakam na ra\u010dun zmogljivosti; vse mora biti zmerno.<\/p>\n<p>\u010ce govorimo o nastavitvi storitev, je priporo\u010dil malo:<\/p>\n<ol>\n<li>\n<p>Imeti dobro strojno opremo, odvisno od velikosti klasterja (lahko preverite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/hardware.md\">tukaj<\/a><\/noindex>).<\/p>\n<\/li>\n<li>\n<p>Prilagoditi nekaj parametrov, \u010de ste razporedili klaster med dvema podatkovnima centroma ali va\u0161a omre\u017eja in diski ne delujejo najbolje (lahko preverite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/tuning.md\">tukaj<\/a><\/noindex>).<\/p>\n<\/li>\n<\/ol>\n<h2>Zaklju\u010dek<\/h2>\n<p>V tem \u010dlanku so opisane to\u010dke, ki se jih na\u0161a ekipa prizadeva upo\u0161tevati. To ni korak za korakom opis dejanj, ampak mo\u017enosti, ki bi lahko koristile pri optimizaciji stro\u0161kov klasterja. Jasno je, da je vsak klaster edinstven, in re\u0161itve za nastavitev se lahko precej razlikujejo, zato bi bilo zanimivo sli\u0161ati va\u0161e povratne informacije: kako spremljate svoj klaster Kubernetes in s \u010dim izbolj\u0161ujete njegovo delovanje. Delite svoje izku\u0161nje v komentarjih, zanimivo bo izvedeti. <\/p>\n<p>Izvor: <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 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\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\/sl\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/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\udd47Devet nasvetov za izbolj\u0161anje zmogljivosti Kubernetes | ProHoster","description":"Zdravo svima!","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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!","og:url":"https:\/\/prohoster.info\/sl\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/97982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=97982"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/97982\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/97983"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=97982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=97982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=97982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}