{"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\/sk\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","title":{"rendered":"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/92dc510aa9d785a31d310816b18bf854.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ahojte v\u0161etci! Vol\u00e1m sa Oleg Sidorenkov, pracujem vo firme DomKlik ako ved\u00faci t\u00edmu infra\u0161trukt\u00fary. Na\u0161e \u201eKocky\u201c prev\u00e1dzkujeme na\u017eivo u\u017e viac ako tri roky a za ten \u010das sme za\u017eili s \u0148ou ve\u013ea zauj\u00edmav\u00fdch momentov. Dnes v\u00e1m poviem, ako s spr\u00e1vnym pr\u00edstupom m\u00f4\u017eeme z \u201evanilkov\u00e9ho\u201c Kubernetes vy\u0165a\u017ei\u0165 e\u0161te viac v\u00fdkonu pre v\u00e1\u0161 klaster. Pripraven\u00ed, pozor, \u0161tart! <\/p>\n<p>V\u0161etci vieme, \u017ee Kubernetes je \u0161k\u00e1lovate\u013en\u00fd syst\u00e9m s otvoren\u00fdm zdrojov\u00fdm k\u00f3dom na orchestr\u00e1ciu kontajnerov; alebo in\u00fdmi slovami, 5 bin\u00e1rov, ktor\u00e9 robia k\u00fazlo riadiac \u017eivotn\u00fd cyklus va\u0161ich mikroservisov v serverovom prostred\u00ed. Okrem toho je to dos\u0165 flexibiln\u00fd n\u00e1stroj, ktor\u00fd si m\u00f4\u017eete posklada\u0165 ako Lego, aby ste dosiahli maxim\u00e1lnu prisp\u00f4sobite\u013enos\u0165 pre r\u00f4zne \u00falohy.<\/p>\n<p>A zdalo by sa, \u017ee v\u0161etko je v poriadku: jednoducho nah\u00e1d\u017ete servery do klasteru ako drevo do pece a \u017eiadne starosti. Ale ak sa zauj\u00edmate o ekol\u00f3giu, zamysl\u00edte sa: \u201eAko m\u00f4\u017eem udr\u017eiava\u0165 ohe\u0148 v peci a \u0161etri\u0165 les?\u201c. In\u00fdmi slovami, ako n\u00e1js\u0165 sp\u00f4soby zlep\u0161enia infra\u0161trukt\u00fary a zn\u00ed\u017eenia n\u00e1kladov.<\/p>\n<h2>1. Sledovanie zdrojov t\u00edmov a aplik\u00e1ci\u00ed<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/91e2e60b47ee985b024532c8b685230c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jednou z najjednoduch\u0161\u00edch, ale \u00fa\u010dinn\u00fdch met\u00f3d je zavedenie requests\/limits. Rozde\u013ete aplik\u00e1cie pod\u013ea namespace a namespace pod\u013ea t\u00edmov v\u00fdvoja. Nastavte aplik\u00e1cii pred nasaden\u00edm hodnoty spotreby procesorov\u00e9ho \u010dasu, pam\u00e4te a efem\u00e9rneho \u00falo\u017eiska.<\/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>Sk\u00fasenos\u0165ou sme dospeli k z\u00e1veru, \u017ee netreba nafukova\u0165 requests od limits viac ne\u017e dvojn\u00e1sobne. Objem klasteru sa vypo\u010d\u00edtava na z\u00e1klade requests, a ak aplik\u00e1ci\u00e1m nastav\u00edte rozdiel v zdrojoch, napr\u00edklad 5-10-n\u00e1sobn\u00fd, predstavte si, \u010do sa stane s va\u0161ou uzlom, ke\u010f sa napln\u00ed podmi a n\u00e1hle dostane z\u00e1\u0165a\u017e. Ni\u010d dobr\u00e9. Minim\u00e1lne throttling, maxim\u00e1lne sa rozl\u00fa\u010dite s workerom a dostanete cyklick\u00fa z\u00e1\u0165a\u017e na ostatn\u00e9 uzly po tom, ako sa pody za\u010dn\u00fa premiest\u0148ova\u0165.<\/p>\n<p>Okrem toho je mo\u017en\u00e9 pomocou <code>limitranges<\/code> na za\u010diatku m\u00f4\u017eete nastavi\u0165 pre kontajner hodnoty zdrojov \u2014 minim\u00e1lne, maxim\u00e1lne a predvolen\u00e9:<\/p>\n<pre><code>\u279c  ~ kubectl describe limitranges --namespace ops\nName:       limit-range\nNamespace:  ops\nType        Resource           Min   Max   Default Request  Default Limit  Max Limit\/Request Ratio\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>Nezabudnite obmedzi\u0165 zdroje namespace, aby jedna skupina nemohla zabra\u0165 v\u0161etky zdroje klastra:<\/p>\n<pre><code>\u279c  ~ kubectl describe resourcequotas --namespace ops\nName:                   resource-quota\nNamespace:              ops\nResource                Used          Hard\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>Ako je vidie\u0165 z popisu <code>resourcequotas<\/code>, ak sa t\u00edm ops pok\u00fasi nasadi\u0165 pod, ktor\u00e9 by spotrebov\u00e1vali \u010fal\u0161\u00edch 10 cpu, pl\u00e1nova\u010d to nedovol\u00ed a vr\u00e1ti error:<\/p>\n<pre><code>Error creating: pods \"nginx-proxy-9967d8d78-nh4fs\" is forbidden: exceeded quota: resource-quota, requested: limits.cpu=5,requests.cpu=5, used: limits.cpu=77250m,requests.cpu=53850m, limited: limits.cpu=10,requests.cpu=10<\/code><\/pre>\n<p>Na rie\u0161enie podobn\u00e9ho probl\u00e9mu m\u00f4\u017eete nap\u00edsa\u0165 n\u00e1stroj, napr\u00edklad <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pauljamm\/team-operator\">web<\/a><\/noindex>, ktor\u00fd dok\u00e1\u017ee uklada\u0165 a commitova\u0165 stav zdrojov t\u00edmov.<\/p>\n<h2>2. Vyberajte optim\u00e1lne \u00falo\u017eisko s\u00faborov<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c7f8bdbf5490acc9061695a6d608015e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tu by som sa chcel dotkn\u00fa\u0165 t\u00e9my persistentn\u00fdch objemov a diskov\u00e9ho syst\u00e9mu worker-nod Kubernetes. D\u00fafam, \u017ee nikto nepou\u017e\u00edva \u201eKube\u201c na HDD v produkcii, ale niekedy ani oby\u010dajn\u00fd SSD nesta\u010d\u00ed. Stretli sme sa s probl\u00e9mom, \u017ee logy zab\u00edjali disk svojou oper\u00e1ciou vstupu-v\u00fdstupu, a tu nie je ve\u013ea mo\u017enost\u00ed na rie\u0161enie: <\/p>\n<ul>\n<li>\n<p>Pou\u017e\u00edva\u0165 vysoko v\u00fdkonn\u00e9 SSD alebo prejs\u0165 na NVMe (ak s\u00e1m spravujete svoj hardv\u00e9r).<\/p>\n<\/li>\n<li>\n<p>Zn\u00ed\u017ei\u0165 \u00farove\u0148 logovania.<\/p>\n<\/li>\n<li>\n<p>Robi\u0165 \u201einteligentn\u00e9\u201c vyv\u00e1\u017eenie podov, ktor\u00e9 za\u0165a\u017euj\u00fa disk (<code>podAntiAffinity<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>Obr\u00e1zok vy\u0161\u0161ie ukazuje, \u010do sa deje pod nginx-ingress-controller s diskom, ke\u010f je zapnut\u00e9 logovanie access_logs (~12 tis\u00edc logov\/sek.). Tento stav m\u00f4\u017ee samozrejme vies\u0165 k degrad\u00e1cii v\u0161etk\u00fdch aplik\u00e1ci\u00ed na tejto node.<\/p>\n<p>Pokia\u013e ide o PV, bohu\u017eia\u013e som nesk\u00fa\u0161al v\u0161etky <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/#types-of-persistent-volumes\">druhy<\/a><\/noindex> Persistuj\u00face objemy. Pou\u017eite najlep\u0161\u00ed variant, ktor\u00fd v\u00e1m presne vyhovuje. Historicky sa stalo, \u017ee mal\u00e1 \u010das\u0165 slu\u017eieb potrebuje RWX objemy, a na tento \u00fa\u010del sa u\u017e d\u00e1vno za\u010dalo pou\u017e\u00edva\u0165 NFS \u00falo\u017eisko. Lacn\u00e9 a... posta\u010duje. Samozrejme, mali sme s n\u00edm mno\u017estvo probl\u00e9mov \u2014 ale nau\u010dili sme sa ho optimalizova\u0165, a u\u017e n\u00e1s to netr\u00e1pi. Ak je to mo\u017en\u00e9, prejdite na objektov\u00e9 \u00falo\u017eisko S3.<\/p>\n<h2>3. Zbierajte optimalizovan\u00e9 obrazy<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c25ce405d1eb4c01f031e18b0bfa4836.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Najlep\u0161ie je pou\u017e\u00edva\u0165 obrazy optimalizovan\u00e9 pre kontajnery, aby Kubernetes mohol r\u00fdchlej\u0161ie ich na\u010d\u00edta\u0165 a efekt\u00edvnej\u0161ie vykon\u00e1va\u0165.&nbsp;<\/p>\n<p>Optimalizovanos\u0165 znamen\u00e1, \u017ee obrazy:<\/p>\n<ul>\n<li>\n<p>obsahuj\u00fa iba jednu aplik\u00e1ciu alebo vykon\u00e1vaj\u00fa iba jednu funkciu;<\/p>\n<\/li>\n<li>\n<p>s\u00fa malej ve\u013ekosti, preto\u017ee ve\u013ek\u00e9 obrazy sa hor\u0161ie pren\u00e1\u0161aj\u00fa po sieti;<\/p>\n<\/li>\n<li>\n<p>maj\u00fa koncov\u00e9 body na kontrolu prev\u00e1dzky a pripravenosti, pomocou ktor\u00fdch m\u00f4\u017ee Kubernetes prija\u0165 nejak\u00e9 opatrenia v pr\u00edpade v\u00fdpadkov;<\/p>\n<\/li>\n<li>\n<p>pou\u017e\u00edvaj\u00fa opera\u010dn\u00e9 syst\u00e9my priate\u013esk\u00e9 k kontajnerom (ako Alpine alebo CoreOS), ktor\u00e9 s\u00fa odolnej\u0161ie vo\u010di chyb\u00e1m konfigur\u00e1cie;<\/p>\n<\/li>\n<li>\n<p>pou\u017e\u00edvaj\u00fa viacstup\u0148ov\u00e9 zostavy, aby ste mohli nasadzova\u0165 iba skompilovan\u00e9 aplik\u00e1cie, a nie sprievodn\u00e9 zdrojov\u00e9 k\u00f3dy.<\/p>\n<\/li>\n<\/ul>\n<p>Existuje mnoho n\u00e1strojov a slu\u017eieb, ktor\u00e9 umo\u017e\u0148uj\u00fa overi\u0165 a optimalizova\u0165 obrazy za behu. Je d\u00f4le\u017eit\u00e9 v\u017edy udr\u017eiava\u0165 ich aktu\u00e1lne a overen\u00e9 na bezpe\u010dnos\u0165. Nakoniec dostanete: <\/p>\n<ol>\n<li>\n<p>Zn\u00ed\u017eenie sie\u0165ovej z\u00e1\u0165a\u017ee na celom klasteri.<\/p>\n<\/li>\n<li>\n<p>Zn\u00ed\u017eenie \u010dasu spustenia kontajnera.<\/p>\n<\/li>\n<li>\n<p>Men\u0161\u00ed objem cel\u00e9ho v\u00e1\u0161ho Docker registry.<\/p>\n<\/li>\n<\/ol>\n<h2>4. Pou\u017e\u00edvajte DNS cache<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/9f4384462a77dc528d7911c56f684f2d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Pokia\u013e ide o vysok\u00e9 za\u0165a\u017eenia, bez optimaliz\u00e1cie DNS syst\u00e9mu klasteru sa \u017eije dos\u0165 zle. Pred \u010dasom podporovali v\u00fdvoj\u00e1ri Kubernetes svoje rie\u0161enie kube-dns. Bolo to implementovan\u00e9 aj u n\u00e1s, no tento softv\u00e9r sa pr\u00edli\u0161 nein\u0161taloval a nedosahoval po\u017eadovan\u00fd v\u00fdkon, hoci sa zd\u00e1, \u017ee \u00faloha je jednoduch\u00e1. Potom pri\u0161iel coredns, na ktor\u00fd sme pre\u0161li a nemali sme \u017eiadny probl\u00e9m, nesk\u00f4r sa stal z\u00e1kladnou DNS slu\u017ebou v K8s. V nejakom momente sme sa dostali na 40 tis\u00edc rps vo\u010di DNS syst\u00e9mu a toto rie\u0161enie tie\u017e prestalo sta\u010di\u0165. Ale, na\u0161\u0165astie, vy\u0161iel Nodelocaldns, ktor\u00fd je aj lok\u00e1lnou cache, a tie\u017e <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/nodelocaldns\/\">NodeLocal DNSCache<\/a><\/noindex>.<\/p>\n<p>Pre\u010do to pou\u017e\u00edvame? V jadre Linuxu je chyba, ktor\u00e1 pri viacer\u00fdch pr\u00edstupoch cez conntrack NAT cez UDP vedie k prete\u010deniu pri z\u00e1pise do conntrack tabuliek, a \u010das\u0165 prem\u00e1vky cez NAT sa str\u00e1ca (ka\u017ed\u00fd pr\u00edstup cez slu\u017ebu je NAT). Nodelocaldns t\u00fato probl\u00e9m vyrie\u0161i t\u00fdm, \u017ee zbav\u00ed NAT a upgradne pripojenie na TCP k upstream DNS, ako aj lok\u00e1lnym cachingom DNS dotazov na upstream (vr\u00e1tane kr\u00e1tkeho 5-sekundov\u00e9ho negat\u00edvneho cache).<\/p>\n<h2>5. Automaticky horizont\u00e1lne a vertik\u00e1lne \u0161k\u00e1lujte pod.<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3804a14685a55160fa7d9f3226eab1fa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>M\u00f4\u017eete si s istotou poveda\u0165, \u017ee v\u0161etky va\u0161e mikroservisy s\u00fa pripraven\u00e9 na trojn\u00e1sobn\u00fd n\u00e1rast z\u00e1\u0165a\u017ee? Ako spr\u00e1vne prerozde\u013eova\u0165 zdroje svojim aplik\u00e1ci\u00e1m? Ma\u0165 spusten\u00e9 nieko\u013eko podov nad pracovnou z\u00e1\u0165a\u017eou sa m\u00f4\u017ee uk\u00e1za\u0165 ako nadbyto\u010dn\u00e9, zatia\u013e \u010do udr\u017eiavanie na hrane m\u00f4\u017ee vies\u0165 k v\u00fdpadkom pri n\u00e1hlom n\u00e1raste trafik na slu\u017ebu. Zlat\u00e1 stredn\u00e1 cesta pom\u00e1ha dosiahnu\u0165 zakl\u00ednadlo mno\u017estva prostredn\u00edctvom tak\u00fdchto slu\u017eieb ako <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/\">Horizontal Pod Autoscaler<\/a><\/noindex> a <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> umo\u017e\u0148uje automaticky zvy\u0161ova\u0165 requests\/limits va\u0161ich kontajnerov v pode v z\u00e1vislosti od skuto\u010dn\u00e9ho vyu\u017eitia. Ako m\u00f4\u017ee by\u0165 u\u017eito\u010dn\u00fd? Ak m\u00e1te pod, ktor\u00fd z ak\u00e9hoko\u013evek d\u00f4vodu nemo\u017eno horizont\u00e1lne \u0161k\u00e1lova\u0165 (\u010do nie je \u00faplne spo\u013eahliv\u00e9), m\u00f4\u017eete sk\u00fasi\u0165 d\u00f4verova\u0165 zmene jeho zdrojov VPA. Jeho trik spo\u010d\u00edva v syst\u00e9me odpor\u00fa\u010dan\u00ed na z\u00e1klade historick\u00fdch a aktu\u00e1lnych \u00fadajov z metric-server, tak\u017ee ak nechcete automaticky meni\u0165 requests\/limits, m\u00f4\u017eete jednoducho sledova\u0165 odpor\u00fa\u010dan\u00e9 zdroje pre va\u0161e kontajnery a optimalizova\u0165 nastavenia na \u0161etrenie procesora a pam\u00e4te v clustre. <\/p>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3965950aa3315faa4bb3e3ff5bd61955.png\" style=\"display:block;margin: 0 auto;\" \/>Obr\u00e1zok prevzat\u00fd z https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Pl\u00e1nova\u010d v Kubernetes sa v\u017edy zaklad\u00e1 na requests. Ak\u00fako\u013evek hodnotu tam nastav\u00edte, pl\u00e1nova\u010d bude h\u013eada\u0165 vhodn\u00fd uzol na jej z\u00e1klade. Hodnoty limits s\u00fa potrebn\u00e9 kubletu, aby rozumel, kedy obmedzi\u0165 alebo zabi\u0165 pod. A preto\u017ee jedin\u00fd d\u00f4le\u017eit\u00fd parameter je hodnota requests, VPA bude pracova\u0165 s \u0148ou. Kedyko\u013evek nastav\u00edte vertik\u00e1lne \u0161k\u00e1lovanie aplik\u00e1cie, ur\u010dujete, ak\u00e9 by mali by\u0165 requests. A \u010do teda bude s limits? Tento parameter sa tie\u017e proporcion\u00e1lne \u0161k\u00e1luje.<\/p>\n<p>Napr\u00edklad, tu s\u00fa be\u017en\u00e9 nastavenia podu:<\/p>\n<pre><code>zdroje:\n   po\u017eiadavky:\n     pam\u00e4\u0165: 250Mi\n     CPU: 200m\n   obmedzenia:\n     pam\u00e4\u0165: 500Mi\n     CPU: 350m<\/code><\/pre>\n<p>Syst\u00e9m odpor\u00fa\u010dan\u00ed ur\u010duje, \u017ee va\u0161a aplik\u00e1cia potrebuje na plynul\u00fd chod 300m CPU a 500Mi. Dostanete tak\u00e9to nastavenia:<\/p>\n<pre><code>zdroje:\n   po\u017eiadavky:\n     pam\u00e4\u0165: 500Mi\n     CPU: 300m\n   obmedzenia:\n     pam\u00e4\u0165: 1000Mi\n     CPU: 525m<\/code><\/pre>\n<p>Ako bolo spomenut\u00e9 vy\u0161\u0161ie, ide o proporcion\u00e1lne \u0161k\u00e1lovanie na z\u00e1klade pomeru po\u017eiadaviek \/ obmedzen\u00ed v manifeste:<\/p>\n<ul>\n<li>\n<p>CPU: 200m \u2192 300m: pomer 1:1.75;<\/p>\n<\/li>\n<li>\n<p>Pam\u00e4\u0165: 250Mi \u2192 500Mi: pomer 1:2.<\/p>\n<\/li>\n<\/ul>\n<p>\u010co sa t\u00fdka <strong>HPA<\/strong>, tu je mechanizmus pr\u00e1ce transparentnej\u0161\u00ed. Nastavuj\u00fa sa prahov\u00e9 hodnoty metr\u00edk, napr\u00edklad CPU a pam\u00e4\u0165, a ak priemer v\u0161etk\u00fdch repl\u00edk prekro\u010d\u00ed prah, aplik\u00e1cia sa \u0161k\u00e1luje o +1 pod a\u017e k\u00fdm hodnota neklesne pod prah, alebo pokia\u013e sa nedosiahne maxim\u00e1lny po\u010det repl\u00edk.<\/p>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f7a3fa28177d66be925867e38f5bbed6.png\" style=\"display:block;margin: 0 auto;\" \/>Obr\u00e1zok prevzat\u00fd z https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Okrem be\u017en\u00fdch metr\u00edk, ako s\u00fa CPU a pam\u00e4\u0165, m\u00f4\u017eete nastavi\u0165 prahov\u00e9 hodnoty na svojich vlastn\u00fdch prisp\u00f4soben\u00fdch metrik\u00e1ch z Prometheus a pracova\u0165 s nimi, ak to pova\u017eujete za najpresnej\u0161ie ur\u010denie, kedy by sa mala va\u0161a aplik\u00e1cia \u0161k\u00e1lova\u0165. Potom, \u010do sa aplik\u00e1cia stabilizuje pod zadanou hranicou metriky, HPA za\u010dne zmen\u0161ova\u0165 pod y na minim\u00e1lny po\u010det repl\u00edk alebo do stavu, kedy z\u00e1\u0165a\u017e bude sp\u013a\u0148a\u0165 po\u017eadovan\u00fa prahov\u00fa hodnotu.<\/p>\n<h2>6. Nezab\u00fadajte na affinitu uzlov a affinita podov<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/e718191d9e8ff25fd3b2d65cba9b3b73.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nie v\u0161etky uzly pracuj\u00fa na rovnakom hardv\u00e9ri, nie v\u0161etk\u00fdm podom je potrebn\u00e9 vykon\u00e1va\u0165 aplik\u00e1cie vy\u017eaduj\u00face intenz\u00edvne v\u00fdpo\u010dty. Kubernetes umo\u017e\u0148uje nastavi\u0165 \u0161pecializ\u00e1ciu uzlov a podov pomocou <strong>Node Affinity<\/strong> a <strong>Pod Affinity<\/strong>.<\/p>\n<p>Ak m\u00e1te uzly vhodn\u00e9 na oper\u00e1cie s intenz\u00edvnymi v\u00fdpo\u010dtami, je lep\u0161ie priradi\u0165 aplik\u00e1cie k pr\u00edslu\u0161n\u00fdm uzlom pre maxim\u00e1lnu efektivitu. Na to pou\u017eite <code>nodeSelector<\/code> s ozna\u010den\u00edm uzla.<\/p>\n<p>Predpokladajme, \u017ee m\u00e1te dva uzly: jeden s <code>CPUType=HIGHFREQ<\/code> a ve\u013ek\u00fdm po\u010dtom r\u00fdchlych jadier, druh\u00fd s <code>MemoryType=HIGHMEMORY<\/code> s ve\u013ek\u00fdm mno\u017estvom pam\u00e4te a vy\u0161\u0161\u00edm v\u00fdkonom. Najjednoduch\u0161ie je priradi\u0165 nasadenie podu k uzlu <code>HIGHFREQ<\/code>, pridan\u00edm do sekcie <code>spec<\/code> tak\u00e9hoto selektora:<\/p>\n<pre><code>\u2026\nnodeSelector:\n\tCPUType: HIGHFREQ<\/code><\/pre>\n<p>N\u00e1kladnej\u0161\u00ed a \u0161pecifick\u00fd sp\u00f4sob, ako to dosiahnu\u0165, je pou\u017ei\u0165 <code>nodeAffinity<\/code> v poli <code>affinity<\/code> sekcie. <code>spec<\/code>S\u00fa dva varianty:<\/p>\n<ul>\n<li>\n<p><code>requiredDuringSchedulingIgnoredDuringExecution<\/code>: tvrd\u00e9 nastavenie (pl\u00e1nova\u010d bude nasadzova\u0165 pod y iba na konkr\u00e9tnych uzloch (a nikde inde));<\/p>\n<\/li>\n<li>\n<p><code>preferredDuringSchedulingIgnoredDuringExecution<\/code>: jemn\u00e1 konfigur\u00e1cia (planner sa pok\u00fasi nasadi\u0165 na konkr\u00e9tnych uzloch, a ak to nebude mo\u017en\u00e9, pok\u00fasi sa nasadi\u0165 na nasleduj\u00facom dostupnom uzle).<\/p>\n<\/li>\n<\/ul>\n<p>M\u00f4\u017eete nastavi\u0165 \u0161pecifick\u00fa syntax pre riadenie zna\u010diek uzlov, napr\u00edklad, <code>In<\/code>, <code>NotIn<\/code>, <code>Exists<\/code>, <code>DoesNotExist<\/code>, <code>Gt<\/code> alebo <code>Lt<\/code>. Pam\u00e4tajte v\u0161ak, \u017ee zlo\u017eit\u00e9 met\u00f3dy v dlh\u00fdch zoznamoch zna\u010diek spoma\u013euj\u00fa rozhodovanie v kritick\u00fdch situ\u00e1ci\u00e1ch. In\u00fdmi slovami, zbyto\u010dne to nekompliku\u0439\u0442\u0435.<\/p>\n<p>Ako bolo spomenut\u00e9 vy\u0161\u0161ie, Kubernetes umo\u017e\u0148uje nastavi\u0165 viazanie aktu\u00e1lnych podov. To znamen\u00e1, \u017ee m\u00f4\u017eete zabezpe\u010di\u0165, aby ur\u010dit\u00e9 pody pracovali spolu s in\u00fdmi podmi v tej istej z\u00f3ne dostupnosti (vhodn\u00e9 pre cloudu) alebo uzloch.<\/p>\n<p>V <code>podAffinity<\/code> polia <code>affinity<\/code> sekcie. <code>spec<\/code> s\u00fa k dispoz\u00edcii tie ist\u00e9 polia, ako v pr\u00edpade <code>nodeAffinity<\/code>: <code>requiredDuringSchedulingIgnoredDuringExecution<\/code><strong> <\/strong>a <code>preferredDuringSchedulingIgnoredDuringExecution<\/code>. Jedin\u00fd rozdiel je v tom, \u017ee <code>matchExpressions<\/code> via\u017ee pody na uzol, na ktorom u\u017e be\u017e\u00ed pod s takou zna\u010dkou.<\/p>\n<p>E\u0161te Kubernetes pon\u00faka pole <code>podAntiAffinity<\/code>, ktor\u00e9 naopak nevia\u017ee pod na uzol s ur\u010dit\u00fdmi podmi.<\/p>\n<p>Pokia\u013e ide o v\u00fdrazy <code>nodeAffinity<\/code> , m\u00f4\u017eete da\u0165 rovnak\u00fa radu: sna\u017ete sa zachova\u0165 jednoduchos\u0165 a logiku pravidiel, nesna\u017ete sa pre\u0165a\u017ei\u0165 \u0161pecifik\u00e1cie podov zlo\u017eit\u00fdm s\u00faborom pravidiel. Je ve\u013emi jednoduch\u00e9 vytvori\u0165 pravidlo, ktor\u00e9 nebude vyhovova\u0165 podmienkam klastru, \u010d\u00edm sa vytvor\u00ed zbyto\u010dn\u00e9 za\u0165a\u017eenie pre pl\u00e1nova\u010d a zn\u00ed\u017ei sa celkov\u00fd v\u00fdkon.<\/p>\n<h2>7. Taints &amp; Tolerations<\/h2>\n<p>Existuje e\u0161te jeden sp\u00f4sob riadenia pl\u00e1nova\u010da. Ak m\u00e1te ve\u013ek\u00fd klaster so stovkami uzlov a tis\u00edckami mikroslu\u017eieb, ve\u013emi \u0165a\u017eko sa zabra\u0148uje umiestneniu ur\u010dit\u00fdch podov na ur\u010dit\u00fdch uzloch.<\/p>\n<p>Pri tom pom\u00e1ha mechanizmus taints \u2013 zabra\u0148uj\u00facich pravidiel. Napr\u00edklad je mo\u017en\u00e9 v ur\u010dit\u00fdch scen\u00e1roch zak\u00e1za\u0165 ur\u010dit\u00fdm uzlom sp\u00fa\u0161\u0165a\u0165 pody. Na pou\u017eitie taint na konkr\u00e9tny uzol mus\u00edte pou\u017ei\u0165 mo\u017enos\u0165 <code>taint<\/code> v kubectl. Zadajte k\u013e\u00fa\u010d a hodnotu, a potom taint ako napr\u00edklad <code>NoSchedule<\/code> alebo <code>NoExecute<\/code>:<\/p>\n<pre><code>$ kubectl taint nodes node10 node-role.kubernetes.io\/ingress=true:NoSchedule<\/code><\/pre>\n<p>Takisto stoj\u00ed za zmienku, \u017ee mechanizmus taint podporuje tri z\u00e1kladn\u00e9 efekty: <code>NoSchedule<\/code>, <code>NoExecute<\/code> a <code>PreferNoSchedule<\/code><strong>. <\/strong><\/p>\n<ul>\n<li>\n<p><code>NoSchedule<\/code><strong> <\/strong>znamen\u00e1, \u017ee pokia\u013e nebude v \u0161pecifik\u00e1cii podu zodpovedaj\u00faci z\u00e1znam <code>tolerations<\/code>, nebude schopn\u00fd by\u0165 nasaden\u00fd na uzle (v tomto pr\u00edpade <code>node10<\/code>).<\/p>\n<\/li>\n<li>\n<p><code>PreferNoSchedule <\/code>\u2013 zjednodu\u0161en\u00e1 verzia <code>NoSchedule<\/code>. V takom pr\u00edpade sa pl\u00e1nova\u010d pok\u00fasi neudeli\u0165 pody, ktor\u00e9 nemaj\u00fa zodpovedaj\u00faci z\u00e1znam <code>tolerations<\/code> na uzol, ale to nie je pr\u00edsne obmedzenie. Ak v klastru nebud\u00fa dostupn\u00e9 zdroje, pody sa za\u010dn\u00fa nasadzova\u0165 na tento uzol.<\/p>\n<\/li>\n<li>\n<p><code>NoExecute<\/code><strong> <\/strong>\u2014 tento efekt sp\u00fa\u0161\u0165a okam\u017eit\u00fa evaku\u00e1ciu podov, ktor\u00e9 nemaj\u00fa zodpovedaj\u00faci z\u00e1znam <code>tolerations<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>Zauj\u00edmav\u00e9 je, \u017ee tak\u00e9 spr\u00e1vanie mo\u017eno zru\u0161i\u0165 pomocou mechanizmu toleranci\u00ed. Je to v\u00fdhodn\u00e9, ke\u010f existuje \u201ezak\u00e1zan\u00fd\u201c uzol a potrebujete na \u0148om umiestni\u0165 iba infra\u0161trukt\u00farne slu\u017eby. Ako na to? Umo\u017eni\u0165 iba tie pod, pre ktor\u00e9 existuje vhodn\u00e1 tolerancia.<\/p>\n<p>Takto bude vyzera\u0165 \u0161pecifik\u00e1cia podu:<\/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 neznamen\u00e1, \u017ee pri \u010fal\u0161om redeployi pod skon\u010d\u00ed presne na tomto uzle, to nie je mechanizmus Node Affinity a <code>nodeSelector<\/code>. Ale kombinovan\u00edm nieko\u013ek\u00fdch funkci\u00ed m\u00f4\u017eete dosiahnu\u0165 ve\u013emi flexibiln\u00e9 nastavenie pl\u00e1nova\u010da.<\/p>\n<h2>8. Nastavte prioritu nasadzovania podov<\/h2>\n<p>To, \u017ee ste nastavili viazanie podov na uzly, neznamen\u00e1, \u017ee v\u0161etky pod mus\u00ed by\u0165 spracovan\u00e9 s rovnakou prioritou. Napr\u00edklad, m\u00f4\u017eete chcie\u0165 nasadi\u0165 niektor\u00e9 pody sk\u00f4r ako ostatn\u00e9.<\/p>\n<p>Kubernetes pon\u00faka r\u00f4zne sp\u00f4soby nastavenia prioritiz\u00e1cie podov (Pod Priority and Preemption). Nastavenie pozost\u00e1va z nieko\u013ek\u00fdch \u010dast\u00ed: objektu <code>PriorityClass<\/code><strong> <\/strong>a opisu po\u013ea <code>priorityClassName<\/code><strong> <\/strong>v \u0161pecifik\u00e1cii podu. Pozrime sa na pr\u00edklad:<\/p>\n<pre><code>apiVersion: scheduling.k8s.io\/v1\nkind: PriorityClass\nmetadata:\n  name: high-priority\nvalue: 99999\nglobalDefault: false\ndescription: \"T\u00e1to priorita by mala by\u0165 pou\u017e\u00edvan\u00e1 iba pre ve\u013emi d\u00f4le\u017eit\u00e9 pody\"<\/code><\/pre>\n<p>Vytv\u00e1rame <code>PriorityClass<\/code>, ur\u010d\u00edme mu meno, popis a hodnotu.<strong> <\/strong>\u010c\u00edm vy\u0161\u0161ie <code>value<\/code>, t\u00fdm vy\u0161\u0161ia priorita. Hodnota m\u00f4\u017ee by\u0165 ak\u00e9ko\u013evek 32-bitov\u00e9 cel\u00e9 \u010d\u00edslo, men\u0161ie alebo rovn\u00e9 1 000 000 000. Vy\u0161\u0161ie hodnoty s\u00fa rezervovan\u00e9 pre kriticky d\u00f4le\u017eit\u00e9 syst\u00e9mov\u00e9 pody, ktor\u00e9 zvy\u010dajne nem\u00f4\u017eu by\u0165 vytla\u010den\u00e9.<strong> <\/strong>Vytla\u010denie sa uskuto\u010dn\u00ed len v pr\u00edpade, \u017ee pre vysokoprioritn\u00fd pod nebude miesto na nasadenie, potom bud\u00fa evakuovan\u00e9 niektor\u00e9 pody z ur\u010den\u00e9ho uzla. Ak je tento mechanizmus pre v\u00e1s pr\u00edli\u0161 pr\u00edsny, m\u00f4\u017eete prida\u0165 mo\u017enos\u0165 <code>preemptionPolicy: Never<\/code>, a potom nebude vytla\u010denie, pod sa postav\u00ed na prv\u00e9 miesto v porad\u00ed a po\u010dk\u00e1, k\u00fdm pl\u00e1nova\u010d n\u00e1jde pre neho vo\u013en\u00e9 zdroje.<\/p>\n<p>\u010ealej vytv\u00e1rame pod, v ktorom uv\u00e1dzame meno <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>M\u00f4\u017eete vytv\u00e1ra\u0165 neobmedzen\u00fd po\u010det prioritn\u00fdch tried, aj ke\u010f sa odpor\u00fa\u010da nepreh\u00e1\u0148a\u0165 to (povedzme, obmedzi\u0165 sa na n\u00edzku, stredn\u00fa a vysok\u00fa prioritu). <\/p>\n<p>Takto budete m\u00f4c\u0165 v pr\u00edpade potreby zv\u00fd\u0161i\u0165 efektivitu nasadzovania kritick\u00fdch slu\u017eieb, ako s\u00fa nginx-ingress-controller, coredns a podobne.<\/p>\n<h2>9. Optimalizujte ETCD klaster.<\/h2>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f5917adfa943c789b6c784f43305851b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>ETCD m\u00f4\u017eeme nazva\u0165 mozgom cel\u00e9ho klastera. Je ve\u013emi d\u00f4le\u017eit\u00e9 udr\u017eiava\u0165 pr\u00e1cu tejto datab\u00e1zy na vysokej \u00farovni, preto\u017ee od nej z\u00e1vis\u00ed r\u00fdchlos\u0165 oper\u00e1ci\u00ed v \u201eKube\u201c. Dos\u0165 \u0161tandardn\u00fdm, a z\u00e1rove\u0148 slu\u0161n\u00fdm rie\u0161en\u00edm bude dr\u017ea\u0165 klaster ETCD na master-n\u00f3dach, aby ste mali minim\u00e1lnu latenciu vo\u010di kube-apiserveru. Ak to nie je mo\u017en\u00e9, umiestnite ETCD \u010do najbli\u017e\u0161ie, pri\u010dom majte dobr\u00fa priepustnos\u0165 medzi \u00fa\u010dastn\u00edkmi. Taktie\u017e sa s\u00fastre\u010fte na to, ko\u013eko n\u00f3d z ETCD m\u00f4\u017ee vypadn\u00fa\u0165 bez po\u0161kodenia klastera.<\/p>\n<p><img decoding=\"async\" alt=\"Deviat tipov na zv\u00fd\u0161enie v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/cdd2c32eefed253c6ff774899c367ccc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Majte na pam\u00e4ti, \u017ee nadmern\u00e9 zvy\u0161ovanie po\u010dtu \u00fa\u010dastn\u00edkov v klasteri m\u00f4\u017ee zv\u00fd\u0161i\u0165 odolnos\u0165 vo\u010di v\u00fdpadkom na \u00fakor v\u00fdkonu, v\u0161etko by malo by\u0165 v rozumn\u00fdch medziach.<\/p>\n<p>Pokia\u013e ide o nastavenie slu\u017eby, odpor\u00fa\u010dan\u00ed je m\u00e1lo:<\/p>\n<ol>\n<li>\n<p>Ma\u0165 dobr\u00fd hardware, vych\u00e1dzaj\u00fac z ve\u013ekosti klastera (m\u00f4\u017eete si pre\u010d\u00edta\u0165 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/hardware.md\">tu<\/a><\/noindex>).<\/p>\n<\/li>\n<li>\n<p>Upravi\u0165 nieko\u013eko parametrov, ak ste rozlo\u017eili klaster medzi p\u00e1r d\u00e1tov\u00fdmi centrami alebo va\u0161a sie\u0165 a disky nespl\u0148uj\u00fa o\u010dak\u00e1vania (m\u00f4\u017eete si pre\u010d\u00edta\u0165 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/tuning.md\">tu<\/a><\/noindex>).<\/p>\n<\/li>\n<\/ol>\n<h2>Z\u00e1ver<\/h2>\n<p>V tomto \u010dl\u00e1nku s\u00fa pop\u00edsan\u00e9 body, ktor\u00e9 sa n\u00e1\u0161 t\u00edm sna\u017e\u00ed dodr\u017eiava\u0165. Toto nie je podrobn\u00fd n\u00e1vod krok za krokom, ale mo\u017enosti, ktor\u00e9 m\u00f4\u017eu by\u0165 u\u017eito\u010dn\u00e9 na optimaliz\u00e1ciu prev\u00e1dzkov\u00fdch n\u00e1kladov na klaster. Je jasn\u00e9, \u017ee ka\u017ed\u00fd klaster je svoj\u00edm sp\u00f4sobom jedine\u010dn\u00fd, a rie\u0161enia t\u00fdkaj\u00face sa nastavenia sa m\u00f4\u017eu v\u00fdrazne l\u00ed\u0161i\u0165, preto by bolo zauj\u00edmav\u00e9 z\u00edska\u0165 od v\u00e1s sp\u00e4tn\u00fa v\u00e4zbu: ako sledujete svoj klaster Kubernetes, \u010d\u00edm zlep\u0161ujete jeho v\u00fdkon. Zdie\u013eajte svoje sk\u00fasenosti v koment\u00e1roch, bude zauj\u00edmav\u00e9 ich spozna\u0165. <\/p>\n<p>Zdroj: <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.3 - 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\/sk\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Dev\u00e4\u0165 tipov na zlep\u0161enie v\u00fdkonu Kubernetes | ProHoster","description":"Ahojte v\u0161etci!","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/97982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=97982"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/97982\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/97983"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=97982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=97982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=97982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}