{"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\/sv\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","title":{"rendered":"Helm-struktur och dess fallgropar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" 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\">Typhon frakttransportkoncept, Anton Swanepoel<\/a><\/noindex><\/p>\n<p>Jag heter Dmitrij Sugrobov, jag \u00e4r utvecklare p\u00e5 \"Leroy Merlin\". I artikeln kommer jag att ber\u00e4tta varf\u00f6r Helm beh\u00f6vs, hur det f\u00f6renklar arbetet med Kubernetes, vad som har f\u00f6r\u00e4ndrats i den tredje versionen och hur man uppdaterar applikationer i produktion utan driftstopp.<\/p>\n<p>Detta \u00e4r en sammanfattning baserad p\u00e5 en presentation p\u00e5 konferensen <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> by <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\">Mail.ru Cloud Solutions<\/a><\/noindex> \u2014 om du inte vill l\u00e4sa, titta p\u00e5 videon.<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=\"Spela 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>Varf\u00f6r vi anv\u00e4nder Kubernetes i produktion<\/h2>\n<p>\n\"Leroy Merlin\" \u00e4r en ledare p\u00e5 DIY-retailmarknaden i Ryssland och Europa. I v\u00e5rt f\u00f6retag arbetar \u00f6ver hundra utvecklare, 33 000 interna anst\u00e4llda och ett stort antal m\u00e4nniskor bes\u00f6ker v\u00e5ra varuhus och webbplats. F\u00f6r att g\u00f6ra alla glada beslutade vi att f\u00f6lja standardmetoder inom branschen. Vi utvecklar nya applikationer med mikrotj\u00e4nstarkitektur; f\u00f6r att isolera milj\u00f6er och s\u00e4kerst\u00e4lla korrekt leverans anv\u00e4nder vi containrar; och f\u00f6r orkestrering anv\u00e4nder vi Kubernetes. Kostnaden f\u00f6r att anv\u00e4nda orkestratorer blir snabbt billigare: antalet ingenj\u00f6rer som beh\u00e4rskar tekniken \u00f6kar p\u00e5 marknaden och leverant\u00f6rer erbjuder Kubernetes som en tj\u00e4nst.<\/p>\n<p>Allt som Kubernetes g\u00f6r kan sj\u00e4lvklart g\u00f6ras p\u00e5 andra s\u00e4tt, till exempel genom att kladda med skript i n\u00e5gon Jenkins och docker-compose, men varf\u00f6r komplicera livet n\u00e4r det finns en f\u00e4rdig och p\u00e5litlig l\u00f6sning? D\u00e4rf\u00f6r har vi valt Kubernetes och har anv\u00e4nt det i produktion i ett \u00e5r nu. Nu har vi tjugofyra Kubernetes-kluster, det \u00e4ldsta av dem \u00e4r \u00f6ver ett \u00e5r gammalt och har cirka tv\u00e5hundra pods.<\/p>\n<h2>F\u00f6rbannelsen med ett stort antal YAML-filer i Kubernetes<\/h2>\n<p>\nF\u00f6r att starta en mikrotj\u00e4nst i Kubernetes kommer vi att skapa minst fem YAML-filer: f\u00f6r Deployment, Service, Ingress, ConfigMap, Secrets \u2014 och skicka dem till klustret. F\u00f6r n\u00e4sta applikation skriver vi samma upps\u00e4ttning YAML-filer, med den tredje \u2014 ytterligare en och s\u00e5 vidare. Multiplicera antalet dokument med antalet milj\u00f6er, s\u00e5 f\u00e5r vi hundratals filer, och detta tar inte ens h\u00e4nsyn till dynamiska milj\u00f6er.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/c46c3f5ae49cbefa4851cbb388bfd051.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAdam Reese, huvudansvarig f\u00f6r Helm, introducerade begreppet \"<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/cZ1S2Gp47ng?t=323\">Utvecklingscykeln i Kubernetes<\/a><\/noindex>\" som ser ut s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>Kopiera YAML \u2014 kopiera YAML-filen.<\/li>\n<li>Klistra in YAML \u2014 klistra in den.<\/li>\n<li>Fixera indrag \u2014 fixa indragen.<\/li>\n<li>Upprepa \u2014 upprepa igen.<\/li>\n<\/ol>\n<p>\nDetta alternativ fungerar, men man m\u00e5ste ofta kopiera YAML-filer flera g\u00e5nger. F\u00f6r att f\u00f6r\u00e4ndra denna cykel uppfanns Helm.<\/p>\n<h3>Vad \u00e4r Helm<\/h3>\n<p>\nF\u00f6rst och fr\u00e4mst \u00e4r Helm \u2014<strong> paketchef<\/strong>, som hj\u00e4lper till att hitta och installera n\u00f6dv\u00e4ndiga program. F\u00f6r att installera till exempel MongoDB m\u00e5ste man inte g\u00e5 till den officiella webbplatsen och ladda ner bin\u00e4rfiler, det r\u00e4cker att k\u00f6ra kommandot <code>helm install stable\/mongodb<\/code>.<\/p>\n<p>F\u00f6r det andra, Helm \u2014 <strong>en mallmotor<\/strong>, hj\u00e4lper till att parametrera filer. L\u00e5t oss \u00e5terg\u00e5 till situationen med YAML-filer i Kubernetes. Det \u00e4r enklare att skriva samma YAML-fil, l\u00e4gga till n\u00e5gra platsh\u00e5llare, d\u00e4r Helm s\u00e4tter in v\u00e4rden. Det betyder att ist\u00e4llet f\u00f6r en stor upps\u00e4ttning YAML-filer kommer det att finnas en upps\u00e4ttning mallar, d\u00e4r de n\u00f6dv\u00e4ndiga v\u00e4rdena kommer att s\u00e4ttas in vid r\u00e4tt tidpunkt.<\/p>\n<p>F\u00f6r det tredje, Helm \u2014 <strong>m\u00e4stare vid distribution<\/strong>. Med hj\u00e4lp av det kan man installera, \u00e5terst\u00e4lla och uppdatera applikationer. L\u00e5t oss g\u00e5 igenom hur man g\u00f6r detta.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/8b517dbcf503ced229569fe3726418c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Hur man anv\u00e4nder Helm f\u00f6r att distribuera sina egna applikationer<\/h3>\n<p>\nVi installerar Helm-klienten p\u00e5 datorn, enligt den officiella <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/install\/\">instruktionerna<\/a><\/noindex>. Sedan skapar vi en upps\u00e4ttning YAML-filer. Ist\u00e4llet f\u00f6r att ange specifika v\u00e4rden l\u00e4mnar vi platsh\u00e5llare som Helm senare kommer att fylla med information. En upps\u00e4ttning s\u00e5dana filer kallas f\u00f6r en Helm-diagram. Den kan skickas till Helm-konsolklienten p\u00e5 tre s\u00e4tt:<\/p>\n<ul>\n<li>ange mappen med mallar;<\/li>\n<li>paketera den i en .tar-arkiv och ange den;<\/li>\n<li>placera mallen i ett fj\u00e4rrrepo och l\u00e4gga till en l\u00e4nk till repositoriet i Helm-klienten.<\/li>\n<\/ul>\n<p>\n\u00c4ven en fil med v\u00e4rden beh\u00f6vs \u2014 values.yaml. Data d\u00e4rifr\u00e5n kommer att s\u00e4ttas in i mallen. L\u00e5t oss skapa den ocks\u00e5.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/c0fe24cc8186640147f95ce201794d96.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI den andra versionen av Helm finns det en till\u00e4ggstj\u00e4nst \u2014 Tiller. Den finns utanf\u00f6r Kubernetes och v\u00e4ntar p\u00e5 f\u00f6rfr\u00e5gningar fr\u00e5n Helm-klienten, och n\u00e4r den anropas s\u00e4tter den in n\u00f6dv\u00e4ndiga v\u00e4rden i mallen och skickar dem till Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/6b821a0bb4680829d5ce9982d2bb4c55.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHelm 3 \u00e4r enklare: ist\u00e4llet f\u00f6r att bearbeta mallarna p\u00e5 servern, behandlas informationen nu helt och h\u00e5llet p\u00e5 sidan av Helm-klienten och skickas direkt till Kubernetes API. Denna f\u00f6renkling f\u00f6rb\u00e4ttrar s\u00e4kerheten f\u00f6r klustret och f\u00f6renklar distributionsschemat.<\/p>\n<p><strong>Hur detta fungerar<\/strong><\/p>\n<p>K\u00f6r kommandot <code>helm install<\/code>. Ange namnet p\u00e5 applikationens release, ge s\u00f6kv\u00e4gen till values.yaml. I slutet anger vi repo d\u00e4r diagrammet ligger och namnet p\u00e5 diagrammet. I exemplet \u00e4r detta \u00ablmru\u00bb och \u00abbestchart\u00bb respektive.<\/p>\n<pre><code class=\"plaintext\">helm install --name bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p>\nUtf\u00f6randet av kommandot \u00e4r m\u00f6jligt endast en g\u00e5ng, vid upprepning av kommandot ist\u00e4llet f\u00f6r <code>install<\/code> m\u00e5ste du anv\u00e4nda <code>upgrade<\/code>. F\u00f6r enkelhetens skull kan man ist\u00e4llet f\u00f6r tv\u00e5 kommandon k\u00f6ra kommandot <code>upgrade<\/code> med en extra nyckel <code>--install<\/code>. Vid f\u00f6rsta k\u00f6rningen skickar Helm en kommando f\u00f6r att installera releasen, och kommer att uppdatera den i framtiden.<\/p>\n<pre><code class=\"plaintext\">helm upgrade --install bestapp --values values.yaml lmru\/bestchart\n<\/code><\/pre>\n<p><\/p>\n<h2>Fallgropar vid deployment av nya versioner av applikationen med Helm<\/h2>\n<p>\n<i>Vid den h\u00e4r punkt i ber\u00e4ttelsen spelar jag med publiken i \"Vem vill bli miljon\u00e4r?\", och vi tar reda p\u00e5 hur man f\u00e5r Helm att uppdatera applikationens version. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/w1PhTe9gnOI?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ&amp;t=778\"><i>Se videon<\/i><\/a><\/noindex>.<\/p>\n<p>N\u00e4r jag studerade hur Helm fungerar, blev jag f\u00f6rv\u00e5nad \u00f6ver det m\u00e4rkliga beteendet vid f\u00f6rs\u00f6k att uppdatera versioner av k\u00f6rda applikationer. Applikationens kod uppdaterades, en ny bild laddades upp i Docker-registret, jag skickade ett kommando f\u00f6r deployment \u2013 och ingenting h\u00e4nde. H\u00e4r \u00e4r n\u00e5gra inte helt lyckade s\u00e4tt att uppdatera applikationer. Genom att studera varje metod mer ing\u00e5ende b\u00f6rjar man f\u00f6rst\u00e5 verktygets inre funktion och orsakerna till detta inte s\u00e5 uppenbara beteende.<\/p>\n<p><strong>Metod 1. \u00c4ndra inte informationen sedan senaste k\u00f6rningen<\/strong><\/p>\n<p>Som det st\u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">den officiella webbplatsen<\/a><\/noindex> Helm, \"Kubernetes charts kan vara stora och komplexa, s\u00e5 Helm f\u00f6rs\u00f6ker helst att inte r\u00f6ra saker f\u00f6r mycket\". D\u00e4rf\u00f6r, om man uppdaterar latest-versionen av applikationens bild i Docker-registret och utf\u00f6r kommandot <code>helm upgrade<\/code>, s\u00e5 kommer ingenting att h\u00e4nda. Helm kommer att tro att ingenting har f\u00f6r\u00e4ndrats och beh\u00f6ver ingen kommando f\u00f6r att uppdatera applikationen i Kubernetes.<\/p>\n<blockquote><p>H\u00e4r och fram\u00e5t visas taggen latest endast som ett exempel. Vid angivande av denna tagg kommer Kubernetes att ladda ner bilden fr\u00e5n Docker-registret varje g\u00e5ng, oavsett imagePullPolicy. Anv\u00e4ndning av latest i produktion \u00e4r inte rekommenderat och ger biverkningar.<\/p><\/blockquote>\n<p>\n<strong>Metod 2. Uppdatera LABEL i bilden<\/strong><\/p>\n<p>Som det st\u00e5r i samma <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/intro\/using_helm\/#helm-upgrade-and-helm-rollback-upgrading-a-release-and-recovering-on-failure\">dokumentationen<\/a><\/noindex>, \"Helm kommer att uppdatera applikationen endast om den har f\u00f6r\u00e4ndrats sedan senaste releasen\". En logisk \u00e5tg\u00e4rd f\u00f6r detta skulle vara att uppdatera LABEL-taggen i sj\u00e4lva Docker-bilden. Men Helm kollar inte i applikationernas bilder och har ingen aning om n\u00e5gra f\u00f6r\u00e4ndringar i dem. D\u00e4rf\u00f6r, vid uppdatering av etiketter i bilden, f\u00e5r Helm inte veta om dem och kommandot f\u00f6r att uppdatera applikationen i Kubernetes kommer inte att skickas.<\/p>\n<p><strong>Metod 3. Anv\u00e4nd nyckeln <code>--force<\/code><\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/4888cddfb7698b7044ab31b6f6070063.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nL\u00e5t oss kolla manualerna och leta efter r\u00e4tt nyckel. Den nyckel som passar b\u00e4st i betydelse <code>--force<\/code>. Trots det talande namnet, skiljer sig beteendet fr\u00e5n f\u00f6rv\u00e4ntningarna. Ist\u00e4llet f\u00f6r att tvinga fram en uppdatering av appen, \u00e4r dess verkliga syfte att \u00e5terst\u00e4lla en release som \u00e4r i status FAILED. Om denna flagga inte anv\u00e4nds, m\u00e5ste kommandona utf\u00f6ras sekventiellt. <code>helm delete &amp;&amp; helm install --replace<\/code>. Ist\u00e4llet f\u00f6resl\u00e5s det att anv\u00e4nda flaggan <code>--force<\/code>, som automatiserar sekventiell k\u00f6rning av dessa kommandon. Mer information finns i denna <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/pull\/3597\">pull request.<\/a><\/noindex>. F\u00f6r att f\u00e5 Helm att faktiskt uppdatera appversionen, kommer tyv\u00e4rr denna flagga inte att fungera.<\/p>\n<p><strong>Metod 4. \u00c4ndra labels direkt i Kubernetes.<\/strong><\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/0a35e7aaa7479685f07dd5b935c95eb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nUppdatering av label direkt i klustret med kommandot <code>kubectl edit.<\/code> \u2014 \u00e4r en d\u00e5lig id\u00e9. Denna \u00e5tg\u00e4rd kommer att leda till inkonsekvens i informationen mellan den k\u00f6rande appen och vad som ursprungligen skickades f\u00f6r distribution. Helm's beteende vid distribution i detta fall skiljer sig fr\u00e5n dess version: Helm 2 kommer inte att g\u00f6ra n\u00e5got, medan Helm 3 kommer att distribuera en ny version av appen. F\u00f6r att f\u00f6rst\u00e5 orsaken, beh\u00f6ver man f\u00f6rst\u00e5 hur Helm fungerar.<\/p>\n<h3>Hur Helm fungerar.<\/h3>\n<p>\nF\u00f6r att avg\u00f6ra om appen har \u00e4ndrats sedan den senaste releasen, kan Helm anv\u00e4nda sig av:<\/p>\n<ul>\n<li>den k\u00f6rande appen i Kubernetes;<\/li>\n<li>en ny values.yaml och aktuell chart;<\/li>\n<li>intern information om releases fr\u00e5n Helm.<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">F\u00f6r de mest nyfikna: var lagrar Helm intern information om releases?<\/b>Genom att k\u00f6ra kommandot <code>helm history,<\/code>f\u00e5r vi all information om versioner installerade med hj\u00e4lp av Helm.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/0bf3afeb9c4947220474af648a1fa1ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet finns ocks\u00e5 detaljerad information om de skickade mallarna och v\u00e4rdena. Vi kan beg\u00e4ra det:<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/858560c0f4adf7375060cec339df7574.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI den andra versionen av Helm ligger denna information i samma namespace d\u00e4r Tiller k\u00f6r, vilket som standard \u00e4r kube-system, i en ConfigMap m\u00e4rkt med labeln \"OWNER=TILLER\":<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/ba665a079ccddeb4ca7049822c42a498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVid \u00f6verg\u00e5ngen till den tredje versionen av Helm flyttades informationen till hemligheter, i samma namespace d\u00e4r appen k\u00f6rs. Detta gjorde det m\u00f6jligt att k\u00f6ra flera appar samtidigt i olika namespaces med samma release-namn. I den andra versionen var detta en stor huvudv\u00e4rk, eftersom namespaces var isolerade men kunde p\u00e5verka varandra.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/b9b82b7c86320a0e3642e4265a1f0241.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAndra Helm, n\u00e4r den f\u00f6rs\u00f6ker f\u00f6rst\u00e5 om en uppdatering beh\u00f6vs, anv\u00e4nder endast tv\u00e5 informationsk\u00e4llor: det som gavs nu och den interna informationen om releases, som ligger i ConfigMap.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/0550ba5f6ce7be1e7f666dfc65e639ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDen tredje Helm anv\u00e4nder en trev\u00e4gsfusionsstrategi: ut\u00f6ver den information som beaktas, tar den ocks\u00e5 h\u00e4nsyn till applikationen som k\u00f6rs just nu i Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Helm-struktur och dess fallgropar\" src=\"\/wp-content\/uploads\/2020\/02\/252085adb83e097e01b4a0655706ede5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAv denna anledning kommer den gamla versionen av Helm inte att g\u00f6ra n\u00e5got, eftersom den inte beaktar informationen fr\u00e5n applikationen i klustret, medan Helm 3 kommer att ta emot \u00e4ndringar och skicka en ny applikation f\u00f6r distribution.<\/p>\n<p><strong>Metod 5. Anv\u00e4nd nyckel &#8212;recreate-pods<\/strong><\/p>\n<p>Med hj\u00e4lp av nyckeln <code>--recreate-pods<\/code> kan man uppn\u00e5 det som ursprungligen var t\u00e4nkt att uppn\u00e5s med nyckeln <code>--force<\/code>. Kontainrarna kommer att startas om och, enligt policyn imagePullPolicy: Always f\u00f6r taggen latest (angivet ovan), kommer Kubernetes att ladda ner och starta den nya versionen av bilden. Det kommer att g\u00f6ras p\u00e5 ett mindre optimalt s\u00e4tt: utan att ta h\u00e4nsyn till StrategyType f\u00f6r distributionen, kommer alla gamla instanser av applikationen pl\u00f6tsligt att st\u00e4ngas av och nya s\u00e4ttas ig\u00e5ng. Under omstarten kommer systemet att vara nere, vilket inneb\u00e4r att anv\u00e4ndarna kommer att drabbas.<\/p>\n<p>I Kubernetes har ett liknande problem ocks\u00e5 funnits under en l\u00e5ng tid. Och nu, fyra \u00e5r efter att det \u00f6ppnades <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/13488\">Issue<\/a><\/noindex>, har problemet \u00e5tg\u00e4rdats, och fr\u00e5n och med version 1.15 av Kubernetes finns det m\u00f6jlighet till rolling-restart av pods.<\/p>\n<p>Helm st\u00e4nger helt enkelt av alla applikationer och startar nya containrar bredvid dem. S\u00e5 h\u00e4r f\u00e5r man inte g\u00f6ra i produktion f\u00f6r att undvika driftstopp av applikationen. Detta beh\u00f6vs endast f\u00f6r utvecklingssyften och kan endast utf\u00f6ras i stage-milj\u00f6er.<\/p>\n<h2>Hur uppdaterar man en applikationsversion med hj\u00e4lp av Helm?<\/h2>\n<p>\nVi kommer att \u00e4ndra de v\u00e4rden som skickas till Helm. Som regel \u00e4r detta v\u00e4rden som ers\u00e4tter taggen f\u00f6r bilden. I fallet med latest, som ofta anv\u00e4nds f\u00f6r icke-produktiva milj\u00f6er, fungerar en annotation som den f\u00f6r\u00e4nderliga informationen, vilken \u00e4r v\u00e4rdel\u00f6s f\u00f6r Kubernetes men signalerar till Helm att applikationen beh\u00f6ver uppdateras. Alternativ f\u00f6r att fylla i v\u00e4rdet p\u00e5 annoteringen:<\/p>\n<ol>\n<li><strong>Slumptal<\/strong> med hj\u00e4lp av standardfunktionen \u2014 <code>{{ randAlphaNum 6 }}<\/code>. <br \/>\nDet finns en detalj: efter varje distribution med en chart med en s\u00e5dan variabel, kommer v\u00e4rdet av annoteringen att vara unikt, och Helm kommer att tro att det finns \u00e4ndringar. Det g\u00f6r att vi alltid kommer att starta om applikationen, \u00e4ven om vi inte har \u00e4ndrat dess version. Det \u00e4r inte kritiskt, eftersom det inte kommer att bli n\u00e5got driftstopp, men det \u00e4r \u00e4nd\u00e5 obehagligt.<\/li>\n<li>Infoga nuvarande <strong>datum och tid<\/strong> \u2014 <code>{{ .Release.Date }}<\/code>. <br \/>\nAlternativet liknar slumptalet med en st\u00e4ndigt unik variabel.<\/li>\n<li>Ett mer korrekt s\u00e4tt \u00e4r att anv\u00e4nda <strong>kontrollsummor<\/strong>. Det \u00e4r SHA av bilden eller SHA av den senaste commit i git \u2014 <code>{{ .Values.sha }}<\/code>. <br \/>\nDessa m\u00e5ste ber\u00e4knas och skickas till Helm-klienten p\u00e5 anropande sida, till exempel i Jenkins. Om applikationen har \u00e4ndrats, s\u00e5 \u00e4ndras \u00e4ven kontrollsumman. D\u00e4rf\u00f6r kommer Helm att uppdatera applikationen endast n\u00e4r det beh\u00f6vs.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Sammanfatta v\u00e5ra f\u00f6rs\u00f6k<\/h2>\n<p><\/p>\n<ul>\n<li>Helm g\u00f6r \u00e4ndringar p\u00e5 det minst invasiva s\u00e4ttet, s\u00e5 varje \u00e4ndring p\u00e5 niv\u00e5 av applikationsbild i Docker Registry kommer inte att leda till en uppdatering: efter att kommandot har k\u00f6rts kommer ingenting att h\u00e4nda.<\/li>\n<li>Nyckeln <code>--force<\/code> anv\u00e4nds f\u00f6r att \u00e5terst\u00e4lla problematiska releaser och har ingen koppling till tvingad uppdatering.<\/li>\n<li>Nyckeln <code>--recreate-pods<\/code> tvingar uppdateringar av applikationer, men g\u00f6r det p\u00e5 ett grymt s\u00e4tt: det st\u00e4nger abrupt av alla containrar. Anv\u00e4ndarna kommer att drabbas, s\u00e5 detta b\u00f6r undvikas i produktion.<\/li>\n<li>Direkt g\u00f6ra f\u00f6r\u00e4ndringar i Kubernetes-klustret med kommandot <code>kubectl edit.<\/code> b\u00f6r inte g\u00f6ras: vi skulle st\u00f6ra konsistensen, och beteendet kommer att variera beroende p\u00e5 versionen av Helm.<\/li>\n<li>Med den nya versionen av Helm har det dykt upp m\u00e5nga nyanser. Issues i Helm-f\u00f6rvaret \u00e4r beskrivna p\u00e5 ett begripligt spr\u00e5k, de kommer att hj\u00e4lpa till att f\u00f6rst\u00e5 detaljerna.<\/li>\n<li>Att l\u00e4gga till en \u00e4ndringsbar annotation i chartet g\u00f6r det mer flexibelt. Detta g\u00f6r att applikationen kan rullas ut korrekt utan driftstopp.<\/li>\n<\/ul>\n<p>\nEn tanke fr\u00e5n kategorin \"fred i hela v\u00e4rlden\", som fungerar i alla livets sf\u00e4rer: l\u00e4s instruktionen f\u00f6re anv\u00e4ndning, inte efter. Endast med fullst\u00e4ndig information kan man bygga p\u00e5litliga system och g\u00f6ra anv\u00e4ndarna n\u00f6jda.<\/p>\n<p><strong>Andra l\u00e4nkar i temat:<\/strong><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/453734\/\">Introduktion till <i>Helm<\/i> 3<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/\">Den officiella webbplatsen f\u00f6r Helm<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\">Helm-f\u00f6rvaret p\u00e5 GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/425343\/\">25 anv\u00e4ndbara Kubernetes-verktyg: utplacering och hantering<\/a><\/noindex><\/li>\n<\/ol>\n<p>\nDenna presentation h\u00f6rdes f\u00f6rst p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/at-kubernetes-conference\/\">@Kubernetes Conference<\/a><\/noindex> av Mail.ru Cloud Solutions. Se <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLQzTaxmOHjnv0tP_HDxsIvcuac2kkIJTQ\">video<\/a><\/noindex> andra f\u00f6rel\u00e4sningar och f\u00f6lj anm\u00e4lningarna till evenemang p\u00e5 Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Runt Kubernetes i Mail.ru Group<\/a><\/noindex>.<br \/>\n<br \/>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Helms struktur och fallgropar | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/ustrojstvo-helm-i-ego-podvodnye-kamni","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/70954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=70954"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/70954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/70955"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=70954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=70954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=70954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}