{"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\/ro\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","title":{"rendered":"Dispozitivul Helm \u0219i capcanele sale","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" 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\">Conceptul de transport de marf\u0103 Typhon, Anton Swanepoel<\/a><\/noindex><\/p>\n<p>M\u0103 numesc Dmitrii Sugrobov, sunt dezvoltator la \u201eLeroy Merlin\u201d. \u00cen acest articol voi explica de ce este necesar Helm, cum simplific\u0103 munca cu Kubernetes, ce s-a schimbat \u00een a treia versiune \u0219i cum s\u0103 actualiz\u0103m aplica\u021biile \u00een produc\u021bie f\u0103r\u0103 a avea timpi de nefunc\u021bionare.<\/p>\n<p>Acesta este un rezumat bazat pe o prezentare de la conferin\u021b\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> prin <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\">Solu\u021bii Cloud Mail.ru<\/a><\/noindex> \u2014 dac\u0103 nu dori\u021bi s\u0103 citi\u021bi, viziona\u021bi videoclipul.<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=\"Reda\u021bi 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>De ce folosim Kubernetes \u00een produc\u021bie<\/h2>\n<p>\n\u201eLeroy Merlin\u201d este lider pe pia\u021ba retailului DIY \u00een Rusia \u0219i Europa. \u00cen compania noastr\u0103 sunt mai mult de o sut\u0103 de dezvoltatori, 33.000 de angaja\u021bi interni \u0219i un num\u0103r mare de persoane care viziteaz\u0103 hipermarketurile \u0219i site-ul. Pentru a-i face pe to\u021bi ferici\u021bi, am decis s\u0103 ne aliniem standardelor din industrie. Dezvolt\u0103m aplica\u021bii noi folosind arhitectura microserviciilor; pentru izolarea mediilor \u0219i livrarea corect\u0103 folosim containere; iar pentru orchestrare folosim Kubernetes. Pre\u021bul utiliz\u0103rii orchestratorilor scade rapid: pe pia\u021b\u0103 cre\u0219te num\u0103rul de ingineri care st\u0103p\u00e2nesc tehnologia, apar furnizori care ofer\u0103 Kubernetes ca serviciu.<\/p>\n<p>Tot ceea ce face Kubernetes, desigur, poate fi realizat \u0219i \u00een alte moduri, de exemplu, prin aplicarea unor scripturi cu Jenkins \u0219i docker-compose, dar de ce s\u0103 complic\u0103m via\u021ba dac\u0103 exist\u0103 o solu\u021bie gata \u0219i fiabil\u0103? Prin urmare, am ales Kubernetes \u0219i deja \u00eel folosim \u00een produc\u021bie de un an. Acum avem dou\u0103zeci \u0219i patru de clustere Kubernetes, cel mai vechi av\u00e2nd peste un an, cu aproximativ dou\u0103 sute de poduri.<\/p>\n<h2>Blestemul unui num\u0103r mare de fi\u0219iere YAML \u00een Kubernetes<\/h2>\n<p>\nPentru a lansa un microserviciu \u00een Kubernetes, vom crea cel pu\u021bin cinci fi\u0219iere YAML: pentru Deployment, Service, Ingress, ConfigMap, Secrets \u2014 \u0219i le vom trimite \u00een cluster. Pentru urm\u0103toarea aplica\u021bie, vom scrie acela\u0219i pachet de fi\u0219iere YAML, pentru a treia oar\u0103 \u00eenc\u0103 unul \u0219i a\u0219a mai departe. S\u0103 \u00eenmul\u021bim num\u0103rul de documente cu num\u0103rul de medii, \u0219i deja vom ob\u021bine sute de fi\u0219iere, f\u0103r\u0103 a lua \u00een considerare mediile dinamice.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/c46c3f5ae49cbefa4851cbb388bfd051.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAdam Reese, men\u021bin\u0103tor principal Helm, a introdus conceptul \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/cZ1S2Gp47ng?t=323\">Ciclul de dezvoltare \u00een Kubernetes<\/a><\/noindex>\u201d, care arat\u0103 astfel:<\/p>\n<ol>\n<li>Copie YAML \u2014 copia\u021bi fi\u0219ierul YAML.<\/li>\n<li>Lipire YAML \u2014 insera\u021bi-l.<\/li>\n<li>Corectare Indent\u0103ri \u2014 repara\u021bi indent\u0103rile.<\/li>\n<li>Repetare \u2014 repeta\u021bi din nou.<\/li>\n<\/ol>\n<p>\nVarianta func\u021bioneaz\u0103, dar este necesar\u0103 copierea frecvent\u0103 a fi\u0219ierelor YAML. Pentru a schimba acest ciclu, a fost inventat Helm.<\/p>\n<h3>Ce este Helm<\/h3>\n<p>\n\u00cen primul r\u00e2nd, Helm este<strong> un manager de pachete<\/strong>, ajut\u0103 la g\u0103sirea \u0219i instalarea programelor necesare. Pentru instalarea, de exemplu, a MongoDB nu trebuie s\u0103 accesa\u021bi site-ul oficial \u0219i s\u0103 desc\u0103rca\u021bi binarele, este suficient s\u0103 executa\u021bi comanda <code>helm install stable\/mongodb<\/code>.<\/p>\n<p>\u00cen al doilea r\u00e2nd, Helm \u2014 <strong>un template engine<\/strong>, ajut\u0103 la parametrizarea fi\u0219ierelor. S\u0103 ne \u00eentoarcem la situa\u021bia cu fi\u0219ierele YAML din Kubernetes. Este mai simplu s\u0103 scriem acela\u0219i fi\u0219ier YAML, s\u0103 ad\u0103ug\u0103m \u00een el c\u00e2\u021biva placeholders, \u00een care Helm va \u00eenlocui valorile. Asta \u00eenseamn\u0103 c\u0103 \u00een loc de un set mare de fi\u0219iere YAML vom avea un set de template-uri \u00een care, la momentul potrivit, se vor introduce valorile corespunz\u0103toare.<\/p>\n<p>\u00cen al treilea r\u00e2nd, Helm \u2014 <strong>un maestru \u00een deploy<\/strong>. Cu ajutorul lui, pute\u021bi instala, reveni la versiunile anterioare \u0219i actualiza aplica\u021biile. S\u0103 vedem cum se face acest lucru.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/8b517dbcf503ced229569fe3726418c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Cum s\u0103 folose\u0219ti Helm pentru a-\u021bi desf\u0103\u0219ura propriile aplica\u021bii<\/h3>\n<p>\nVom instala clientul Helm pe computer, urm\u00e2nd instruc\u021biunile oficiale <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/install\/\">instruc\u021biuni<\/a><\/noindex>. Apoi, vom crea un set de fi\u0219iere YAML. \u00cen loc de a indica valori concrete, vom l\u0103sa placeholders, pe care Helm le va completa ulterior cu informa\u021bii. Setul acestor fi\u0219iere se nume\u0219te Helm chart. Poate fi trimis c\u0103tre clientul consolei Helm \u00een trei moduri:<\/p>\n<ul>\n<li>specific\u00e2nd folderul cu template-uri;<\/li>\n<li>\u00eempachet\u00e2nd \u00eentr-un arhiv .tar \u0219i indic\u00e2nd-l;<\/li>\n<li>\u00eencerc\u00e2nd s\u0103 ad\u0103ug\u0103m template-ul \u00eentr-un repository remote \u0219i ad\u0103ug\u00e2nd linkul c\u0103tre repository \u00een clientul Helm.<\/li>\n<\/ul>\n<p>\nDe asemenea, este nevoie de un fi\u0219ier cu valorile \u2014 values.yaml. Datele din acesta vor fi inserate \u00een template. S\u0103-l cre\u0103m \u0219i pe acesta.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/c0fe24cc8186640147f95ce201794d96.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00cen a doua versiune a Helm, exist\u0103 o aplica\u021bie server suplimentar\u0103 \u2014 Tiller. Aceasta ruleaz\u0103 extern Kubernetes-ului \u0219i a\u0219teapt\u0103 cererile de la clientul Helm, iar la solicitare \u00eenlocuie\u0219te valorile necesare \u00een template \u0219i le trimite \u00een Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/6b821a0bb4680829d5ce9982d2bb4c55.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHelm 3 este mai simplu: \u00een loc de a procesa template-urile pe server, informa\u021bia este acum procesat\u0103 complet de c\u0103tre clientul Helm \u0219i trimis\u0103 direct la API-ul Kubernetes. Aceast\u0103 simplificare \u00eembun\u0103t\u0103\u021be\u0219te securitatea cluster-ului \u0219i face schema de deploy mai u\u0219oar\u0103.<\/p>\n<p><strong>Cum func\u021bioneaz\u0103 totul<\/strong><\/p>\n<p>Execut\u0103m comanda <code>helm install<\/code>. Vom indica numele release-ului aplica\u021biei, vom da calea c\u0103tre values.yaml. La sf\u00e2r\u0219it, vom specifica repository-ul unde se afl\u0103 chartul \u0219i numele acestuia. \u00cen exemplul nostru, acestea sunt \u00ablmru\u00bb \u0219i \u00abbestchart\u00bb.<\/p>\n<pre><code class=\"plaintext\">helm install --name bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p>\nExecutarea comenzii este posibil\u0103 doar o singur\u0103 dat\u0103, la o nou\u0103 execu\u021bie \u00een loc de <code>install<\/code> trebuie utilizat <code>upgrade<\/code>. Pentru simplificare, \u00een loc de dou\u0103 comenzi, se poate executa comanda <code>upgrade<\/code> cu o cheie suplimentar\u0103 <code>--install<\/code>. La prima execu\u021bie, Helm va trimite comanda pentru instalarea release-ului, iar ulterior \u00eel va actualiza.<\/p>\n<pre><code class=\"plaintext\">helm upgrade --install bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p><\/p>\n<h2>Capcane \u00een desf\u0103\u0219urarea noilor versiuni ale aplica\u021biei cu Helm<\/h2>\n<p>\n<i>\u00cen acest moment al povestirii, m\u0103 joc cu sala \u00een \u00abCine vrea s\u0103 fie milionar\u00bb, \u0219i afl\u0103m cum s\u0103 facem ca Helm s\u0103 actualizeze versiunea aplica\u021biei. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/w1PhTe9gnOI?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ&amp;t=778\"><i>Viziona\u021bi video<\/i><\/a><\/noindex>.<\/p>\n<p>C\u00e2nd studiam func\u021bionarea lui Helm, m-a surprins comportamentul ciudat la \u00eencercarea de a actualiza versiunile aplica\u021biilor \u00een execu\u021bie. Codul aplica\u021biei a fost actualizat, am \u00eenc\u0103rcat o nou\u0103 imagine \u00een docker registry, am trimis comanda pentru desf\u0103\u0219urare \u2013 \u0219i nimic nu s-a \u00eent\u00e2mplat. Mai jos sunt c\u00e2teva metode nu tocmai reu\u0219ite de actualizare a aplica\u021biilor. Studiind fiecare dintre ele mai \u00een detaliu, \u00eencepi s\u0103 \u00een\u021belegi structura intern\u0103 a instrumentului \u0219i motivele acestui comportament nea\u0219teptat.<\/p>\n<p><strong>Metoda 1. Nu schimba informa\u021bia de la ultima execu\u021bie<\/strong><\/p>\n<p>Cum spune <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">site-ul oficial<\/a><\/noindex> Helm, \u201eChiartele Kubernetes pot fi mari \u0219i complexe, a\u0219a c\u0103 Helm \u00eencearc\u0103 s\u0103 nu schimbe nimic f\u0103r\u0103 motiv\u201d. Prin urmare, dac\u0103 actualizezi versiunea latest a imaginii aplica\u021biei \u00een docker registry \u0219i execu\u021bi comanda <code>helm upgrade<\/code>, nimic nu se va \u00eent\u00e2mpla. Helm va crede c\u0103 nimic nu s-a schimbat \u0219i nu va fi nevoie s\u0103 trimit\u0103 o comand\u0103 pentru actualizarea aplica\u021biei \u00een Kubernetes.<\/p>\n<blockquote><p>Aici \u0219i mai departe, eticheta latest este ar\u0103tat\u0103 doar ca exemplu. C\u00e2nd folose\u0219ti aceast\u0103 etichet\u0103, Kubernetes va desc\u0103rca de fiecare dat\u0103 imaginea din docker registry, indiferent de parametrul imagePullPolicy. Utilizarea latest \u00een produc\u021bie este nedorit\u0103 \u0219i cauzeaz\u0103 efecte secundare.<\/p><\/blockquote>\n<p>\n<strong>Metoda 2. Actualizeaz\u0103 LABEL \u00een imagine<\/strong><\/p>\n<p>A\u0219a cum este scris \u00een acela\u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">documentation<\/a><\/noindex>, \u201eHelm va actualiza aplica\u021bia doar dac\u0103 aceasta s-a schimbat de la ultima publica\u021bie\u201d. O variant\u0103 logic\u0103 pentru aceasta ar p\u0103rea actualizarea etichetei LABEL \u00een imaginea docker. Cu toate acestea, Helm nu verific\u0103 imaginile aplica\u021biilor \u0219i nu are nicio idee despre eventualele modific\u0103ri ale acestora. Prin urmare, la actualizarea etichetelor din imagine, Helm nu va afla despre ele, iar comanda de actualizare a aplica\u021biei \u00een Kubernetes nu va fi trimis\u0103.<\/p>\n<p><strong>Metoda 3. Folose\u0219te cheia <code>--force<\/code><\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/4888cddfb7698b7044ab31b6f6070063.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nS\u0103 ne \u00eentoarcem la manuale \u0219i s\u0103 c\u0103ut\u0103m cheia dorit\u0103. Cea mai potrivit\u0103 \u00een context este cheia <code>--force<\/code>. Cu toate c\u0103 numele sugereaz\u0103 altceva, comportamentul difer\u0103 de a\u0219tept\u0103ri. \u00cen loc de a for\u021ba actualizarea aplica\u021biei, adev\u0103rata sa destina\u021bie este restaurarea unui release aflat \u00een status FAILED. Dac\u0103 nu se folose\u0219te aceast\u0103 op\u021biune, trebuie s\u0103 executa\u021bi comenzi \u00een ordine. <code>helm delete &amp;&amp; helm install --replace<\/code>. \u00cen schimb, se recomand\u0103 utilizarea op\u021biunii <code>--force<\/code>, care automatizeaz\u0103 execu\u021bia \u00een ordine a acestor comenzi. Mai multe informa\u021bii \u00een acest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/pull\/3597\">pull request.<\/a><\/noindex>. Pentru a spune Helm s\u0103 actualizeze versiunea aplica\u021biei, din p\u0103cate, aceast\u0103 op\u021biune nu se potrive\u0219te.<\/p>\n<p><strong>Metoda 4. Schimba\u021bi etichetele direct \u00een Kubernetes.<\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/0a35e7aaa7479685f07dd5b935c95eb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nActualizarea etichetei direct \u00een cluster cu comanda <code>kubectl edit<\/code> \u2014 o idee proast\u0103. Aceast\u0103 ac\u021biune va duce la inconsisten\u021be \u00eentre informa\u021biile aplica\u021biei \u00een execu\u021bie \u0219i ceea ce a fost ini\u021bial trimis la desf\u0103\u0219urare. Comportamentul Helm \u00een aceast\u0103 situa\u021bie difer\u0103 de versiunea sa: Helm 2 nu va face nimic, iar Helm 3 va desf\u0103\u0219ura o nou\u0103 versiune a aplica\u021biei. Pentru a \u00een\u021belege cauza, trebuie s\u0103 \u0219tim cum func\u021bioneaz\u0103 Helm.<\/p>\n<h3>Cum func\u021bioneaz\u0103 Helm?<\/h3>\n<p>\nPentru a determina dac\u0103 aplica\u021bia s-a schimbat de la ultima desf\u0103\u0219urare, Helm poate utiliza:<\/p>\n<ul>\n<li>aplica\u021bia \u00een execu\u021bie \u00een Kubernetes;<\/li>\n<li>un nou values.yaml \u0219i chartul actual;<\/li>\n<li>informa\u021biile interne Helm despre release-uri.<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">Pentru cei mai curio\u0219i: unde p\u0103streaz\u0103 Helm informa\u021biile interne despre release-uri?<\/b>Execut\u00e2nd comanda <code>helm history<\/code>, vom ob\u021bine toate informa\u021biile despre versiunile instalate cu Helm.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/0bf3afeb9c4947220474af648a1fa1ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nExist\u0103, de asemenea, informa\u021bii detaliate despre \u0219abloanele \u0219i valorile trimise. Putem solicita aceste informa\u021bii:<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/858560c0f4adf7375060cec339df7574.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00cen a doua versiune Helm, aceste informa\u021bii erau p\u0103strate \u00een acela\u0219i namespace \u00een care era rulat Tiller (implicit \u2013 kube-system), \u00een ConfigMap marcat cu eticheta \u201eOWNER=TILLER\u201d:<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/ba665a079ccddeb4ca7049822c42a498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOdat\u0103 cu apari\u021bia celei de-a treia versiuni Helm, informa\u021biile s-au mutat \u00een secrete, \u00een acela\u0219i namespace \u00een care este rulat aplica\u021bia. Datorit\u0103 acestui fapt, a devenit posibil s\u0103 se desf\u0103\u0219oare simultan mai multe aplica\u021bii \u00een namespace-uri diferite cu acela\u0219i nume de release. \u00cen a doua versiune, aceasta era o mare durere de cap, c\u00e2nd namespace-urile sunt izolate, dar pot influen\u021ba una pe cealalt\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/b9b82b7c86320a0e3642e4265a1f0241.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAl doilea Helm, atunci c\u00e2nd \u00eencearc\u0103 s\u0103 \u00een\u021beleag\u0103 dac\u0103 este necesar\u0103 o actualizare, folose\u0219te doar dou\u0103 surse de informa\u021bie: ceea ce i s-a furnizat acum \u0219i informa\u021biile interne despre release-uri, care sunt p\u0103strate \u00een ConfigMap.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/0550ba5f6ce7be1e7f666dfc65e639ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAl treilea Helm folose\u0219te strategia de \u00eembinare \u00een trei moduri: pe l\u00e2ng\u0103 informa\u021biile existente, ia \u00een considerare \u0219i aplica\u021bia care ruleaz\u0103 \u00een prezent \u00een Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Dispozitivul Helm \u0219i capcanele sale\" src=\"\/wp-content\/uploads\/2020\/02\/252085adb83e097e01b4a0655706ede5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDin aceast\u0103 cauz\u0103, versiunea veche a Helm nu va face nimic, deoarece nu consider\u0103 informa\u021biile aplica\u021biei din cluster, iar Helm 3 va ob\u021bine modific\u0103rile \u0219i va trimite o nou\u0103 aplica\u021bie pentru desf\u0103\u0219urare.<\/p>\n<p><strong>Metoda 5. Utiliza\u021bi cheia -recreate-pods<\/strong><\/p>\n<p>Prin intermediul cheii <code>--recreate-pods<\/code> se poate ajunge la ceea ce s-a inten\u021bionat ini\u021bial s\u0103 se ob\u021bin\u0103 folosind cheia <code>--force<\/code>. Containerele se vor reporni \u0219i, conform politicii imagePullPolicy: Always pentru eticheta latest (despre care am vorbit \u00een nota de mai sus), Kubernetes va desc\u0103rca \u0219i va lansa o nou\u0103 versiune a imaginii. Acest lucru se va face \u00eentr-un mod nu tocmai optim: f\u0103r\u0103 a lua \u00een considerare StrategyType al desf\u0103\u0219ur\u0103rii, va opri brusc toate instan\u021bele vechi ale aplica\u021biei \u0219i va \u00eencepe s\u0103 lanseze altele noi. \u00cen timpul repornirii, sistemul nu va func\u021biona, iar utilizatorii vor suferi.<\/p>\n<p>\u00cen Kubernetes a existat o problem\u0103 similar\u0103 care a persistat o perioad\u0103 \u00eendelungat\u0103. \u0218i iat\u0103, dup\u0103 4 ani de la deschiderea <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/13488\">Issue<\/a><\/noindex>, problema a fost corectat\u0103, iar \u00eencep\u00e2nd cu versiunea 1.15 a Kubernetes, apare posibilitatea de rolling-restart a podurilor.<\/p>\n<p>Helm pur \u0219i simplu opre\u0219te toate aplica\u021biile \u0219i lanseaz\u0103 \u00een paralel noi containere. \u00cen produc\u021bie, a\u0219a nu se poate proceda, pentru a nu provoca o \u00eentrerupere a aplica\u021biei. Aceasta se face doar pentru nevoile dezvolt\u0103rii, put\u00e2nd fi realizat\u0103 doar \u00een medii de tip staging.<\/p>\n<h2>Cum se actualizeaz\u0103 versiunea aplica\u021biei cu ajutorul Helm?<\/h2>\n<p>\nVom schimba valorile trimise c\u0103tre Helm. De obicei, acestea sunt valorile \u00eenlocuite pentru eticheta imaginii. \u00cen cazul celui mai recent, utilizat frecvent pentru medii neproductive, informa\u021bia modificabil\u0103 este o adnotare, care este inutil\u0103 pentru Kubernetes, dar va ac\u021biona ca un semnal pentru Helm de necesitate a actualiz\u0103rii aplica\u021biei. Variantele de completare a valorii adnot\u0103rii sunt:<\/p>\n<ol>\n<li><strong>O valoare aleatoare<\/strong> prin intermediul func\u021biei standard \u2014 <code>{{ randAlphaNum 6 }}<\/code>. <br \/>\nExist\u0103 un detaliu: dup\u0103 fiecare desf\u0103\u0219urare folosind un charta cu o astfel de variabil\u0103, valoarea adnot\u0103rii va fi unic\u0103, iar Helm va considera c\u0103 exist\u0103 modific\u0103ri. Rezultatul este c\u0103 vom reporni constant aplica\u021bia, chiar dac\u0103 nu ne-am schimbat versiunea. Acest lucru nu este critic, deoarece nu vor exista perioade de nefunc\u021bionare, dar totu\u0219i este nepl\u0103cut.<\/li>\n<li>Introducerea datei <strong>\u0219i orei curente<\/strong> \u2014 <code>{{ .Release.Date }}<\/code>. <br \/>\nAceast\u0103 variant\u0103 este similar\u0103 cu o valoare aleatoare, av\u00e2nd o variabil\u0103 constant unic\u0103.<\/li>\n<li>O modalitate mai corect\u0103 este s\u0103 folose\u0219ti <strong>sume de control<\/strong>. Acesta este SHA al imaginii sau SHA al ultimei comiteri \u00een Git \u2014 <code>{{ .Values.sha }}<\/code>. <br \/>\nAcestea trebuie calculate \u0219i trimise clientului Helm pe partea apelant\u0103, de exemplu \u00een Jenkins. Dac\u0103 aplica\u021bia se schimb\u0103, atunci \u0219i suma de control se va schimba. Prin urmare, Helm va actualiza aplica\u021bia doar atunci c\u00e2nd este necesar.<\/li>\n<\/ol>\n<p><\/p>\n<h2>S\u0103 rezum\u0103m \u00eencerc\u0103rile noastre<\/h2>\n<p><\/p>\n<ul>\n<li>Helm face modific\u0103rile \u00eentr-un mod c\u00e2t mai pu\u021bin invaziv, a\u0219a c\u0103 orice schimbare la nivelul imaginii aplica\u021biei \u00een Docker Registry nu va duce la actualiz\u0103ri: dup\u0103 executarea comenzii, nimic nu se va \u00eent\u00e2mpla.<\/li>\n<li>Cheia <code>--force<\/code> este utilizat pentru restaurarea versiunilor problematice \u0219i nu este legat de actualizarea for\u021bat\u0103.<\/li>\n<li>Cheia <code>--recreate-pods<\/code> va actualiza for\u021bat aplica\u021biile, dar o va face \u00eentr-un mod barbar: va opri abrupt toate containerele. Acest lucru va afecta utilizatorii, astfel c\u0103 nu ar trebui f\u0103cut \u00een produc\u021bie.<\/li>\n<li>Nu trebuie s\u0103 facem modific\u0103ri direct \u00een clusterul Kubernetes prin comanda <code>kubectl edit<\/code> : vom \u00eenc\u0103lca consisten\u021ba, iar comportamentul va varia \u00een func\u021bie de versiunea Helm.<\/li>\n<li>Odat\u0103 cu lansarea unei noi versiuni Helm, au ap\u0103rut multe nuan\u021be. Problemele din repository-ul Helm sunt descrise \u00eentr-un mod clar, ele te vor ajuta s\u0103 \u00een\u021belegi detaliile.<\/li>\n<li>Ad\u0103ugarea unei anot\u0103ri modificabile \u00een chart va face sistemul mai flexibil. Acest lucru va permite desf\u0103\u0219urarea aplica\u021biei corect, f\u0103r\u0103 downtime.<\/li>\n<\/ul>\n<p>\nIdeea din categoria \u201epacea \u00een \u00eentreaga lume\u201d, care func\u021bioneaz\u0103 \u00een toate domeniile vie\u021bii: cite\u0219te instruc\u021biunile \u00eenainte de utilizare, nu dup\u0103. Doar av\u00e2nd informa\u021bii complete, po\u021bi construi sisteme fiabile \u0219i face utilizatorii ferici\u021bi.<\/p>\n<p><strong>Alte linkuri pe tema:<\/strong><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/453734\/\">Introducere \u00een <i>Helm<\/i> 3<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/\">Site-ul oficial Helm<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\">Repository-ul Helm pe GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/425343\/\">25 de instrumente utile Kubernetes: desf\u0103\u0219urare \u0219i gestionare<\/a><\/noindex><\/li>\n<\/ol>\n<p>\nAceast\u0103 prezentare a avut loc pentru prima dat\u0103 la <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> de la Mail.ru Cloud Solutions. Vezi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ\">video<\/a><\/noindex> alte prezent\u0103ri \u0219i aboneaz\u0103-te la anun\u021burile evenimentelor \u00een Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">\u00cen jurul Kubernetes \u00een Mail.ru Group<\/a><\/noindex>.<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Structura Helm \u0219i capcanele sale | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/70954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=70954"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/70954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/70955"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=70954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=70954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=70954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}