{"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\/cs\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","title":{"rendered":"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/92dc510aa9d785a31d310816b18bf854.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ahoj v\u0161ichni! Jmenuji se Oleg Sidorenkov a pracuji ve spole\u010dnosti DomClick jako vedouc\u00ed t\u00fdmu infrastruktury. U\u017e v\u00edce ne\u017e t\u0159i roky provozujeme \"Kub\u00edk\" v produkci a b\u011bhem t\u00e9to doby jsme za\u017eili spoustu zaj\u00edmav\u00fdch moment\u016f. Dnes v\u00e1m pov\u00edm, jak p\u0159i spr\u00e1vn\u00e9m p\u0159\u00edstupu m\u016f\u017eete z \"vanilkov\u00e9ho\" Kubernetes vy\u017ed\u00edmat je\u0161t\u011b v\u00edce v\u00fdkonu pro v\u00e1\u0161 cluster. Jdeme na to! <\/p>\n<p>Jak dob\u0159e v\u00edte, Kubernetes je \u0161k\u00e1lovateln\u00fd syst\u00e9m s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem pro orchestraci kontejner\u016f; tedy, nebo p\u011bt bin\u00e1rek, kter\u00e9 kouzl\u00ed, spravuj\u00ed \u017eivotn\u00ed cyklus va\u0161ich mikroservis v serverov\u00e9m prost\u0159ed\u00ed. Krom\u011b toho je to docela flexibiln\u00ed n\u00e1stroj, kter\u00fd m\u016f\u017eete sestavit jako stavebnici Lego pro maxim\u00e1ln\u00ed p\u0159izp\u016fsoben\u00ed r\u016fzn\u00fdm \u00faloh\u00e1m.<\/p>\n<p>A v\u0161echno vypad\u00e1 skv\u011ble: p\u0159id\u00e1vejte servery do clusteru, jako byste p\u0159ihazovali d\u0159\u00edv\u00ed do ohn\u011b, a \u017e\u00e1dn\u00e9 starosti. Ale pokud v\u00e1m z\u00e1le\u017e\u00ed na ekologii, zamysl\u00edte se: \"Jak mohu udr\u017eet ohe\u0148 v peci a ne\u0161kodit lesu?\" Jin\u00fdmi slovy, jak naj\u00edt zp\u016fsoby, jak zlep\u0161it infrastrukturu a sn\u00ed\u017eit n\u00e1klady.<\/p>\n<h2>1. Sledujte zdroje t\u00fdm\u016f a aplikac\u00ed<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/91e2e60b47ee985b024532c8b685230c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jedna z nejban\u00e1ln\u011bj\u0161\u00edch, ale \u00fa\u010dinn\u00fdch metod je zaveden\u00ed requests\/limits. Rozd\u011blte aplikace podle namespace a namespace podle v\u00fdvojov\u00fdch t\u00fdm\u016f. Nastavte aplikac\u00edm p\u0159ed nasazen\u00edm hodnoty pro spot\u0159ebu procesorov\u00e9ho \u010dasu, pam\u011bti a efem\u00e9rn\u00edho \u00falo\u017ei\u0161t\u011b.<\/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>Zku\u0161enost\u00ed jsme dosp\u011bli k z\u00e1v\u011bru, \u017ee nen\u00ed dobr\u00e9 zvy\u0161ovat po\u017eadavky nad limity v\u00edce ne\u017e dvakr\u00e1t. Objem clusteru se po\u010d\u00edt\u00e1 na z\u00e1klad\u011b po\u017eadavk\u016f, a pokud nastav\u00edte aplikac\u00edm rozd\u00edl ve zdroj\u00edch, nap\u0159\u00edklad 5-10kr\u00e1t, p\u0159edstavte si, co se stane s va\u0161\u00ed uzlovou, kdy\u017e se zapln\u00ed pod\u016fm a n\u00e1hle dostane z\u00e1t\u011b\u017e. Nic dobr\u00e9ho. Minim\u00e1ln\u011b dojde k throttlingu, maxim\u00e1ln\u011b se rozlou\u010d\u00edte s pracovn\u00edkem a dostanete cyklickou z\u00e1t\u011b\u017e na ostatn\u00ed uzly pot\u00e9, co za\u010dnou podi migrovat.<\/p>\n<p>Krom\u011b toho, s pomoc\u00ed <code>limitranges<\/code> m\u016f\u017eete p\u0159i spu\u0161t\u011bn\u00ed nastavit pro kontejner hodnoty pro zdroje \u2014 minim\u00e1ln\u00ed, maxim\u00e1ln\u00ed a v\u00fdchoz\u00ed:<\/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>Nezapome\u0148te omezit zdroje namespace, aby jeden t\u00fdm nez\u00edskal v\u0161echny zdroje klastru:<\/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>Jak je vid\u011bt z popisu <code>resourcequotas<\/code>, pokud se t\u00fdm ops pokus\u00ed nasadit pody, kter\u00e9 by spot\u0159ebovaly dal\u0161\u00edch 10 cpu, pl\u00e1nova\u010d to nedovol\u00ed a vyd\u00e1 chybu:<\/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>Pro \u0159e\u0161en\u00ed takov\u00e9ho \u00fakolu je mo\u017en\u00e9 napsat n\u00e1stroj, nap\u0159\u00edklad jako <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pauljamm\/team-operator\">tento<\/a><\/noindex>, kter\u00fd um\u00ed ukl\u00e1dat a commitovat stav zdroj\u016f t\u00fdm\u016f.<\/p>\n<h2>2. Vyb\u00edrejte optim\u00e1ln\u00ed \u00falo\u017ei\u0161t\u011b dat<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c7f8bdbf5490acc9061695a6d608015e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Zde bych cht\u011bl probrat t\u00e9ma persistentn\u00edch svazk\u016f a diskov\u00e9 subsyst\u00e9my worker-nod Kubernetes. Douf\u00e1m, \u017ee nikdo nepou\u017e\u00edv\u00e1 \"Kub\" na HDD v produkci, ale n\u011bkdy u\u017e i b\u011b\u017en\u00e9 SSD nesta\u010d\u00ed. Narazili jsme na probl\u00e9m, kdy logy zaplavily disk operacemi vstupu a v\u00fdstupu, a zde nen\u00ed mnoho mo\u017enost\u00ed \u0159e\u0161en\u00ed: <\/p>\n<ul>\n<li>\n<p>Pou\u017e\u00edt vysoce v\u00fdkonn\u00e9 SSD nebo p\u0159ej\u00edt na NVMe (pokud sami spravujete sv\u016fj hardware).<\/p>\n<\/li>\n<li>\n<p>Sni\u017ete \u00farove\u0148 \u017eurn\u00e1lov\u00e1n\u00ed.<\/p>\n<\/li>\n<li>\n<p>Prov\u00e1d\u011bjte \"inteligentn\u00ed\" vyva\u017eov\u00e1n\u00ed pod\u016f, kter\u00e9 zat\u011b\u017euj\u00ed disk (<code>podAntiAffinity<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>Sn\u00edmek v\u00fd\u0161e ukazuje, co se d\u011bje pod nginx-ingress-controller na disku, kdy\u017e je zapnuto \u017eurn\u00e1lov\u00e1n\u00ed access_logs (~12 tis\u00edc \u017eurn\u00e1l\u016f\/s.). Tento stav m\u016f\u017ee samoz\u0159ejm\u011b v\u00e9st k degradaci v\u0161ech aplikac\u00ed na t\u00e9to nod\u011b.<\/p>\n<p>Co se t\u00fd\u010de PV, bohu\u017eel jsem nevyzkou\u0161el v\u0161echny <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/#types-of-persistent-volumes\">typy<\/a><\/noindex> P\u0159etrv\u00e1vaj\u00edc\u00ed svazky. Pou\u017eijte nejlep\u0161\u00ed variantu, kter\u00e1 v\u00e1m nejl\u00e9pe vyhovuje. Historicky m\u00e1me \u010d\u00e1st slu\u017eeb, kter\u00e9 pot\u0159ebuj\u00ed RWX svazky, a k tomu jsme d\u00e1vno za\u010dali pou\u017e\u00edvat NFS \u00falo\u017ei\u0161t\u011b. Je to levn\u00e9 a\u2026 sta\u010d\u00ed to. Samoz\u0159ejm\u011b, \u017ee jsme m\u011bli s t\u00edmhle svazkem sv\u00e9 probl\u00e9my \u2013 bu\u010fte opatrn\u00ed, ale nau\u010dili jsme se ho ladit, tak\u017ee u\u017e n\u00e1s to netr\u00e1p\u00ed. A pokud je to mo\u017en\u00e9, p\u0159ejd\u011bte na objektov\u00e9 \u00falo\u017ei\u0161t\u011b S3.<\/p>\n<h2>3. Sb\u00edrejte optimalizovan\u00e9 obrazy<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c25ce405d1eb4c01f031e18b0bfa4836.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nejl\u00e9pe je pou\u017e\u00edvat obrazy optimalizovan\u00e9 pro kontejnery, aby je Kubernetes mohl rychleji na\u010d\u00edtat a efektivn\u011bji prov\u00e1d\u011bt.&nbsp;<\/p>\n<p>Optimalizace znamen\u00e1, \u017ee obrazy:<\/p>\n<ul>\n<li>\n<p>obsahuj\u00ed pouze jednu aplikaci nebo vykon\u00e1vaj\u00ed pouze jednu funkci;<\/p>\n<\/li>\n<li>\n<p>jsou mal\u00e9 velikosti, proto\u017ee velk\u00e9 obrazy se obt\u00ed\u017en\u011bji p\u0159en\u00e1\u0161ej\u00ed v s\u00edti;<\/p>\n<\/li>\n<li>\n<p>maj\u00ed koncov\u00e9 body pro kontrolu provozuschopnosti a p\u0159ipravenosti, pomoc\u00ed kter\u00fdch m\u016f\u017ee Kubernetes podniknout n\u011bjak\u00e9 kroky v p\u0159\u00edpad\u011b v\u00fdpadk\u016f;<\/p>\n<\/li>\n<li>\n<p>pou\u017e\u00edvaj\u00ed opera\u010dn\u00ed syst\u00e9my p\u0159\u00edzniv\u00e9 pro kontejnery (jako Alpine nebo CoreOS), kter\u00e9 jsou odoln\u011bj\u0161\u00ed v\u016f\u010di chyb\u00e1m konfigurace;<\/p>\n<\/li>\n<li>\n<p>pou\u017e\u00edvaj\u00ed v\u00edcestup\u0148ov\u00e9 sestaven\u00ed, abyste mohli nasazovat pouze zkompilovan\u00e9 aplikace, nikoli souvisej\u00edc\u00ed zdrojov\u00e9 k\u00f3dy.<\/p>\n<\/li>\n<\/ul>\n<p>Existuje mnoho n\u00e1stroj\u016f a slu\u017eeb, kter\u00e9 umo\u017e\u0148uj\u00ed kontrolovat a optimalizovat obrazy za b\u011bhu. Je d\u016fle\u017eit\u00e9 je v\u017edy udr\u017eovat aktu\u00e1ln\u00ed a zabezpe\u010den\u00e9. Nakonec z\u00edsk\u00e1te: <\/p>\n<ol>\n<li>\n<p>Sn\u00ed\u017een\u00ed s\u00ed\u0165ov\u00e9 z\u00e1t\u011b\u017ee na cel\u00fd klastr.<\/p>\n<\/li>\n<li>\n<p>Zkr\u00e1cen\u00ed \u010dasu spu\u0161t\u011bn\u00ed kontejneru.<\/p>\n<\/li>\n<li>\n<p>Men\u0161\u00ed objem va\u0161eho Docker registru.<\/p>\n<\/li>\n<\/ol>\n<h2>4. Pou\u017e\u00edvejte DNS cache<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/9f4384462a77dc528d7911c56f684f2d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Pokud mluv\u00edme o vysok\u00fdch z\u00e1t\u011b\u017e\u00edch, bez lad\u011bn\u00ed DNS syst\u00e9mu klastru se \u017eije docela \u0161patn\u011b. D\u00e1vno tomu, kdy v\u00fdvoj\u00e1\u0159i Kubernetes podporovali sv\u00e9 \u0159e\u0161en\u00ed kube-dns. To jsme implementovali i my, ale tento software se moc neladil a ned\u00e1val po\u017eadovan\u00fd v\u00fdkon, p\u0159esto\u017ee se to zd\u00e1lo jako jednoduch\u00fd \u00fakol. Potom se objevil coredns, na kter\u00fd jsme p\u0159e\u0161li a u\u017e jsme se nemuseli tr\u00e1pit, pozd\u011bji se stal v\u00fdchoz\u00edm DNS slu\u017ebou v K8s. V ur\u010dit\u00e9m okam\u017eiku jsme dos\u00e1hli 40 tis\u00edc rps k DNS syst\u00e9mu, a tohle \u0159e\u0161en\u00ed tak\u00e9 p\u0159estalo sta\u010dit. Na\u0161t\u011bst\u00ed vy\u0161el Nodelocaldns, tak\u00e9 zn\u00e1m\u00fd jako node local cache, tak\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/nodelocaldns\/\">NodeLocal DNSCache<\/a><\/noindex>.<\/p>\n<p>Pro\u010d to pou\u017e\u00edv\u00e1me? V j\u00e1d\u0159e Linuxu je chyba, kter\u00e1 p\u0159i opakovan\u00fdch vol\u00e1n\u00edch p\u0159es conntrack NAT pomoc\u00ed UDP zp\u016fsobuje z\u00e1vod o z\u00e1pis do conntrack tabulek, a \u010d\u00e1st&nbsp;trafiku p\u0159es NAT se ztr\u00e1c\u00ed (ka\u017ed\u00e1 interakce p\u0159es slu\u017ebu znamen\u00e1 NAT). Nodelocaldns tuto probl\u00e9m \u0159e\u0161\u00ed t\u00edm, \u017ee eliminuje NAT a upgradov\u00e1v\u00e1 p\u0159ipojen\u00ed na TCP k upstream DNS, a tak\u00e9 lok\u00e1ln\u011b ukl\u00e1d\u00e1 DNS dotazy na upstreamy (v\u010detn\u011b kr\u00e1tk\u00e9ho 5sekundov\u00e9ho negativn\u00edho cache).<\/p>\n<h2>5. Automaticky \u0161k\u00e1lujte pody horizont\u00e1ln\u011b a vertik\u00e1ln\u011b<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3804a14685a55160fa7d9f3226eab1fa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>M\u016f\u017eete si b\u00fdt jisti, \u017ee v\u0161echny va\u0161e mikroservisy jsou p\u0159ipraveny na r\u016fst z\u00e1t\u011b\u017ee dvakr\u00e1t a\u017e t\u0159ikr\u00e1t? Jak spr\u00e1vn\u011b p\u0159id\u011blovat zdroje sv\u00fdm aplikac\u00edm? M\u00edt na\u017eivu p\u00e1r pod\u016f nad pracovn\u00ed z\u00e1t\u011b\u017e m\u016f\u017ee b\u00fdt nadbyte\u010dn\u00e9, zat\u00edmco m\u00edt je na hranici \u2014 riskujete v\u00fdpadek kv\u016fli n\u00e1hl\u00e9mu n\u00e1r\u016fstu provozu na slu\u017ebu. Zlatou st\u0159edn\u00ed cestu pom\u00e1haj\u00ed naj\u00edt slu\u017eby jako <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\u0161ovat requests\/limits va\u0161ich kontejner\u016f v podu na z\u00e1klad\u011b skute\u010dn\u00e9 spot\u0159eby. Jak m\u016f\u017ee b\u00fdt u\u017eite\u010dn\u00fd? Pokud m\u00e1te pody, kter\u00e9 nen\u00ed mo\u017en\u00e9 z n\u011bjak\u00e9ho d\u016fvodu horizont\u00e1ln\u011b \u0161k\u00e1lovat (co\u017e nen\u00ed zcela spolehliv\u00e9), m\u016f\u017eete zkusit sv\u011b\u0159it zm\u011bnu jeho zdroj\u016f VPA. Jeho kouzlo spo\u010d\u00edv\u00e1 v syst\u00e9mu doporu\u010den\u00ed na z\u00e1klad\u011b historick\u00fdch a aktu\u00e1ln\u00edch dat z metric-server, tak\u017ee pokud nechcete automaticky m\u011bnit requests\/limits, m\u016f\u017eete jen sledovat doporu\u010den\u00e9 zdroje pro va\u0161e kontejnery a optimalizovat nastaven\u00ed pro \u00fasporu CPU a pam\u011bti v klastru. <\/p>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3965950aa3315faa4bb3e3ff5bd61955.png\" style=\"display:block;margin: 0 auto;\" \/>Obr\u00e1zek je p\u0159evzat 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 v\u017edy vych\u00e1z\u00ed z requests. Jakoukoli hodnotu tam zad\u00e1te, pl\u00e1nova\u010d bude hledat vhodn\u00fd uzel na jej\u00edm z\u00e1klad\u011b. Hodnoty limits jsou pot\u0159ebn\u00e9 kubeletovi, aby ch\u00e1pal, kdy omezit nebo zab\u00edt pod. A proto\u017ee jedin\u00fdm d\u016fle\u017eit\u00fdm parametrem je hodnota requests, VPA s t\u00edm pracuje. Ka\u017ed\u00fd \u010das, kdy\u017e ur\u010dujete vertik\u00e1ln\u00ed \u0161k\u00e1lov\u00e1n\u00ed aplikace, definujete, jak\u00e9 by m\u011bly b\u00fdt requests. A co pak bude s limits? Tento parametr bude tak\u00e9 proporcion\u00e1ln\u011b upraven.<\/p>\n<p>Nap\u0159\u00edklad, zde jsou b\u011b\u017en\u00e1 nastaven\u00ed podu:<\/p>\n<pre><code>zdroje:\n   po\u017eadavky:\n     pam\u011b\u0165: 250Mi\n     cpu: 200m\n   limity:\n     pam\u011b\u0165: 500Mi\n     cpu: 350m<\/code><\/pre>\n<p>Syst\u00e9m doporu\u010den\u00ed ur\u010duje, \u017ee va\u0161e aplikace pot\u0159ebuje k norm\u00e1ln\u00edmu fungov\u00e1n\u00ed 300m CPU a 500Mi. Obdr\u017e\u00edte takto nastaven\u00e9 hodnoty:<\/p>\n<pre><code>zdroje:\n   po\u017eadavky:\n     pam\u011b\u0165: 500Mi\n     cpu: 300m\n   limity:\n     pam\u011b\u0165: 1000Mi\n     cpu: 525m<\/code><\/pre>\n<p>Jak bylo zm\u00edn\u011bno v\u00fd\u0161e, jedn\u00e1 se o proporci\u00e1ln\u00ed \u0161k\u00e1lov\u00e1n\u00ed podle pom\u011bru requests\/limits v manifestu:<\/p>\n<ul>\n<li>\n<p>CPU: 200m \u2192 300m: pom\u011br 1:1.75;<\/p>\n<\/li>\n<li>\n<p>Pam\u011b\u0165: 250Mi \u2192 500Mi: pom\u011br 1:2.<\/p>\n<\/li>\n<\/ul>\n<p>Co se t\u00fd\u010de <strong>HPA<\/strong>, zde je mechanismus pr\u00e1ce transparentn\u011bj\u0161\u00ed. Stanovuj\u00ed se prahov\u00e9 hodnoty metrik, nap\u0159\u00edklad CPU a pam\u011bti, a pokud pr\u016fm\u011brn\u00e1 hodnota v\u0161ech replik p\u0159es\u00e1hne prahovou hodnotu, aplikace se \u0161k\u00e1luje o +1 pod, dokud hodnota neklesne pod prahovou hodnotu nebo dokud nen\u00ed dosa\u017eeno maxim\u00e1ln\u00edho po\u010dtu replik.<\/p>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f7a3fa28177d66be925867e38f5bbed6.png\" style=\"display:block;margin: 0 auto;\" \/>Obr\u00e1zek je p\u0159evzat z https:\/\/levelup.gitconnected.com\/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231<\/p>\n<p>Krom\u011b b\u011b\u017en\u00fdch metrik, jako je CPU a pam\u011b\u0165, m\u016f\u017eete nastavit prahy pro sv\u00e9 vlastn\u00ed metriky z Prometheus a pracovat s nimi, pokud pova\u017eujete to za nejp\u0159esn\u011bj\u0161\u00ed ur\u010den\u00ed, kdy byste m\u011bli \u0161k\u00e1lovat svou aplikaci. Jakmile se aplikace stabilizuje pod stanovenou hranic\u00ed metriky, HPA za\u010dne sni\u017eovat pods a\u017e na minim\u00e1ln\u00ed po\u010det replik nebo do stavu, kdy zat\u00ed\u017een\u00ed spl\u0148uje stanoven\u00fd pr\u00e1h.<\/p>\n<h2>6. Nezapom\u00ednejte na Node Affinity a Pod Affinity<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/e718191d9e8ff25fd3b2d65cba9b3b73.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ne v\u0161echny uzly b\u011b\u017e\u00ed na stejn\u00e9m hardwaru, ne v\u0161echny pody pot\u0159ebuj\u00ed prov\u00e1d\u011bt aplikace, kter\u00e9 vy\u017eaduj\u00ed intenzivn\u00ed v\u00fdpo\u010dty. Kubernetes umo\u017e\u0148uje definovat specializaci uzl\u016f a pod\u016f pomoc\u00ed <strong>Node Affinity<\/strong> a <strong>Pod Affinity<\/strong>.<\/p>\n<p>Pokud m\u00e1te uzly vhodn\u00e9 pro operace s intenzivn\u00edmi v\u00fdpo\u010dty, je pro maxim\u00e1ln\u00ed efektivitu lep\u0161\u00ed p\u0159i\u0159adit aplikace k odpov\u00eddaj\u00edc\u00edm uzl\u016fm. K tomu pou\u017eijte <code>nodeSelector<\/code> s ozna\u010den\u00edm uzlu.<\/p>\n<p>P\u0159edstavte si, \u017ee m\u00e1te dva uzly: jeden s <code>CPUType=HIGHFREQ<\/code> a velk\u00fdm po\u010dtem rychl\u00fdch jader, druh\u00fd s <code>MemoryType=HIGHMEMORY<\/code> velk\u00fdm mno\u017estv\u00edm pam\u011bti a vy\u0161\u0161\u00ed propustnost\u00ed. Nejjednodu\u0161\u0161\u00ed je p\u0159i\u0159adit nasazen\u00ed podu uzlu <code>HIGHFREQ<\/code>, p\u0159id\u00e1n\u00edm do sekce <code>spec<\/code> takov\u00e9ho v\u00fdb\u011bru:<\/p>\n<pre><code>\u2026\nnodeSelector:\n\tCPUType: HIGHFREQ<\/code><\/pre>\n<p>N\u00e1kladn\u011bj\u0161\u00ed a specifick\u00fd zp\u016fsob, jak to prov\u00e9st, je pou\u017e\u00edt <code>nodeAffinity<\/code> v poli <code>affinity<\/code> sekci <code>spec<\/code>. Existuj\u00ed dv\u011b mo\u017enosti:<\/p>\n<ul>\n<li>\n<p><code>requiredDuringSchedulingIgnoredDuringExecution<\/code>: pevn\u00e9 nastaven\u00ed (pl\u00e1nova\u010d nasad\u00ed pody pouze na konkr\u00e9tn\u00edch uzlech (a nikde jinde));<\/p>\n<\/li>\n<li>\n<p><code>preferredDuringSchedulingIgnoredDuringExecution<\/code>: jemn\u00e1 konfigurace (pl\u00e1nova\u010d se pokus\u00ed nasadit na konkr\u00e9tn\u00edch uzlech, a pokud to nebude mo\u017en\u00e9, pokus\u00ed se nasadit na dal\u0161\u00edm dostupn\u00e9m uzlu).<\/p>\n<\/li>\n<\/ul>\n<p>M\u016f\u017eete nastavit ur\u010dit\u00fd syntax pro spr\u00e1vu \u0161t\u00edtk\u016f uzl\u016f, nap\u0159\u00edklad, <code>In<\/code>, <code>NotIn<\/code>, <code>Exists<\/code>, <code>DoesNotExist<\/code>, <code>Gt<\/code> nebo <code>Lt<\/code>. M\u011bjte v\u0161ak na pam\u011bti, \u017ee slo\u017eit\u00e9 metody v dlouh\u00fdch seznamech \u0161t\u00edtk\u016f zpomal\u00ed rozhodov\u00e1n\u00ed v kritick\u00fdch situac\u00edch. Jin\u00fdmi slovy, nekomplikujte to.<\/p>\n<p>Jak bylo zm\u00edn\u011bno v\u00fd\u0161e, Kubernetes umo\u017e\u0148uje nastavit vazbu aktu\u00e1ln\u00edch pod\u016f. To znamen\u00e1, \u017ee m\u016f\u017eete zajistit, aby ur\u010dit\u00e9 pody pracovaly spolu s jin\u00fdmi pody ve stejn\u00e9 z\u00f3n\u011b dostupnosti (plat\u00ed pro cloudy) nebo uzlech.<\/p>\n<p>V <code>podAffinity<\/code> pole <code>affinity<\/code> sekci <code>spec<\/code> jsou dostupn\u00e1 stejn\u00e1 pole jako v p\u0159\u00edpad\u011b <code>nodeAffinity<\/code>: <code>requiredDuringSchedulingIgnoredDuringExecution<\/code><strong> <\/strong>a <code>preferredDuringSchedulingIgnoredDuringExecution<\/code>. Jedin\u00fd rozd\u00edl spo\u010d\u00edv\u00e1 v tom, \u017ee <code>matchExpressions<\/code> p\u0159ipoj\u00ed pody k uzlu, na kter\u00e9m ji\u017e b\u011b\u017e\u00ed pod s takov\u00fdm \u0161t\u00edtkem.<\/p>\n<p>Kubernetes tak\u00e9 nab\u00edz\u00ed pole <code>podAntiAffinity<\/code>, kter\u00e9 naopak nep\u0159ipojuje pod k uzlu s ur\u010dit\u00fdmi pody.<\/p>\n<p>Pokud jde o v\u00fdrazy, <code>nodeAffinity<\/code> m\u016f\u017eete d\u00e1t stejnou radu: sna\u017ete se udr\u017eet jednoduchost a logiku pravidel, nen\u00ed pot\u0159eba se pokou\u0161et p\u0159eplnit specifikaci pod\u016f slo\u017eit\u00fdm souborem pravidel. Je velmi snadn\u00e9 vytvo\u0159it pravidlo, kter\u00e9 nebude spl\u0148ovat podm\u00ednky clusteru, \u010d\u00edm\u017e zp\u016fsob\u00edte zbyte\u010dn\u00e9 zat\u00ed\u017een\u00ed pl\u00e1nova\u010de a sn\u00ed\u017e\u00edte celkov\u00fd v\u00fdkon.<\/p>\n<h2>7. Taints &amp; Tolerations<\/h2>\n<p>Existuje je\u0161t\u011b jeden zp\u016fsob, jak \u0159\u00eddit pl\u00e1nova\u010d. Pokud m\u00e1te velk\u00fd cluster se stovkami uzl\u016f a tis\u00edci mikroslu\u017eeb, je velmi obt\u00ed\u017en\u00e9 zabr\u00e1nit ur\u010dit\u00fdm pod\u016fm umis\u0165ovat se na ur\u010dit\u00e9 uzly.<\/p>\n<p>V tom pom\u00e1h\u00e1 mechanismus taints \u2014 zakazovac\u00edch pravidel. Nap\u0159\u00edklad v ur\u010dit\u00fdch sc\u00e9n\u00e1\u0159\u00edch m\u016f\u017eete zabr\u00e1nit n\u011bkter\u00fdm uzl\u016fm spou\u0161t\u011bt na sob\u011b pody. Pro pou\u017eit\u00ed taint na konkr\u00e9tn\u00edm uzlu je t\u0159eba pou\u017e\u00edt mo\u017enost <code>taint<\/code> v kubectl. Uve\u010fte kl\u00ed\u010d a hodnotu a pot\u00e9 taint jako <code>NoSchedule<\/code> nebo <code>NoExecute<\/code>:<\/p>\n<pre><code>$ kubectl taint nodes node10 node-role.kubernetes.io\/ingress=true:NoSchedule<\/code><\/pre>\n<p>Tak\u00e9 stoj\u00ed za zm\u00ednku, \u017ee mechanismus taint podporuje t\u0159i hlavn\u00ed 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 pokud v specifikaci podu nebude odpov\u00eddaj\u00edc\u00ed z\u00e1znam <code>tolerations<\/code>, nebude mo\u017en\u00e9 jej nasadit na uzlu (v tomto p\u0159\u00edkladu <code>node10<\/code>).<\/p>\n<\/li>\n<li>\n<p><code>PreferNoSchedule <\/code>\u2014 zjednodu\u0161en\u00e1 verze <code>NoSchedule<\/code>. V tomto p\u0159\u00edpad\u011b se pl\u00e1nova\u010d pokus\u00ed nerozd\u011blovat pody, kter\u00e9 nemaj\u00ed odpov\u00eddaj\u00edc\u00ed z\u00e1znam <code>tolerations<\/code> na uzlu, ale to nen\u00ed p\u0159\u00edsn\u00e9 omezen\u00ed. Pokud v clusteru nebudou k dispozici prost\u0159edky, za\u010dnou se pody nasazovat na tento uzel.<\/p>\n<\/li>\n<li>\n<p><code>NoExecute<\/code><strong> <\/strong>\u2014 tento efekt spust\u00ed okam\u017eitou evakuaci pod\u016f, kter\u00e9 nemaj\u00ed odpov\u00eddaj\u00edc\u00ed z\u00e1znam <code>tolerations<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>Zaj\u00edmav\u00e9 je, \u017ee takov\u00e9 chov\u00e1n\u00ed lze zru\u0161it pomoc\u00ed mechanismu toleranc\u00ed. To je u\u017eite\u010dn\u00e9, kdy\u017e existuje \u201ezak\u00e1zan\u00fd\u201c uzel a pot\u0159ebujete tam um\u00edstit pouze infrastrukturn\u00ed slu\u017eby. Jak to ud\u011blat? Povolit pouze ty pody, pro kter\u00e9 existuje odpov\u00eddaj\u00edc\u00ed tolerov\u00e1n\u00ed.<\/p>\n<p>Takhle bude vypadat specifikace 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 p\u0159i dal\u0161\u00edm redeployi pod skon\u010d\u00ed pr\u00e1v\u011b na tomto uzlu, to nen\u00ed mechanismus Node Affinity a <code>nodeSelector<\/code>. Ale kombinov\u00e1n\u00edm n\u011bkolika funkc\u00ed m\u016f\u017eete dos\u00e1hnout velmi flexibiln\u00edho nastaven\u00ed pl\u00e1nova\u010de.<\/p>\n<h2>8. Nastavte prioritu nasazov\u00e1n\u00ed pod\u016f<\/h2>\n<p>To, \u017ee jste nastavili vazbu pod\u016f k uzl\u016fm, neznamen\u00e1, \u017ee v\u0161echny pody by m\u011bly b\u00fdt zpracov\u00e1v\u00e1ny se stejnou prioritou. Nap\u0159\u00edklad m\u016f\u017eete cht\u00edt nasadit n\u011bkter\u00e9 pody d\u0159\u00edve ne\u017e ostatn\u00ed.<\/p>\n<p>Kubernetes nab\u00edz\u00ed r\u016fzn\u00e9 zp\u016fsoby nastaven\u00ed priorit pod\u016f (Pod Priority and Preemption). Nastaven\u00ed se skl\u00e1d\u00e1 z n\u011bkolika \u010d\u00e1st\u00ed: objektu <code>PriorityClass<\/code><strong> <\/strong>a popisu pole <code>priorityClassName<\/code><strong> <\/strong>ve specifikaci podu. Pod\u00edvejme se na p\u0159\u00edklad:<\/p>\n<pre><code>apiVersion: scheduling.k8s.io\/v1\nkind: PriorityClass\nmetadata:\n  name: high-priority\nvalue: 99999\nglobalDefault: false\ndescription: \"Tato priorita by m\u011bla b\u00fdt pou\u017e\u00edv\u00e1na pouze pro velmi d\u016fle\u017eit\u00e9 pody\"<\/code><\/pre>\n<p>Vytv\u00e1\u0159\u00edme <code>PriorityClass<\/code>, d\u00e1v\u00e1me mu n\u00e1zev, popis a hodnotu.<strong> <\/strong>\u010c\u00edm vy\u0161\u0161\u00ed <code>value<\/code>, t\u00edm vy\u0161\u0161\u00ed priorita. Hodnota m\u016f\u017ee b\u00fdt libovoln\u00e9 32-bitov\u00e9 cel\u00e9 \u010d\u00edslo, men\u0161\u00ed nebo rovno 1 000 000 000. Vy\u0161\u0161\u00ed hodnoty jsou rezervov\u00e1ny pro kriticky d\u016fle\u017eit\u00e9 syst\u00e9mov\u00e9 pody, kter\u00e9 obvykle nelze vyt\u011bsnit.<strong> <\/strong>Vyt\u011bsn\u011bn\u00ed se bude konat pouze pokud vysokopr\u00edjmov\u00e9mu podu nebude mo\u017en\u00e9 se rozvinout, pak \u010d\u00e1st pod\u016f z ur\u010dit\u00e9ho uzlu bude evakuov\u00e1na. Pokud je tento mechanismus pro v\u00e1s p\u0159\u00edli\u0161 p\u0159\u00edsn\u00fd, m\u016f\u017eete p\u0159idat volbu <code>preemptionPolicy: Never<\/code>, a pak nedojde k vyt\u011bsn\u011bn\u00ed, pod bude st\u00e1t prvn\u00ed v \u0159ad\u011b a \u010dekat, a\u017e pl\u00e1nova\u010d najde pro n\u011bj voln\u00e9 prost\u0159edky.<\/p>\n<p>D\u00e1le vytv\u00e1\u0159\u00edme pod, ve kter\u00e9m uv\u00e1d\u00edme n\u00e1zev <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\u016f\u017eete vytvo\u0159it libovoln\u00fd po\u010det prioritn\u00edch t\u0159\u00edd, i kdy\u017e se doporu\u010duje to p\u0159eh\u00e1n\u011bt (\u0159\u00edk\u00e1m, omezit se na n\u00edzkou, st\u0159edn\u00ed a vysokou prioritu). <\/p>\n<p>T\u00edmto zp\u016fsobem budete moci v p\u0159\u00edpad\u011b pot\u0159eby zv\u00fd\u0161it efektivitu nasazen\u00ed kritick\u00fdch slu\u017eeb, jako jsou nginx-ingress-controller, coredns atd.<\/p>\n<h2>9. Optimalizujte klastr ETCD<\/h2>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/f5917adfa943c789b6c784f43305851b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>ETCD m\u016f\u017ee b\u00fdt naz\u00fdv\u00e1n mozkem cel\u00e9ho klastru. Je velmi d\u016fle\u017eit\u00e9 udr\u017eovat tuto datab\u00e1zi na vysok\u00e9 \u00farovni, proto\u017ee pr\u00e1v\u011b na n\u00ed z\u00e1vis\u00ed rychlost operac\u00ed v \u201eKubu\u201c. Dostate\u010dn\u011b standardn\u00edm a z\u00e1rove\u0148 dobr\u00fdm \u0159e\u0161en\u00edm je udr\u017eovat klastr ETCD na hlavn\u00edch uzlech, abyste m\u011bli minim\u00e1ln\u00ed zpo\u017ed\u011bn\u00ed k kube-apiserver. Pokud to nen\u00ed mo\u017en\u00e9, um\u00edst\u011bte ETCD co nejbl\u00ed\u017ee, s dobrou \u0161\u00ed\u0159kou p\u00e1sma mezi \u00fa\u010dastn\u00edky. Tak\u00e9 v\u011bnujte pozornost tomu, kolik uzl\u016f ETCD m\u016f\u017ee vypadnout bez po\u0161kozen\u00ed klastru.<\/p>\n<p><img decoding=\"async\" alt=\"Dev\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/cdd2c32eefed253c6ff774899c367ccc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>M\u011bjte na pam\u011bti, \u017ee nadm\u011brn\u00e9 zvy\u0161ov\u00e1n\u00ed po\u010dtu \u00fa\u010dastn\u00edk\u016f v klastru m\u016f\u017ee zv\u00fd\u0161it odolnost v\u016f\u010di poruch\u00e1m na \u00fakor v\u00fdkonu, v\u0161echno mus\u00ed b\u00fdt v um\u00edrn\u011bnosti.<\/p>\n<p>Pokud jde o nastaven\u00ed slu\u017eby, doporu\u010den\u00ed je m\u00e1lo:<\/p>\n<ol>\n<li>\n<p>M\u00edt dobr\u00fd hardware na z\u00e1klad\u011b velikosti klastru (m\u016f\u017eete si p\u0159e\u010d\u00edst <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/hardware.md\">tady<\/a><\/noindex>).<\/p>\n<\/li>\n<li>\n<p>Upravit n\u011bkolik parametr\u016f, pokud jste rozprost\u0159eli klastr mezi n\u011bkolik datov\u00fdch center nebo va\u0161e s\u00ed\u0165 a disky zanech\u00e1vaj\u00ed hodn\u011b p\u0159\u00e1n\u00ed (m\u016f\u017eete si p\u0159e\u010d\u00edst <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/tuning.md\">tady<\/a><\/noindex>).<\/p>\n<\/li>\n<\/ol>\n<h2>Z\u00e1v\u011br<\/h2>\n<p>V tomto \u010dl\u00e1nku jsou pops\u00e1ny body, kter\u00fdch se na\u0161e t\u00fdm sna\u017e\u00ed dr\u017eet. Nen\u00ed to krok za krokem popis \u010dinnost\u00ed, ale mo\u017enosti, kter\u00e9 mohou b\u00fdt u\u017eite\u010dn\u00e9 pro optimalizaci n\u00e1klad\u016f na klastr. Je jasn\u00e9, \u017ee ka\u017ed\u00fd klastr je jedine\u010dn\u00fd a \u0159e\u0161en\u00ed pro nastaven\u00ed se mohou v\u00fdrazn\u011b li\u0161it, a proto by bylo zaj\u00edmav\u00e9 z\u00edskat od v\u00e1s zp\u011btnou vazbu: jak sledujete sv\u016fj klastr Kubernetes, \u010d\u00edm zlep\u0161ujete jeho v\u00fdkon. Pod\u011blte se o sv\u00e9 zku\u0161enosti v koment\u00e1\u0159\u00edch, bude zaj\u00edmav\u00e9 je poznat. <\/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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\u011bt tip\u016f pro zv\u00fd\u0161en\u00ed v\u00fdkonu Kubernetes | ProHoster","description":"Ahoj v\u0161ichni!","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/devyat-sovetov-po-povysheniyu-proizvoditelnosti-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/97982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=97982"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/97982\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/97983"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=97982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=97982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=97982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}