{"id":70954,"date":"2020-02-23T00:58:17","date_gmt":"2020-02-22T21:58:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ustrojstvo-helm-i-ego-podvodnye-kamni"},"modified":"2020-03-03T16:14:40","modified_gmt":"2020-03-03T13:14:40","slug":"ustrojstvo-helm-i-ego-podvodnye-kamni","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","title":{"rendered":"Zariadenie Helm a jeho \u00faskalia","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/b825bfb312b883f5f9c1535036f0c6e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.artstation.com\/artwork\/YaabJq\">Koncept n\u00e1kladn\u00edho hauleru Typhon, Anton Swanepoel<\/a><\/noindex><\/p>\n<p>Vol\u00e1m sa Dmitrij Sugrobov, som v\u00fdvoj\u00e1r vo \u201eLerua Merlen\u201c. V \u010dl\u00e1nku vysvetl\u00edm, pre\u010do je Helm potrebn\u00fd, ako u\u013eah\u010duje pr\u00e1cu s Kubernetes, \u010do sa zmenilo v tretej verzii a ako pomocou neho aktualizova\u0165 aplik\u00e1cie na produkcii bez prestojov.<\/p>\n<p>Toto je stru\u010dn\u00fd preh\u013ead na z\u00e1klade vyst\u00fapenia na konferencii <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> od <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\">Mail.ru Cloud Solutions<\/a><\/noindex> \u2014 ak nechcete \u010d\u00edta\u0165, pozrite si video.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"w1PhTe9gnOI\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/w1PhTe9gnOI\/hqdefault.jpg\" alt=\"Prehrajte video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2>Pre\u010do pou\u017e\u00edvame Kubernetes na produkcii<\/h2>\n<p>\n\u201eLerua Merlen\u201c je l\u00eddrom na trhu DIY maloobchodu v Rusku a Eur\u00f3pe. Na\u0161a spolo\u010dnos\u0165 m\u00e1 viac ako sto v\u00fdvoj\u00e1rov, 33 000 zamestnancov a nespo\u010detn\u00e9 mno\u017estvo \u013eud\u00ed, ktor\u00ed nav\u0161tevuj\u00fa hypermarkety a web. Aby sme ich v\u0161etk\u00fdch urobili \u0161\u0165astn\u00fdmi, rozhodli sme sa dodr\u017eiava\u0165 \u0161tandardn\u00e9 pr\u00edstupy v priemysle. Vyv\u00edja\u0165 nov\u00e9 aplik\u00e1cie s vyu\u017eit\u00edm mikroslu\u017ebovej architekt\u00fary; na izol\u00e1ciu prostred\u00ed a spr\u00e1vnu distrib\u00faciu pou\u017e\u00edva\u0165 kontajnery; a na orchestr\u00e1ciu pou\u017e\u00edva\u0165 Kubernetes. Cena pou\u017e\u00edvania orchestr\u00e1torov r\u00fdchlo kles\u00e1: na trhu rastie po\u010det in\u017einierov, ktor\u00ed ovl\u00e1daj\u00fa technol\u00f3giu, objavuj\u00fa sa poskytovatelia pon\u00fakaj\u00faci Kubernetes ako slu\u017ebu.<\/p>\n<p>V\u0161etko, \u010do rob\u00ed Kubernetes, sa d\u00e1 samozrejme urobi\u0165 aj in\u00fdmi sp\u00f4sobmi, napr\u00edklad natiahnut\u00edm skripty cez nejak\u00fd Jenkins a docker-compose, ale pre\u010do si komplikova\u0165 \u017eivot, ke\u010f m\u00e1me hotov\u00e9 a spo\u013eahliv\u00e9 rie\u0161enie? Preto sme pre\u0161li na Kubernetes a u\u017e rok ho pou\u017e\u00edvame na produkcii. Teraz m\u00e1me dvadsa\u0165 \u0161tyri klastrov Kubernetes, najstar\u0161\u00ed z nich je star\u0161\u00ed ako rok, obsahuje okolo dvesto podov.<\/p>\n<h2>Kliatba ve\u013ek\u00e9ho mno\u017estva YAML s\u00faborov v Kubernetes<\/h2>\n<p>\nNa spustenie mikroslu\u017eby v Kubernetes vytvor\u00edme aspo\u0148 p\u00e4\u0165 YAML s\u00faborov: pre Deployment, Service, Ingress, ConfigMap, Secrets \u2014 a po\u0161leme ich do klastru. Pre \u010fal\u0161iu aplik\u00e1ciu nap\u00ed\u0161eme rovnak\u00fd bal\u00edk yaml, s tre\u0165ou \u2014 \u010fal\u0161\u00ed a tak \u010falej. N\u00e1sob\u00edme po\u010det dokumentov po\u010dtom prostred\u00ed, u\u017e dost\u00e1vame stovky s\u00faborov, a to e\u0161te nezoh\u013ead\u0148ujeme dynamick\u00e9 prostredia.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/c46c3f5ae49cbefa4851cbb388bfd051.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAdam Reese, hlavn\u00fd spr\u00e1vca Helm, zaviedol pojem \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/cZ1S2Gp47ng?t=323\">Cyklus v\u00fdvoja v Kubernetes<\/a><\/noindex>\u201c, ktor\u00fd vyzer\u00e1 takto:<\/p>\n<ol>\n<li>Kop\u00edrova\u0165 YAML \u2014 skop\u00edrova\u0165 YAML s\u00fabor.<\/li>\n<li>Vlo\u017ei\u0165 YAML \u2014 vlo\u017ei\u0165 ho.<\/li>\n<li>Opravi\u0165 odsadenia \u2014 opravi\u0165 odsadenia.<\/li>\n<li>Opakova\u0165 \u2014 zopakova\u0165 znova.<\/li>\n<\/ol>\n<p>\nVarianta je funk\u010dn\u00e1, ale mus\u00edme ve\u013eakr\u00e1t kop\u00edrova\u0165 YAML s\u00fabory. Aby sme tento cyklus zmenili, vymysleli sme Helm.<\/p>\n<h3>\u010co je Helm<\/h3>\n<p>\nPo prv\u00e9, Helm je<strong> spr\u00e1vca bal\u00edkov<\/strong>, ktor\u00fd pom\u00e1ha n\u00e1js\u0165 a in\u0161talova\u0165 potrebn\u00e9 programy. Na in\u0161tal\u00e1ciu, napr\u00edklad MongoDB, netreba nav\u0161tevova\u0165 ofici\u00e1lnu str\u00e1nku a s\u0165ahova\u0165 bin\u00e1rne s\u00fabory, sta\u010d\u00ed vykona\u0165 pr\u00edkaz <code>helm install stable\/mongodb<\/code>.<\/p>\n<p>Po druh\u00e9, Helm \u2014 <strong>\u0161abl\u00f3nov\u00fd syst\u00e9m<\/strong>, pom\u00e1ha parametrizova\u0165 s\u00fabory. Vr\u00e1\u0165me sa k situ\u00e1cii so s\u00fabormi YAML v Kubernetes. Je jednoduch\u0161ie nap\u00edsa\u0165 ten ist\u00fd YAML s\u00fabor, prida\u0165 do\u0148 nieko\u013eko placeholderov, do ktor\u00fdch Helm vlo\u017e\u00ed hodnoty. Teda namiesto ve\u013ek\u00e9ho mno\u017estva YAML s\u00faborov bude sada \u0161abl\u00f3n, do ktor\u00fdch sa v potrebnom okamihu vlo\u017eia potrebn\u00e9 hodnoty.<\/p>\n<p>Po tretie, Helm \u2014 <strong>majster nasadzovania<\/strong>. S jeho pomocou je mo\u017en\u00e9 in\u0161talova\u0165, vraca\u0165 a aktualizova\u0165 aplik\u00e1cie. Po\u010fme si uk\u00e1za\u0165, ako to robi\u0165.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/8b517dbcf503ced229569fe3726418c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ako pou\u017e\u00edva\u0165 Helm na nasadenie vlastn\u00fdch aplik\u00e1ci\u00ed<\/h3>\n<p>\nNain\u0161talujeme klienta Helm na po\u010d\u00edta\u010d pod\u013ea ofici\u00e1lnych <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/install\/\">the instructions<\/a><\/noindex>. Potom vytvor\u00edme sadu YAML s\u00faborov. Namiesto uvedenia konkr\u00e9tnych hodn\u00f4t nech\u00e1me placeholdery, ktor\u00e9 v bud\u00facnosti Helm vypln\u00ed inform\u00e1ciami. Sada tak\u00fdchto s\u00faborov sa naz\u00fdva Helm chart. Do konzolov\u00e9ho klienta Helm je mo\u017en\u00e9 ho posla\u0165 tromi sp\u00f4sobmi:<\/p>\n<ul>\n<li>uveden\u00edm prie\u010dinka so \u0161abl\u00f3nami;<\/li>\n<li>zabalen\u00edm do .tar arch\u00edvu a uveden\u00edm na\u0148;<\/li>\n<li>vlo\u017een\u00edm \u0161abl\u00f3ny do vzdialen\u00e9ho repozit\u00e1ra a pridan\u00edm odkazu na repozit\u00e1r do klienta Helm.<\/li>\n<\/ul>\n<p>\nE\u0161te potrebujeme s\u00fabor so hodnotami \u2014 values.yaml. D\u00e1ta odtia\u013e sa bud\u00fa vklada\u0165 do \u0161abl\u00f3ny. Vytvor\u00edme aj ten.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/c0fe24cc8186640147f95ce201794d96.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nV druhej verzii Helm existuje \u010fal\u0161ia serverov\u00e1 aplik\u00e1cia \u2014 Tiller. T\u00e1 vis\u00ed vonku z Kubernetes a \u010dak\u00e1 na po\u017eiadavky od klienta Helm, a pri volan\u00ed vklad\u00e1 potrebn\u00e9 hodnoty do \u0161abl\u00f3ny a odosiela do Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/6b821a0bb4680829d5ce9982d2bb4c55.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHelm 3 je jednoduch\u0161\u00ed: namiesto spracovania \u0161abl\u00f3n na serveri sa inform\u00e1cie teraz sprac\u00favaj\u00fa \u00faplne na strane klienta Helm a odosielaj\u00fa priamo do Kubernetes API. Toto zjednodu\u0161enie zvy\u0161uje bezpe\u010dnos\u0165 klastra a u\u013eah\u010duje model nasadzovania.<\/p>\n<p><strong>Ako to v\u0161etko funguje<\/strong><\/p>\n<p>Spust\u00edme pr\u00edkaz <code>helm install<\/code>. Uvedieme n\u00e1zov releasu aplik\u00e1cie, d\u00e1me cestu k values.yaml. Na konci uvedieme repozit\u00e1r, v ktorom sa nach\u00e1dza chart a n\u00e1zov chartu. V pr\u00edklade je to \u201elmru\u201c a \u201ebestchart\u201c respekt\u00edve.<\/p>\n<pre><code class=\"plaintext\">helm install --name bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p>\nSpustenie pr\u00edkazu je mo\u017en\u00e9 len raz, pri opakovan\u00ed namiesto <code>install<\/code> je potrebn\u00e9 pou\u017ei\u0165 <code>upgrade<\/code>. Pre jednoduchos\u0165 je namiesto dvoch pr\u00edkazov mo\u017en\u00e9 vykona\u0165 pr\u00edkaz <code>upgrade<\/code> s dodato\u010dn\u00fdm k\u013e\u00fa\u010dom <code>--install<\/code>. Pri prvom vykonan\u00ed Helm odo\u0161le pr\u00edkaz na in\u0161tal\u00e1ciu vydania a nesk\u00f4r ho bude aktualizova\u0165.<\/p>\n<pre><code class=\"plaintext\">helm upgrade --install bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p><\/p>\n<h2>\u00daskalia nasadzovania nov\u00fdch verzi\u00ed aplik\u00e1cie s Helmom<\/h2>\n<p>\n<i>Na tomto mieste pr\u00edbehu sa hr\u00e1m s publikom v \u201eKto chce by\u0165 milion\u00e1rom\u201c a zist\u00edme, ako prin\u00fati\u0165 Helm aktualizova\u0165 verziu aplik\u00e1cie. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/w1PhTe9gnOI?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ&amp;t=778\"><i>Sledova\u0165 video<\/i><\/a><\/noindex>.<\/p>\n<p>Ke\u010f som sa u\u010dil, ako pracova\u0165 s Helmom, prekvapilo ma zvl\u00e1\u0161tne spr\u00e1vanie pri pokuse o aktualiz\u00e1ciu verzi\u00ed spusten\u00fdch aplik\u00e1ci\u00ed. K\u00f3d aplik\u00e1cie bol aktualizovan\u00fd, v docker registry som nahral nov\u00fd obraz, poslal pr\u00edkaz na nasadenie \u2013 a ni\u010d sa nestalo. Ni\u017e\u0161ie s\u00fa niektor\u00e9 menej \u00faspe\u0161n\u00e9 sp\u00f4soby aktualiz\u00e1cie aplik\u00e1ci\u00ed. Studuj\u00fac ka\u017ed\u00fd z nich podrobnej\u0161ie, za\u010d\u00edna\u0161 ch\u00e1pa\u0165 vn\u00fatorn\u00fa \u0161trukt\u00faru n\u00e1stroja a d\u00f4vody tak\u00e9ho nepov\u0161imnut\u00e9ho spr\u00e1vania.<\/p>\n<p><strong>Sp\u00f4sob 1. Nemeni\u0165 inform\u00e1cie od posledn\u00e9ho spustenia<\/strong><\/p>\n<p>Ako hovor\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">ofici\u00e1lny web<\/a><\/noindex> Helm, \u201eKubernetes charte m\u00f4\u017eu by\u0165 ve\u013ek\u00e9 a zlo\u017eit\u00e9, preto sa Helm sna\u017e\u00ed nepreru\u0161ova\u0165 zbyto\u010dne.\u201c Preto, ak aktualizuje\u0161 latest-verziu obrazu aplik\u00e1cie v docker registry a vykon\u00e1\u0161 pr\u00edkaz <code>helm upgrade<\/code>, tak sa ni\u010d nestane. Helm bude myslie\u0165, \u017ee sa ni\u010d nezmenilo a nebude potrebn\u00e9 posiela\u0165 v Kubernetes pr\u00edkaz na aktualiz\u00e1ciu aplik\u00e1cie.<\/p>\n<blockquote><p>Tu a \u010falej je tag latest uveden\u00fd v\u00fdlu\u010dne ako pr\u00edklad. Pri uveden\u00ed tohto tagu Kubernetes v\u017edy stiahne obraz z docker registry bez oh\u013eadu na parameter imagePullPolicy. Pou\u017e\u00edvanie latest v produkcii je ne\u017eelan\u00e9 a sp\u00f4sobuje ved\u013eaj\u0161ie \u00fa\u010dinky.<\/p><\/blockquote>\n<p>\n<strong>Sp\u00f4sob 2. Aktualizova\u0165 LABEL v image<\/strong><\/p>\n<p>Ako je nap\u00edsan\u00e9 v tej istej <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">dokumen\u00e1cie<\/a><\/noindex>, \u201eHelm bude aktualizova\u0165 aplik\u00e1ciu, iba ak sa od posledn\u00e9ho vydania zmenila.\u201c Logick\u00fdm variantom pre toto sa jav\u00ed aktualiz\u00e1cia zna\u010dky LABEL v samotnom docker obraze. Av\u0161ak Helm nech\u00e1dza do obrazov aplik\u00e1ci\u00ed a nem\u00e1 inform\u00e1cie o ak\u00fdchko\u013evek zmen\u00e1ch v nich. T\u00fdm p\u00e1dom, pri aktualiz\u00e1cii zna\u010diek v obraze sa Helm o nich nedozvie a pr\u00edkaz na aktualiz\u00e1ciu aplik\u00e1cie v Kubernetes nepr\u00edde.<\/p>\n<p><strong>Sp\u00f4sob 3. Pou\u017ei\u0165 k\u013e\u00fa\u010d <code>--force<\/code><\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/4888cddfb7698b7044ab31b6f6070063.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nObr\u00e1\u0165me sa na manu\u00e1ly a h\u013eadajme potrebn\u00fd k\u013e\u00fa\u010d. Najviac sa zmyslu hod\u00ed k\u013e\u00fa\u010d <code>--force<\/code>. Napriek svojmu n\u00e1zvu, spr\u00e1vanie sa l\u00ed\u0161i od o\u010dak\u00e1van\u00e9ho. Namiesto n\u00faten\u00e9ho aktualizovania aplik\u00e1cie je jej skuto\u010dn\u00fd \u00fa\u010del obnovi\u0165 vydanie, ktor\u00e9 je vo statusu FAILED. Ak tento parameter nepou\u017eijete, je potrebn\u00e9 postupne vykona\u0165 pr\u00edkazy. <code>helm delete &amp;&amp; helm install --replace<\/code>. Namiesto toho sa odpor\u00fa\u010da pou\u017ei\u0165 parameter <code>--force<\/code>, ktor\u00fd automatizuje postupn\u00e9 vykon\u00e1vanie t\u00fdchto pr\u00edkazov. Viac inform\u00e1ci\u00ed v tomto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/pull\/3597\">pull requeste.<\/a><\/noindex>. Aby ste povedali Helm, aby predsa len aktualizoval verziu aplik\u00e1cie, bohu\u017eia\u013e, tento parameter nie je vhodn\u00fd.<\/p>\n<p><strong>Sp\u00f4sob 4. Meni\u0165 labels priamo v Kubernetes.<\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/0a35e7aaa7479685f07dd5b935c95eb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAktualiz\u00e1cia labelu priamo v klastri pomocou pr\u00edkazu <code>kubectl edit<\/code> \u2014 zl\u00fd n\u00e1pad. Tento krok povedie k nekonzistentnosti inform\u00e1ci\u00ed medzi be\u017eiacou aplik\u00e1ciou a t\u00fdm, \u010do bolo p\u00f4vodne odoslan\u00e9 na nasadenie. Spr\u00e1vanie Helm pri nasaden\u00ed v tomto pr\u00edpade sa l\u00ed\u0161i od jeho verzie: Helm 2 ni\u010d neurob\u00ed, zatia\u013e \u010do Helm 3 nasad\u00ed nov\u00fa verziu aplik\u00e1cie. Na pochopenie pr\u00ed\u010diny je potrebn\u00e9 pochopi\u0165, ako Helm funguje.<\/p>\n<h3>Ako je Helm navrhnut\u00fd.<\/h3>\n<p>\nNa ur\u010denie, \u010di sa aplik\u00e1cia od posledn\u00e9ho vydania zmenila, m\u00f4\u017ee Helm vyu\u017ei\u0165:<\/p>\n<ul>\n<li>be\u017eiacu aplik\u00e1ciu v Kubernetes;<\/li>\n<li>nov\u00fd values.yaml a aktu\u00e1lny chart;<\/li>\n<li>vn\u00fatorn\u00e9 inform\u00e1cie Helmu o vydaniach.<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">Pre t\u00fdch, ktor\u00ed sa radi p\u00fdtaj\u00fa: kde Helm uchov\u00e1va vn\u00fatorn\u00e9 inform\u00e1cie o vydaniach?<\/b>Po vykonan\u00ed pr\u00edkazu <code>helm history<\/code>, z\u00edskame v\u0161etky inform\u00e1cie o verzi\u00e1ch nain\u0161talovan\u00fdch pomocou Helmu.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/0bf3afeb9c4947220474af648a1fa1ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOkrem toho s\u00fa k dispoz\u00edcii podrobn\u00e9 inform\u00e1cie o odoslan\u00fdch \u0161abl\u00f3nach a hodnot\u00e1ch. M\u00f4\u017eeme ich z\u00edska\u0165:<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/858560c0f4adf7375060cec339df7574.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nV druhej verzii Helmu s\u00fa tieto inform\u00e1cie ulo\u017een\u00e9 v rovnakom namespace, kde je spusten\u00fd Tiller (predvolene \u2014 kube-system), v ConfigMap, ozna\u010denej zna\u010dkou \u00abOWNER=TILLER\u00bb:<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/ba665a079ccddeb4ca7049822c42a498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nS pr\u00edchodom tretej verzie Helmu sa inform\u00e1cie presunuli do tajomstiev, pri\u010dom v tom istom namespace, kde je spusten\u00e1 aplik\u00e1cia. V\u010faka tomu je mo\u017en\u00e9 sp\u00fa\u0161\u0165a\u0165 viacero aplik\u00e1ci\u00ed v r\u00f4znych namespace s rovnak\u00fdm n\u00e1zvom vydania. V druhej verzii to bola ve\u013ek\u00e1 boles\u0165 hlavy, ke\u010f s\u00fa namespace izolovan\u00e9, ale m\u00f4\u017eu si navz\u00e1jom zasahova\u0165.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/b9b82b7c86320a0e3642e4265a1f0241.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nDruh\u00fd Helm, ke\u010f sa sna\u017e\u00ed zisti\u0165, \u010di je potrebn\u00e1 aktualiz\u00e1cia, pou\u017e\u00edva iba dva zdroje inform\u00e1ci\u00ed: to, \u010do mu poskytli teraz, a vn\u00fatorn\u00e9 inform\u00e1cie o vydaniach, ktor\u00e9 s\u00fa ulo\u017een\u00e9 v ConfigMap.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/0550ba5f6ce7be1e7f666dfc65e639ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTret\u00ed Helm vyu\u017e\u00edva strat\u00e9giu three-way merge: okrem inform\u00e1ci\u00ed zoh\u013ead\u0148uje aj aplik\u00e1ciu, ktor\u00e1 aktu\u00e1lne be\u017e\u00ed v Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Zariadenie Helm a jeho \u00faskalia\" src=\"\/wp-content\/uploads\/2020\/02\/252085adb83e097e01b4a0655706ede5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZ toho d\u00f4vodu star\u0161ia verzia Helmu ni\u010d neurob\u00ed, preto\u017ee nezoh\u013ead\u0148uje inform\u00e1cie aplik\u00e1cie v klastri, av\u0161ak Helm 3 z\u00edska zmeny a nasad\u00ed nov\u00fa aplik\u00e1ciu.<\/p>\n<p><strong>Sp\u00f4sob 5. Pou\u017ei\u0165 k\u013e\u00fa\u010d &#8212;recreate-pods<\/strong><\/p>\n<p>Pomocou k\u013e\u00fa\u010da <code>--recreate-pods<\/code> m\u00f4\u017eeme dosiahnu\u0165 to, \u010do sa p\u00f4vodne pl\u00e1novalo dosiahnu\u0165 pomocou k\u013e\u00fa\u010da <code>--force<\/code>. Kontajnery sa re\u0161tartuj\u00fa a pod\u013ea politiky imagePullPolicy: Always pre tag latest (o tom vy\u0161\u0161ie v pozn\u00e1mke) Kubernetes stiahne a spust\u00ed nov\u00fa verziu obrazu. Bude to robi\u0165 nie najlep\u0161\u00edm sp\u00f4sobom: bez oh\u013eadu na StrategyType nasadenia n\u00e1hle vypne v\u0161etky star\u00e9 in\u0161tancie aplik\u00e1cie a p\u00f4jde spusti\u0165 nov\u00e9. Po\u010das re\u0161tartu syst\u00e9m nebude fungova\u0165, pou\u017e\u00edvatelia bud\u00fa trpie\u0165.<\/p>\n<p>V samotnom Kubernetes podobn\u00fd probl\u00e9m existoval dlh\u0161iu dobu. A tak, po \u0161tyroch rokoch od otvorenia <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/13488\">Issues<\/a><\/noindex>, probl\u00e9m opravili a od verzie 1.15 je v Kubernetes mo\u017enos\u0165 rolling-restart podov.<\/p>\n<p>Helm jednoducho vypne v\u0161etky aplik\u00e1cie a spust\u00ed ved\u013ea nov\u00e9 kontajnery. V produkte to robi\u0165 nemo\u017eno, aby sa nezp\u00f4sobilo ne\u010dinnos\u0165 aplik\u00e1cie. Tak\u00e9to akcie s\u00fa potrebn\u00e9 len na v\u00fdvojov\u00e9 \u00fa\u010dely, m\u00f4\u017eu sa vykon\u00e1va\u0165 iba v stage prostrediach.<\/p>\n<h2>Ako aktualizova\u0165 verziu aplik\u00e1cie pomocou Helmu?<\/h2>\n<p>\nBudeme meni\u0165 hodnoty zasielan\u00e9 do Helmu. Zvy\u010dajne ide o hodnoty, ktor\u00e9 sa vkladaj\u00fa na miesto tagu obrazu. V pr\u00edpade latest, \u010dasto vyu\u017e\u00edvan\u00e9ho pre neproduk\u010dn\u00e9 prostredia, hr\u00e1 \u00falohu premenliv\u00e1 inform\u00e1cia anot\u00e1cia, ktor\u00e1 je pre samotn\u00fd Kubernetes zbyto\u010dn\u00e1, ale pre Helm bude sign\u00e1lom k potrebe aktualiz\u00e1cie aplik\u00e1cie. Mo\u017enosti vyplnenia hodnoty anot\u00e1cie:<\/p>\n<ol>\n<li><strong>N\u00e1hodn\u00e1 hodnota<\/strong> pomocou \u0161tandardnej funkcie \u2014 <code>{{ randAlphaNum 6 }}<\/code>. <br \/>\nJe tu jeden detail: po ka\u017edom nasaden\u00ed pomocou chartu s takouto premennou bude hodnota anot\u00e1cie unik\u00e1tna a Helm bude predpoklada\u0165, \u017ee existuj\u00fa zmeny. Vzh\u013eadom na to, v\u017edy budeme re\u0161tartova\u0165 aplik\u00e1ciu, aj ke\u010f sme jej verziu nezmenili. Nie je to kritick\u00e9, preto\u017ee ne\u010dinnos\u0165 nebude, ale predsa len je to nepr\u00edjemn\u00e9.<\/li>\n<li>Vlo\u017ei\u0165 aktu\u00e1lnu <strong>d\u00e1tum a \u010das<\/strong> \u2014 <code>{{ .Release.Date }}<\/code>. <br \/>\nTento variant je podobn\u00fd n\u00e1hodnej hodnote s neust\u00e1le unik\u00e1tnou premennou.<\/li>\n<li>Spr\u00e1vnej\u0161\u00edm sp\u00f4sobom je pou\u017ei\u0165 <strong>opakovan\u00e9 sumy<\/strong>. Toto je SHA obrazu alebo SHA posledn\u00e9ho commitu v Gite \u2014 <code>{{ .Values.sha }}<\/code>. <br \/>\nMus\u00edme ich spo\u010d\u00edta\u0165 a posla\u0165 klientovi Helm na volaj\u00facej strane, napr\u00edklad v Jenkins. Ak sa aplik\u00e1cia zmen\u00ed, zmen\u00ed sa aj kontroln\u00e1 suma. Preto Helm aktualizuje aplik\u00e1ciu iba vtedy, ke\u010f je to potrebn\u00e9.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Zhrnime na\u0161e pokusy<\/h2>\n<p><\/p>\n<ul>\n<li>Helm rob\u00ed zmeny najmenej invaz\u00edvnym sp\u00f4sobom, preto ak\u00e1ko\u013evek zmena na \u00farovni obrazu aplik\u00e1cie v Docker Registry nevedie k aktualiz\u00e1cii: po vykonan\u00ed pr\u00edkazu sa ni\u010d nestane.<\/li>\n<li>Parameter <code>--force<\/code> sa pou\u017e\u00edva na obnovu probl\u00e9mov\u00fdch vydan\u00ed a nie je spojen\u00fd s n\u00fatenou aktualiz\u00e1ciou.<\/li>\n<li>Parameter <code>--recreate-pods<\/code> n\u00fatene aktualizuje aplik\u00e1cie, ale rob\u00ed to n\u00e1siln\u00fdm sp\u00f4sobom: n\u00e1hle vypne v\u0161etky kontajnery. T\u00fdm trpia pou\u017e\u00edvatelia, na produkcii by sa to nemalo robi\u0165.<\/li>\n<li>Priamo vklada\u0165 zmeny do klastra Kubernetes pomocou pr\u00edkazu <code>kubectl edit<\/code> by sa nemalo: naru\u0161\u00edme konzistenciu a spr\u00e1vanie sa bude l\u00ed\u0161i\u0165 v z\u00e1vislosti od verzie Helmu.<\/li>\n<li>S vydan\u00edm novej verzie Helmu sa objavilo ve\u013ea nu\u00e1ns. Probl\u00e9my v repozit\u00e1ri Helmu s\u00fa op\u00edsan\u00e9 zrozumite\u013en\u00fdm sp\u00f4sobom, pom\u00f4\u017eu zorientova\u0165 sa v detailoch.<\/li>\n<li>Pridanie menite\u013enej anot\u00e1cie do chartu ho urob\u00ed flexibilnej\u0161\u00edm. To umo\u017en\u00ed spr\u00e1vne nasadenie aplik\u00e1cie bez v\u00fdpadkov.<\/li>\n<\/ul>\n<p>\nMy\u0161lienka z kateg\u00f3rie \u00abmier vo svete\u00bb, platn\u00e1 vo v\u0161etk\u00fdch oblastiach \u017eivota: pre\u010d\u00edtajte si n\u00e1vod pred pou\u017eit\u00edm, nie po \u0148om. Iba s kompletn\u00fdmi inform\u00e1ciami dok\u00e1\u017eete budova\u0165 spo\u013eahliv\u00e9 syst\u00e9my a robi\u0165 pou\u017e\u00edvate\u013eov \u0161\u0165astn\u00fdmi.<\/p>\n<p><strong>\u010eal\u0161ie odkazy na t\u00e9mu:<\/strong><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/453734\/\">\u00davod do <i>Helm<\/i> 3<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/\">Ofici\u00e1lna str\u00e1nka Helmu<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\">Repozit\u00e1r Helmu na GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/425343\/\">25 u\u017eito\u010dn\u00fdch n\u00e1strojov Kubernetes: nasadenie a spr\u00e1va<\/a><\/noindex><\/li>\n<\/ol>\n<p>\nTento pr\u00edspevok bol prv\u00fdkr\u00e1t prednesen\u00fd na <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> od Mail.ru Cloud Solutions. Pozrite sa <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ\">videu<\/a><\/noindex> in\u00e9 vyst\u00fapenia a prihl\u00e1ste sa na ozn\u00e1menia udalost\u00ed v Telegrame <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Okolo Kubernetes v Mail.ru Group<\/a><\/noindex>.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/488192\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Typhon freight hauler concept, Anton Swanepoel \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0421\u0443\u0433\u0440\u043e\u0431\u043e\u0432, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u00ab\u041b\u0435\u0440\u0443\u0430 \u041c\u0435\u0440\u043b\u0435\u043d\u00bb. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d Helm, \u043a\u0430\u043a \u043e\u043d \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Kubernetes, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u043a\u0430\u043a \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u042d\u0442\u043e \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 @Kubernetes Conference by Mail.ru Cloud [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":70955,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-70954","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=\"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\/ustrojstvo-helm-i-ego-podvodnye-kamni\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\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\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Helm \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-22T21:58:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:40+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\udd47Strukt\u00fara Helmu a jej \u00faskalia | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","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\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Helm \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 | ProHoster","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-22T21:58:17+00:00","article:modified_time":"2020-03-03T13:14:40+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"70954","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:11:23","updated":"2022-09-30 13:54:53","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\/70954","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=70954"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/70954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/70955"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=70954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=70954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=70954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}