{"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\/it\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","title":{"rendered":"Dispositivo Helm e le sue insidie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" 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\">Concetto di trasporto Typhon, Anton Swanepoel<\/a><\/noindex><\/p>\n<p>Mi chiamo Dmitrij Sugrobov, sono uno sviluppatore presso \u00abLeroy Merlin\u00bb. In questo articolo spiegher\u00f2 a cosa serve Helm, come semplifica il lavoro con Kubernetes, cosa \u00e8 cambiato nella terza versione e come utilizzarlo per aggiornare le applicazioni in produzione senza interruzioni.<\/p>\n<p>Questa \u00e8 una sintesi ispirata a un intervento in conferenza <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> eliminando file non necessari dai tuoi set di backup <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\">Mail.ru Cloud Solutions<\/a><\/noindex> \u2014 se non vuoi leggere, guarda il 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=\"Guarda il 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>Perch\u00e9 utilizziamo Kubernetes in produzione<\/h2>\n<p>\n\u00abLeroy Merlin\u00bb \u00e8 leader nel mercato del fai-da-te in Russia e in Europa. Nella nostra azienda ci sono pi\u00f9 di cento sviluppatori, 33.000 dipendenti interni e un enorme numero di persone che visitano i negozi e il sito web. Per rendere tutti loro felici, abbiamo deciso di aderire a approcci standard del settore. Sviluppiamo nuove applicazioni utilizzando un'architettura a microservizi; per isolare gli ambienti e garantire una consegna corretta utilizziamo container; e per l'orchestrazione utilizziamo Kubernetes. Il costo di utilizzo degli orchestratori sta rapidamente diminuendo: aumenta il numero di ingegneri che conoscono questa tecnologia e stanno emergendo provider che offrono Kubernetes come servizio.<\/p>\n<p>Tutto ci\u00f2 che fa Kubernetes, ovviamente, pu\u00f2 essere fatto in altri modi, ad esempio, usando un Jenkins con script e docker-compose, ma perch\u00e9 complicarsi la vita, se c'\u00e8 una soluzione pronta e affidabile? Ecco perch\u00e9 ci siamo orientati verso Kubernetes e lo utilizziamo gi\u00e0 da un anno in produzione. Attualmente abbiamo ventiquattro cluster Kubernetes, il pi\u00f9 vecchio dei quali ha pi\u00f9 di un anno e contiene circa duecento pod.<\/p>\n<h2>La maledizione del gran numero di file YAML in Kubernetes<\/h2>\n<p>\nPer avviare un microservizio in Kubernetes, creeremo almeno cinque file YAML: per Deployment, Service, Ingress, ConfigMap, Secrets \u2014 e li invieremo al cluster. Per la successiva applicazione scriveremo lo stesso pacchetto di file YAML, per la terza \u2014 un altro e cos\u00ec via. Moltiplichiamo il numero di documenti per il numero di ambienti e gi\u00e0 otteniamo centinaia di file, senza contare gli ambienti dinamici.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/c46c3f5ae49cbefa4851cbb388bfd051.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAdam Reese, core maintainer di Helm, ha introdotto il concetto di \"<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/cZ1S2Gp47ng?t=323\">Ciclo di sviluppo in Kubernetes<\/a><\/noindex>che appare cos\u00ec:<\/p>\n<ol>\n<li>Copy YAML \u2014 copiare il file YAML.<\/li>\n<li>Paste YAML \u2014 incollarlo.<\/li>\n<li>Fix Indents \u2014 sistemare gli spazi.<\/li>\n<li>Repeat \u2014 ripetere di nuovo.<\/li>\n<\/ol>\n<p>\nLa variante \u00e8 funzionante, ma comporta molte copie di file YAML. Per modificare questo ciclo, \u00e8 stato ideato Helm.<\/p>\n<h3>Cos'\u00e8 Helm<\/h3>\n<p>\nInnanzitutto, Helm \u00e8<strong> gestore di pacchetti<\/strong>, che aiuta a trovare e installare i programmi necessari. Ad esempio, per installare MongoDB non \u00e8 necessario andare sul sito ufficiale e scaricare i binari, basta eseguire il comando <code>helm install stable\/mongodb<\/code>.<\/p>\n<p>In secondo luogo, Helm \u00e8 <strong>un templater<\/strong>, che aiuta a parametrizzare i file. Torniamo alla situazione con i file YAML in Kubernetes. \u00c8 pi\u00f9 facile scrivere lo stesso file YAML, aggiungere alcuni segnaposto nei quali Helm inserir\u00e0 i valori. Quindi, invece di un grande insieme di file YAML, avremo un insieme di template, nei quali verranno inseriti i valori necessari al momento giusto.<\/p>\n<p>In terzo luogo, Helm \u00e8 <strong>un maestro del deployment<\/strong>. Con esso \u00e8 possibile installare, ripristinare e aggiornare le applicazioni. Cerchiamo di capire come fare.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/8b517dbcf503ced229569fe3726418c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Come usare Helm per il deployment delle proprie applicazioni<\/h3>\n<p>\nInstalliamo il client Helm sul computer, seguendo il <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/install\/\">guida<\/a><\/noindex>. Poi creeremo un insieme di file YAML. Invece di specificare valori concreti, lasceremo dei segnaposto, che in futuro Helm riempir\u00e0 con le informazioni. Questo insieme di file \u00e8 chiamato Helm chart. Pu\u00f2 essere inviato al client della console Helm in tre modi:<\/p>\n<ul>\n<li>specificare una cartella con i template;<\/li>\n<li>impacchettarlo in un archivio .tar e fare riferimento a esso;<\/li>\n<li>mettere il template in un repository remoto e aggiungere un link al repository nel client Helm.<\/li>\n<\/ul>\n<p>\nServe inoltre un file con i valori \u2014 values.yaml. I dati da l\u00ec verranno inseriti nel template. Creiamolo anche.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/c0fe24cc8186640147f95ce201794d96.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNella seconda versione di Helm c'\u00e8 un'applicazione server aggiuntiva \u2014 Tiller. Essa risiede all'esterno di Kubernetes e attende richieste dal client Helm, e quando viene chiamata, inserisce i valori necessari nel template e lo invia a Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/6b821a0bb4680829d5ce9982d2bb4c55.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHelm 3 \u00e8 pi\u00f9 semplice: invece di elaborare i template sul server, le informazioni vengono ora elaborate interamente lato client di Helm e inviate direttamente all'API di Kubernetes. Questa semplificazione aumenta la sicurezza del cluster e facilita il processo di deployment.<\/p>\n<p><strong>Come funziona tutto questo<\/strong><\/p>\n<p>Eseguiamo il comando <code>helm install<\/code>. Indicheremo il nome del rilascio dell'applicazione, daremo il percorso fino a values.yaml. Alla fine indicheremo il repository in cui si trova il chart e il nome del chart. Nell'esempio, questi sono 'lmru' e 'bestchart' rispettivamente.<\/p>\n<pre><code class=\"plaintext\">helm install --name bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p>\nL'esecuzione del comando \u00e8 possibile solo una volta; per eseguire di nuovo bisogna usare <code>install<\/code> devi usare <code>. Per ulteriori informazioni su come utilizzare il flag<\/code>con un'opzione aggiuntiva <code>. Per ulteriori informazioni su come utilizzare il flag<\/code> --install <code>--install<\/code>. Al primo avvio, Helm invier\u00e0 un comando per installare il rilascio e successivamente lo aggiorner\u00e0.<\/p>\n<pre><code class=\"plaintext\">helm upgrade --install bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p><\/p>\n<h2>Insidie del deploy di nuove versioni dell'applicazione con Helm<\/h2>\n<p>\n<i>In questo punto della storia, gioco con il pubblico in \"Chi vuol essere milionario?\", e stiamo scoprendo come costringere Helm ad aggiornare la versione dell'applicazione. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/w1PhTe9gnOI?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ&amp;t=778\"><i>Guarda il video<\/i><\/a><\/noindex>.<\/p>\n<p>Quando studiavo il funzionamento di Helm, mi ha sorpreso un comportamento strano quando tentavo di aggiornare le versioni delle applicazioni in esecuzione. Ho aggiornato il codice dell'applicazione, caricato una nuova immagine nel registro Docker, inviato il comando di deploy \u2013 e non \u00e8 successo nulla. Di seguito alcuni modi non molto efficaci per aggiornare le applicazioni. Esaminando ciascuno di essi pi\u00f9 in dettaglio, cominci a comprendere il funzionamento interno dello strumento e le ragioni di tale comportamento non intuitivo.<\/p>\n<p><strong>Modo 1. Non cambiare le informazioni dall'ultimo avvio<\/strong><\/p>\n<p>Come dice <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">sito ufficiale<\/a><\/noindex> Helm, \"I chart di Kubernetes possono essere grandi e complessi, quindi Helm cerca di non toccare nulla senza motivo\". Pertanto, se aggiorni l'immagine dell'applicazione all'ultima versione nel registro Docker e esegui il comando <code>helm upgrade<\/code>, non succeder\u00e0 nulla. Helm penser\u00e0 che non sia cambiato nulla e non sar\u00e0 necessario inviare a Kubernetes il comando per aggiornare l'applicazione.<\/p>\n<blockquote><p>Qui e oltre, il tag latest \u00e8 mostrato esclusivamente a scopo esemplificativo. Specificando questo tag, Kubernetes scaricher\u00e0 ogni volta l'immagine dal registro Docker, indipendentemente dal parametro imagePullPolicy. L'uso di latest in produzione \u00e8 sconsigliato e causa effetti collaterali.<\/p><\/blockquote>\n<p>\n<strong>Modo 2. Aggiornare LABEL nell'immagine<\/strong><\/p>\n<p>Come scritto nello stesso <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">documentazione<\/a><\/noindex>, \"Helm aggiorner\u00e0 l'applicazione solo se \u00e8 cambiata dall'ultimo rilascio\". Un'opzione logica per questo sembrerebbe aggiornare il tag LABEL nell'immagine Docker stessa. Tuttavia, Helm non guarda nelle immagini delle applicazioni e non \u00e8 a conoscenza di eventuali modifiche in esse. Pertanto, aggiornando i tag nell'immagine, Helm non ne verr\u00e0 a conoscenza e il comando di aggiornamento dell'applicazione in Kubernetes non verr\u00e0 emesso.<\/p>\n<p><strong>Modo 3. Utilizzare una chiave <code>--force<\/code><\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/4888cddfb7698b7044ab31b6f6070063.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRimandiamo ai manuali e cerchiamo la chiave giusta. La chiave che sembra avere pi\u00f9 senso \u00e8 <code>--force<\/code>. Nonostante il nome eloquente, il comportamento \u00e8 diverso da quello previsto. Invece di forzare l'aggiornamento dell'applicazione, il suo reale scopo \u00e8 il ripristino di una release in stato FAILED. Se non si utilizza questa chiave, \u00e8 necessario eseguire i comandi in sequenza. <code>helm delete &amp;&amp; helm install --replace<\/code>. Invece, si propone di utilizzare la chiave <code>--force<\/code>, che automatizza l'esecuzione sequenziale di questi comandi. Maggiori informazioni in questo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/pull\/3597\">pull request.<\/a><\/noindex>. Per dire a Helm di aggiornare comunque la versione dell'applicazione, sfortunatamente, questa chiave non funzioner\u00e0.<\/p>\n<p><strong>Metodo 4. Modificare direttamente le etichette in Kubernetes.<\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/0a35e7aaa7479685f07dd5b935c95eb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAggiornare direttamente l'etichetta nel cluster utilizzando il comando <code>kubectl edit<\/code> \u00e8 una cattiva idea. Questa azione porter\u00e0 a una incongruenza delle informazioni tra l'applicazione in esecuzione e ci\u00f2 che \u00e8 stato inizialmente inviato per il deployment. Il comportamento di Helm durante il deployment in questo caso differisce dalla sua versione: Helm 2 non far\u00e0 nulla, mentre Helm 3 deployer\u00e0 una nuova versione dell'applicazione. Per comprendere la ragione, \u00e8 necessario capire come funziona Helm.<\/p>\n<h3>Come \u00e8 strutturato Helm.<\/h3>\n<p>\nPer determinare se l'applicazione \u00e8 cambiata dall'ultima release, Helm pu\u00f2 avvalersi di:<\/p>\n<ul>\n<li>un'applicazione in esecuzione in Kubernetes;<\/li>\n<li>nuovo values.yaml e chart attuale;<\/li>\n<li>informazioni interne di Helm sulle release.<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">Per i pi\u00f9 curiosi: dove Helm archivia le informazioni interne sulle release?<\/b>Eseguendo il comando <code>helm history<\/code>, otteniamo tutte le informazioni sulle versioni installate tramite Helm.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/0bf3afeb9c4947220474af648a1fa1ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCi sono inoltre dettagli sulle template e i valori inviati. Possiamo richiederli:<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/858560c0f4adf7375060cec339df7574.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNella seconda versione di Helm, queste informazioni si trovano nello stesso namespace in cui \u00e8 in esecuzione Tiller (di default \u2014 kube-system), in un ConfigMap contrassegnato dall\u2019etichetta \u00abOWNER=TILLER\u00bb:<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/ba665a079ccddeb4ca7049822c42a498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCon l'arrivo della terza versione di Helm, le informazioni sono state trasferite nei segreti, nel medesimo namespace in cui \u00e8 in esecuzione l'applicazione. Questo ha reso possibile eseguire contemporaneamente pi\u00f9 applicazioni in diversi namespace con lo stesso nome di release. Nella seconda versione, ci\u00f2 era un forte mal di testa, poich\u00e9 i namespace erano isolati, ma potevano influenzarsi reciprocamente.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/b9b82b7c86320a0e3642e4265a1f0241.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nIl secondo Helm, quando cerca di capire se \u00e8 necessario un aggiornamento, utilizza solo due fonti di informazione: ci\u00f2 che gli \u00e8 stato fornito ora e le informazioni interne sulle release, che si trovano nel ConfigMap.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/0550ba5f6ce7be1e7f666dfc65e639ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIl terzo Helm utilizza una strategia di merge a tre vie: oltre alle informazioni gi\u00e0 disponibili, tiene conto anche dell'applicazione che \u00e8 attualmente in esecuzione su Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Dispositivo Helm e le sue insidie\" src=\"\/wp-content\/uploads\/2020\/02\/252085adb83e097e01b4a0655706ede5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPer questo motivo, la vecchia versione di Helm non far\u00e0 nulla, poich\u00e9 non considera le informazioni sull'applicazione nel cluster, mentre Helm 3 ricever\u00e0 le modifiche e invier\u00e0 una nuova applicazione per il deployment.<\/p>\n<p><strong>\u0421\u043f\u043e\u0441\u043e\u0431 5. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 &#8212;recreate-pods<\/strong><\/p>\n<p>Con la chiave <code>--recreate-pods<\/code> \u00e8 possibile ottenere ci\u00f2 che si voleva inizialmente raggiungere con la chiave <code>--force<\/code>. I contenitori verranno riavviati e, secondo la politica imagePullPolicy: Always per il tag latest (come indicato nella nota sopra), Kubernetes scaricher\u00e0 e avvier\u00e0 una nuova versione dell'immagine. Questo avverr\u00e0 in modo non ottimale: ignorando il StrategyType del deployment, spegner\u00e0 brutalmente tutte le vecchie istanze dell'applicazione e proceder\u00e0 ad avviare quelle nuove. Durante il riavvio, il sistema non sar\u00e0 operativo e gli utenti subiranno disagi.<\/p>\n<p>Nel Kubernetes stesso, un problema simile \u00e8 esistito a lungo. E cos\u00ec, dopo 4 anni dall'apertura <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/13488\">Problema<\/a><\/noindex>, il problema \u00e8 stato risolto e a partire dalla versione 1.15 di Kubernetes \u00e8 disponibile la possibilit\u00e0 di riavvio rolling dei pod.<\/p>\n<p>Helm invece spegne semplicemente tutte le applicazioni e avvia nuovi contenitori accanto a quelle esistenti. In produzione non \u00e8 possibile farlo, per non provocare inattivit\u00e0 dell'applicazione. Questo \u00e8 qualcosa che va fatto solo per esigenze di sviluppo, e pu\u00f2 essere eseguito solo in ambienti di staging.<\/p>\n<h2>Come aggiornare la versione dell'applicazione con Helm?<\/h2>\n<p>\nModificheremo i valori inviati a Helm. Di solito, questi valori sono quelli che sostituiscono il tag dell'immagine. Nel caso di latest, frequentemente utilizzato per ambienti non produttivi, l'informazione modificabile consiste in un'annotazione, che per Kubernetes \u00e8 inutile, ma per Helm sar\u00e0 un segnale della necessit\u00e0 di aggiornare l'applicazione. Ecco alcune varianti per compilare il valore dell'annotazione:<\/p>\n<ol>\n<li><strong>Valore casuale<\/strong> utilizzando la funzione standard \u2014 <code>{{ randAlphaNum 6 }}<\/code>. <br \/>\nC'\u00e8 un dettaglio: dopo ogni deployment utilizzando un chart con tale variabile, il valore dell'annotazione sar\u00e0 unico, e Helm penser\u00e0 che ci siano modifiche. Cos\u00ec facendo, riavvieremo sempre l'applicazione, anche se non abbiamo cambiato la sua versione. Questo non \u00e8 critico, poich\u00e9 non ci sar\u00e0 inattivit\u00e0, ma \u00e8 comunque fastidioso.<\/li>\n<li>Inserire l'attuale <strong>data e ora<\/strong> \u2014 <code>{{ .Release.Date }}<\/code>. <br \/>\nQuesta opzione \u00e8 simile al valore casuale con una variabile sempre unica.<\/li>\n<li>Un modo pi\u00f9 corretto \u00e8 utilizzare <strong>somme di controllo<\/strong>. Questo \u00e8 l'immagine SHA o SHA dell'ultimo commit in git \u2014 <code>{{ .Values.sha }}<\/code>. <br \/>\nDevono essere calcolate e inviate al client Helm sul lato chiamante, ad esempio in Jenkins. Se l'applicazione cambia, anche la somma di controllo cambier\u00e0. Pertanto, Helm aggiorner\u00e0 l'applicazione solo quando necessario.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Riassumiamo i nostri tentativi<\/h2>\n<p><\/p>\n<ul>\n<li>Helm apporta modifiche nel modo meno invasivo possibile, quindi qualsiasi cambiamento a livello di immagine dell'applicazione nel Docker Registry non porter\u00e0 a un aggiornamento: dopo l'esecuzione del comando, non succede nulla.<\/li>\n<li>Chiave <code>--force<\/code> viene utilizzato per ripristinare le release problematiche e non \u00e8 collegato a un aggiornamento forzato.<\/li>\n<li>Chiave <code>--recreate-pods<\/code> forzer\u00e0 l'aggiornamento delle applicazioni, ma lo far\u00e0 in modo distruttivo: spegner\u00e0 bruscamente tutti i container. Questo dannegger\u00e0 gli utenti; non \u00e8 consigliabile farlo in produzione.<\/li>\n<li>Non bisogna apportare modifiche direttamente al cluster Kubernetes con il comando <code>kubectl edit<\/code> : comprometteremmo la consistenza e il comportamento varier\u00e0 a seconda della versione di Helm.<\/li>\n<li>Con l'uscita della nuova versione di Helm sono emersi molti dettagli. I problemi nel repository di Helm sono descritti in modo chiaro e aiuteranno a comprendere i dettagli.<\/li>\n<li>Aggiungere un'annotazione modificabile nel chart lo render\u00e0 pi\u00f9 flessibile. Questo consentir\u00e0 di implementare l'applicazione correttamente, senza tempi di inattivit\u00e0.<\/li>\n<\/ul>\n<p>\nUn pensiero del tipo 'pace nel mondo' che funziona in tutti gli ambiti della vita: leggi le istruzioni prima dell'uso, non dopo. Solo possedendo tutte le informazioni, \u00e8 possibile costruire sistemi affidabili e rendere felici gli utenti.<\/p>\n<p><strong>Altri collegamenti sull'argomento:<\/strong><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/453734\/\">Introduzione a <i>Helm<\/i> 3<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/\">Sito ufficiale di Helm<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\">Repository di Helm su GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/425343\/\">25 strumenti utili per Kubernetes: distribuzione e gestione<\/a><\/noindex><\/li>\n<\/ol>\n<p>\nQuesta presentazione \u00e8 stata pronunciata per la prima volta a <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> by Mail.ru Cloud Solutions. Guarda <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ\">video<\/a><\/noindex> altre presentazioni e iscriviti agli annunci di eventi su Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Attorno a Kubernetes in Mail.ru Group<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <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.1.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\/it\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Struttura di Helm e le sue insidie | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/70954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=70954"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/70954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/70955"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=70954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=70954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=70954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}