{"id":34735,"date":"2019-10-31T22:00:06","date_gmt":"2019-10-31T19:00:06","guid":{"rendered":"https:\/\/prohoster.info\/blog\/znakomstvo-s-helm-3\/"},"modified":"2019-10-31T22:00:06","modified_gmt":"2019-10-31T19:00:06","slug":"znakomstvo-s-helm-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/znakomstvo-s-helm-3","title":{"rendered":"Wprowadzenie do Helm 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Wprowadzenie do Helm 3\" src=\"\/wp-content\/uploads\/2019\/05\/6de0e2887ddcc802f1dd71c902325401.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i><b>Przyp. t\u0142um.<\/b>: 16 maja tego roku \u2014 wa\u017cna data w rozwoju mened\u017cera pakiet\u00f3w dla Kubernetes \u2014 Helm. Tego dnia zaprezentowano pierwszy alfabeta przysz\u0142ej du\u017cej wersji projektu \u2014 3.0. Jej wydanie przyniesie do Helma znacz\u0105ce i oczekiwane zmiany, na kt\u00f3re wiele os\u00f3b w spo\u0142eczno\u015bci Kubernetes pok\u0142ada wielkie nadzieje. Do grona tych os\u00f3b zaliczamy si\u0119 r\u00f3wnie\u017c my, poniewa\u017c aktywnie u\u017cywamy Helma do wdra\u017cania aplikacji: zintegrowali\u015bmy go z naszym narz\u0119dziem do realizacji CI\/CD. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> i od czasu do czasu wnosimy sw\u00f3j wk\u0142ad w rozw\u00f3j upstream. T\u0142umaczenie to \u0142\u0105czy 7 notatek z oficjalnego bloga Helma, kt\u00f3re s\u0105 zwi\u0105zane z pierwszym alfabeta wydaniem Helma 3 i opowiadaj\u0105 o historii projektu oraz g\u0142\u00f3wnych funkcjach Helma 3. Ich autorem jest Matt \u00abbacongobbler\u00bb Fisher, pracownik Microsoftu i jeden z kluczowych konserwator\u00f3w Helma.<\/i><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>15 pa\u017adziernika 2015 roku powsta\u0142 projekt znany dzisiaj jako Helm. Zaledwie rok po za\u0142o\u017ceniu spo\u0142eczno\u015b\u0107 Helma do\u0142\u0105czy\u0142a do Kubernetes, jednocze\u015bnie aktywnie pracuj\u0105c nad Helm 2. W czerwcu 2018 roku Helm <noindex><a rel=\"nofollow\" href=\"https:\/\/www.cncf.io\/blog\/2018\/06\/01\/cncf-to-host-helm\/\">do\u0142\u0105czy\u0142 do CNCF<\/a><\/noindex> jako rozwijaj\u0105cy si\u0119 projekt (incubating). Przenie\u015bmy si\u0119 do tera\u017aniejszo\u015bci \u2014 oto zbli\u017ca si\u0119 pierwsze alfabeta wydanie nowego Helma 3 <i>(to wydanie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/releases\/tag\/v3.0.0-alpha.1\">ju\u017c mia\u0142o miejsce<\/a><\/noindex> w po\u0142owie maja \u2014 przyp. t\u0142um.)<\/i>.<\/p>\n<p>W tym materiale opowiem o tym, jak to wszystko si\u0119 rozpocz\u0119\u0142o, jak dotarli\u015bmy do obecnego etapu, zaprezentuj\u0119 kilka unikalnych cech dost\u0119pnych w pierwszym alfabeta wydaniu Helma 3 i wyja\u015bni\u0119, jak planujemy dalej si\u0119 rozwija\u0107.<\/p>\n<p>Streszczenie:<\/p>\n<ul>\n<li>historia powstania Helma;<\/li>\n<li>delikatne po\u017cegnanie z Tillerem<\/li>\n<li>repozytoria chart\u00f3w;<\/li>\n<li>zarz\u0105dzanie wydaniami;<\/li>\n<li>zmiany w zale\u017cno\u015bciach chart\u00f3w;<\/li>\n<li>library charts;<\/li>\n<li>co dalej?<\/li>\n<\/ul>\n<p><\/p>\n<h2>Historia powstania Helma<\/h2>\n<p><\/p>\n<h3>Narodziny<\/h3>\n<p>\nHelm 1 rozpocz\u0105\u0142 si\u0119 jako projekt Open Source, stworzony przez firm\u0119 Deis. Byli\u015bmy ma\u0142ym startupem, <noindex><a rel=\"nofollow\" href=\"https:\/\/blogs.microsoft.com\/blog\/2017\/04\/10\/microsoft-acquire-deis-help-companies-innovate-containers\/\">przej\u0119tym<\/a><\/noindex> przez Microsoft wiosn\u0105 2017 roku. Nasz inny projekt Open Source, r\u00f3wnie\u017c nosz\u0105cy nazw\u0119 Deis, mia\u0142 narz\u0119dzie <code>deisctl<\/code>, kt\u00f3re by\u0142o u\u017cywane (mi\u0119dzy innymi) do instalacji i obs\u0142ugi platformy Deis w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/coreos\/fleet\">klastrze Fleet<\/a><\/noindex>. W tamtym czasie Fleet by\u0142 jedn\u0105 z pierwszych platform do orkiestracji kontener\u00f3w.<\/p>\n<p>W po\u0142owie 2015 roku zdecydowali\u015bmy si\u0119 zmieni\u0107 kurs i przenie\u015bli\u015bmy Deis (w\u00f3wczas przemianowany na Deis Workflow) z Fleet na Kubernetes. Jednym z pierwszych krok\u00f3w by\u0142a przebudowa narz\u0119dzia instalacyjnego <code>deisctl<\/code>. U\u017cywali\u015bmy go do instalacji i zarz\u0105dzania Deis Workflow w klastrze Fleet.<\/p>\n<p>Helm 1 zosta\u0142 stworzony na wz\u00f3r znanych mened\u017cer\u00f3w pakiet\u00f3w, takich jak Homebrew, apt i yum. Jego g\u0142\u00f3wnym celem by\u0142o uproszczenie takich zada\u0144, jak pakowanie i instalacja aplikacji w Kubernetes. Oficjalnie Helm zosta\u0142 zaprezentowany w 2015 roku na konferencji KubeCon w San Francisco.<\/p>\n<p>Nasza pierwsza pr\u00f3ba z Helm zadzia\u0142a\u0142a, jednak nie oby\u0142o si\u0119 bez powa\u017cnych ogranicze\u0144. Bra\u0142 zestaw manifest\u00f3w Kubernetes, wzbogaconych generatorami jako wej\u015bciowe bloki YAML. <i>(front-matter)<\/i>*, i \u0142adowa\u0142 wyniki do Kubernetes.<\/p>\n<p><i>* <b>Przyp. t\u0142um.<\/b>: Od pierwszej wersji Helm do opisania zasob\u00f3w Kubernetes wybrano sk\u0142adni\u0119 YAML, a przy pisaniu konfiguracji wspierano szablony Jinja i skrypty Pythona. Wi\u0119cej na ten temat oraz o strukturze pierwszej wersji Helm pisali\u015bmy w rozdziale \u201eKr\u00f3tka historia Helm\u201d. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417079\/\">tego materia\u0142u<\/a><\/noindex>.<\/i><\/p>\n<p>Na przyk\u0142ad, aby zamieni\u0107 pole w pliku YAML, nale\u017ca\u0142o doda\u0107 do manifestu nast\u0119puj\u0105c\u0105 konstrukcj\u0119:<\/p>\n<pre><code class=\"plaintext\">#helm:generate sed -i -e s|ubuntu-debootstrap|fluffy-bunny| my\/pod.yaml<\/code><\/pre>\n<p>\nFajnie, \u017ce dzisiaj istniej\u0105 szablonizatory, prawda?<\/p>\n<p>Z wielu powod\u00f3w ten wczesny instalator Kubernetes wymaga\u0142 sztywno okre\u015blonego zestawu plik\u00f3w manifest\u00f3w i realizowa\u0142 tylko niewielk\u0105, sta\u0142\u0105 sekwencj\u0119 wydarze\u0144. Korzystanie z niego by\u0142o na tyle trudne, \u017ce zesp\u00f3\u0142 R&amp;D Deis Workflow mia\u0142 sporo trudno\u015bci, kiedy pr\u00f3bowali przenie\u015b\u0107 sw\u00f3j produkt na t\u0119 platform\u0119 \u2014 jednak\u017ce ziarna idei ju\u017c zosta\u0142y zasiane. Nasza pierwsza pr\u00f3ba sta\u0142a si\u0119 \u015bwietn\u0105 okazj\u0105 do nauki: zrozumieli\u015bmy, \u017ce naprawd\u0119 pasjonuje nas tworzenie praktycznych narz\u0119dzi, kt\u00f3re rozwi\u0105zuj\u0105 codzienne problemy naszych u\u017cytkownik\u00f3w.<\/p>\n<p>Opieraj\u0105c si\u0119 na do\u015bwiadczeniu z przesz\u0142ych b\u0142\u0119d\u00f3w, przyst\u0105pili\u015bmy do prac nad Helm 2.<\/p>\n<h3>Tworzenie Helm 2<\/h3>\n<p>\nPod koniec 2015 roku skontaktowa\u0142 si\u0119 z nami zesp\u00f3\u0142 Google. Pracowali nad podobnym narz\u0119dziem dla Kubernetes. Deployment Manager dla Kubernetes by\u0142 portem istniej\u0105cego narz\u0119dzia, kt\u00f3re by\u0142o u\u017cywane dla Google Cloud Platform. \u201eCzy nie chcieliby\u015bmy,\u201d zapytali, \u201epo\u015bwi\u0119ci\u0107 kilku dni na om\u00f3wienie podobie\u0144stw i r\u00f3\u017cnic?\u201d<\/p>\n<p>W styczniu 2016 roku zespo\u0142y Helm i Deployment Manager spotka\u0142y si\u0119 w Seattle, aby wymieni\u0107 si\u0119 pomys\u0142ami. Negocjacje zako\u0144czy\u0142y si\u0119 ambitnym planem: po\u0142\u0105czeniem obu projekt\u00f3w w celu stworzenia Helm 2. Wraz z Deis i Google do zespo\u0142u programist\u00f3w do\u0142\u0105czyli ch\u0142opcy z <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/skippbox\">SkippBox<\/a><\/noindex> <i>(obecnie cz\u0119\u015b\u0107 Bitnami \u2014 przyp. t\u0142um.)<\/i>, i przyst\u0105pili\u015bmy do pracy nad Helm 2.<\/p>\n<p>Chcieli\u015bmy zachowa\u0107 prostot\u0119 u\u017cycia Helm, ale doda\u0107 nast\u0119puj\u0105ce elementy:<\/p>\n<ul>\n<li> szablony chart\u00f3w do dostosowywania;<\/li>\n<li> zarz\u0105dzanie w wewn\u0119trznym klastrze dla zespo\u0142\u00f3w;<\/li>\n<li> repozytorium chart\u00f3w najwy\u017cszej jako\u015bci;<\/li>\n<li> stabilny format pakiet\u00f3w z mo\u017cliwo\u015bci\u0105 podpisu;<\/li>\n<li> silne zobowi\u0105zanie do semantycznego wersjonowania i utrzymania zgodno\u015bci wstecznej mi\u0119dzy wersjami.<\/li>\n<\/ul>\n<p>\nAby osi\u0105gn\u0105\u0107 te cele, do ekosystemu Helm dodano drugi element. Ten wewn\u0119trzny komponent klastra nazywa\u0142 si\u0119 Tiller i zajmowa\u0142 si\u0119 instalacj\u0105 chart\u00f3w Helm oraz ich zarz\u0105dzaniem.<\/p>\n<p>Od momentu wydania Helm 2 w 2016 roku Kubernetes zyska\u0142 kilka istotnych nowo\u015bci. Wprowadzono zarz\u0105dzanie dost\u0119pem oparte na rolach (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/422801\/\">RBAC<\/a><\/noindex>), kt\u00f3re ostatecznie zast\u0105pi\u0142o kontrol\u0119 dost\u0119pu opart\u0105 na atrybutach (ABAC). Przedstawiono nowe typy zasob\u00f3w (Deployments wci\u0105\u017c pozostawa\u0142y w wersji beta). Wynaleziono definicje zasob\u00f3w niestandardowych (pocz\u0105tkowo nazywane zasobami os\u00f3b trzecich lub TPR). A co najwa\u017cniejsze \u2013 pojawi\u0142 si\u0119 zestaw najlepszych praktyk.<\/p>\n<p>Na tle tych wszystkich zmian Helm nadal z wierno\u015bci\u0105 s\u0142u\u017cy\u0142 u\u017cytkownikom Kubernetes. Po trzech latach i wielu nowych dodatkach sta\u0142o si\u0119 jasne, \u017ce nadszed\u0142 czas, aby wprowadzi\u0107 znacz\u0105ce zmiany w kodzie, aby Helm m\u00f3g\u0142 dalej spe\u0142nia\u0107 rosn\u0105ce potrzeby rozwijaj\u0105cego si\u0119 ekosystemu.<\/p>\n<h2>Delikatne po\u017cegnanie z Tillerem<\/h2>\n<p>\nPodczas opracowywania Helm 2 przedstawili\u015bmy Tillera jako cz\u0119\u015b\u0107 naszej integracji z Deployment Managerem Google. Tiller odgrywa\u0142 wa\u017cn\u0105 rol\u0119 dla zespo\u0142\u00f3w pracuj\u0105cych w ramach wsp\u00f3lnego klastra: umo\u017cliwia\u0142 r\u00f3\u017cnym specjalistom eksploatuj\u0105cym infrastruktur\u0119 interakcj\u0119 z tym samym zestawem wyda\u0144.<\/p>\n<p>Poniewa\u017c kontrola dost\u0119pu oparta na rolach (RBAC) by\u0142a domy\u015blnie w\u0142\u0105czona w Kubernetes 1.6, praca z Tillerem w produkcji stawa\u0142a si\u0119 coraz trudniejsza. Z powodu ogromnej liczby mo\u017cliwych polityk bezpiecze\u0144stwa nasz\u0105 pozycj\u0105 by\u0142o domy\u015blne oferowanie konfiguracji zezwalaj\u0105cej. Pozwoli\u0142o to nowicjuszom eksperymentowa\u0107 z Helm i Kubernetes bez konieczno\u015bci najpierw zag\u0142\u0119biania si\u0119 w ustawienia bezpiecze\u0144stwa. Niestety, taka konfiguracja zezwalaj\u0105ca mog\u0142a przyzna\u0107 u\u017cytkownikowi zbyt szeroki zakres uprawnie\u0144, kt\u00f3re nie by\u0142y mu potrzebne. In\u017cynierowie DevOps i SRE musieli uczy\u0107 si\u0119 dodatkowych krok\u00f3w eksploatacyjnych przy instalacji Tillera w klastrze wielou\u017cytkownikowym.<\/p>\n<p>Dowiaduj\u0105c si\u0119, jak cz\u0142onkowie spo\u0142eczno\u015bci wykorzystuj\u0105 Helm w konkretnych sytuacjach, zrozumieli\u015bmy, \u017ce system zarz\u0105dzania wydaniami Tillera nie musi polega\u0107 na wewn\u0119trznym komponencie klastra, aby utrzymywa\u0107 stany lub dzia\u0142a\u0107 jako centralny w\u0119ze\u0142 z informacjami o wydaniu. Zamiast tego mogliby\u015bmy po prostu uzyskiwa\u0107 informacje z serwera API Kubernetes, generowa\u0107 chart po stronie klienta i przechowywa\u0107 zapis instalacji w Kubernetes.<\/p>\n<p>G\u0142\u00f3wn\u0105 funkcj\u0119 Tillera mo\u017cna by\u0142o zrealizowa\u0107 i bez niego, wi\u0119c jednym z naszych pierwszych rozwi\u0105za\u0144 dotycz\u0105cych Helm 3 by\u0142o ca\u0142kowite zrezygnowanie z Tillera.<\/p>\n<p>Z odej\u015bciem Tillera model bezpiecze\u0144stwa Helm radykalnie si\u0119 upro\u015bci\u0142. Helm 3 teraz wspiera wszystkie nowoczesne metody bezpiecze\u0144stwa, identyfikacji i autoryzacji obecnego Kubernetes. Uprawnienia Helm s\u0105 okre\u015blane za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/organize-cluster-access-kubeconfig\/\">pliku kubeconfig<\/a><\/noindex>. Administratorzy klastra mog\u0105 ogranicza\u0107 prawa u\u017cytkownik\u00f3w z dowolnym poziomem szczeg\u00f3\u0142owo\u015bci. Wydania wci\u0105\u017c s\u0105 przechowywane wewn\u0105trz klastra, a pozosta\u0142a funkcjonalno\u015b\u0107 Helma pozostaje.<\/p>\n<h2>Repozytoria chart\u00f3w<\/h2>\n<p>\nNa wysokim poziomie repozytorium chart\u00f3w to miejsce, gdzie mo\u017cna przechowywa\u0107 i wsp\u00f3\u0142dzieli\u0107 charty. Klient Helm pakuje i wysy\u0142a charty do repozytorium. M\u00f3wi\u0105c pro\u015bciej, repozytorium chart\u00f3w to prymitywny serwer HTTP z plikiem index.yaml i pewnymi zapakowanymi chartami.<\/p>\n<p>Chocia\u017c istniej\u0105 pewne korzy\u015bci z tego, \u017ce API repozytorium chart\u00f3w odpowiada najbardziej podstawowym wymaganiom przechowywania, ma ono r\u00f3wnie\u017c kilka wad:<\/p>\n<ul>\n<li> Repozytoria chart\u00f3w s\u0105 \u017ale dopasowane do wi\u0119kszo\u015bci implementacji zabezpiecze\u0144 wymaganych w \u015brodowisku produkcyjnym. Obecno\u015b\u0107 standardowego API do uwierzytelniania i autoryzacji jest ekstremalnie wa\u017cna w scenariuszach produkcyjnych.<\/li>\n<li> Narz\u0119dzia Helm do \u015bledzenia pochodzenia chartu, u\u017cywane do podpisywania, sprawdzania integralno\u015bci i pochodzenia chartu, s\u0105 opcjonaln\u0105 cz\u0119\u015bci\u0105 procesu publikacji chartu.<\/li>\n<li> W scenariuszach wielodost\u0119pnych ten sam chart mo\u017ce by\u0107 przesy\u0142any przez innego u\u017cytkownika, co podwaja ilo\u015b\u0107 miejsca potrzebnego do przechowywania tej samej tre\u015bci. Aby rozwi\u0105za\u0107 ten problem, opracowano bardziej inteligentne repozytoria, kt\u00f3re jednak nie s\u0105 cz\u0119\u015bci\u0105 formalnej specyfikacji.<\/li>\n<li> U\u017cycie jednego indeksu do wyszukiwania, przechowywania metadanych i uzyskiwania chart\u00f3w skomplikowa\u0142o rozw\u00f3j bezpiecznych wielu u\u017cytkownik\u00f3w.<\/li>\n<\/ul>\n<p>\nProjekt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/docker\/distribution\">Docker Distribution<\/a><\/noindex> (znany r\u00f3wnie\u017c jako Docker Registry v2) jest nast\u0119pc\u0105 Docker Registry i w rzeczywisto\u015bci stanowi zestaw narz\u0119dzi do pakowania, wysy\u0142ania, przechowywania i dostarczania obraz\u00f3w Docker. Wiele du\u017cych us\u0142ug chmurowych oferuje produkty oparte na Distribution. Dzi\u0119ki takiemu zwi\u0119kszonemu zainteresowaniu projekt Distribution skorzysta\u0142 na wieloletnich ulepszeniach, najlepszych praktykach w zakresie bezpiecze\u0144stwa i testowaniu w warunkach \"bojowych\", kt\u00f3re przekszta\u0142ci\u0142y go w jednego z najbardziej udanych niedocenionych bohater\u00f3w \u015bwiata open source.<\/p>\n<p>Ale czy wiesz, \u017ce projekt Distribution zosta\u0142 zaprojektowany do dystrybucji dowolnej formy tre\u015bci, a nie tylko obraz\u00f3w kontener\u00f3w?<\/p>\n<p>Dzi\u0119ki wysi\u0142kom <noindex><a rel=\"nofollow\" href=\"https:\/\/www.opencontainers.org\/\">Open Container Initiative<\/a><\/noindex> (lub OCI), Helm-charty mog\u0105 by\u0107 przechowywane na dowolnym egzemplarzu Distribution. Proces ten ma charakter eksperymentalny. Prace nad obs\u0142ug\u0105 logowania i innymi funkcjami niezb\u0119dnymi do pe\u0142nego dzia\u0142ania Helm 3 wci\u0105\u017c trwaj\u0105, ale bardzo cieszymy si\u0119 z mo\u017cliwo\u015bci uczenia si\u0119 na odkryciach dokonanych przez zespo\u0142y OCI i Distribution na przestrzeni lat. Dzi\u0119ki ich mentorstwu i kierownictwu dowiadujemy si\u0119, czym jest eksploatacja wysoko dost\u0119pnej us\u0142ugi na du\u017c\u0105 skal\u0119.<\/p>\n<p>Szczeg\u00f3\u0142owy opis niekt\u00f3rych nadchodz\u0105cych zmian w repozytoriach Helm-chart\u00f3w jest dost\u0119pny <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.bacongobbler.com\/post\/2019-01-25-distributing-with-distribution\/\">pod tym linkiem<\/a><\/noindex>.<\/p>\n<h2>Zarz\u0105dzanie wydaniami<\/h2>\n<p>\nW Helm 3 stan aplikacji jest \u015bledzony wewn\u0105trz klastra przez par\u0119 obiekt\u00f3w:<\/p>\n<ul>\n<li> obiekt wydania \u2014 reprezentuje egzemplarz aplikacji;<\/li>\n<li> wersja wydania tajny \u2014 reprezentuje po\u017c\u0105dany stan aplikacji w okre\u015blonym momencie (na przyk\u0142ad, wydanie nowej wersji).<\/li>\n<\/ul>\n<p>\nWywo\u0142anie <code>helm install<\/code> tworzy obiekt wydania i tajny klucz wersji wydania. Wywo\u0142anie <code>helm upgrade<\/code> wymaga istnienia obiektu wydania (kt\u00f3ry mo\u017ce modyfikowa\u0107) i tworzy nowy tajny klucz wersji wydania, zawieraj\u0105cy nowe warto\u015bci i przygotowany manifest.<\/p>\n<p>Obiekt release zawiera informacje o wydaniu, gdzie wydanie to konkretna instalacja nazwanego chartu i warto\u015bci. Obiekt ten opisuje metadane na najwy\u017cszym poziomie dotycz\u0105ce wydania. Obiekt release jest przechowywany przez ca\u0142y cykl \u017cycia aplikacji i jest w\u0142a\u015bcicielem wszystkich sekret\u00f3w wersji wydania, a tak\u017ce wszystkich obiekt\u00f3w, kt\u00f3re s\u0105 bezpo\u015brednio tworzone przez chart Helm.<\/p>\n<p>Tajny klucz wersji wydania \u0142\u0105czy wydanie z seri\u0105 rewizji (instalacja, aktualizacje, wycofanie, usuni\u0119cie).<\/p>\n<p>W Helm 2 rewizje by\u0142y wy\u0142\u0105cznie sekwencyjne. Wywo\u0142anie <code>helm install<\/code> tworzy\u0142 v1, kolejne aktualizacje (upgrade) \u2013 v2, i tak dalej. Release i sekret wersji wydania zosta\u0142y po\u0142\u0105czone w jeden obiekt znany jako revision. Revision by\u0142y przechowywane w tej samej przestrzeni nazw co Tiller, co oznacza\u0142o, \u017ce ka\u017cde wydanie by\u0142o \"globalne\" pod wzgl\u0119dem przestrzeni nazw; w rezultacie mo\u017cna by\u0142o u\u017cywa\u0107 tylko jednego egzemplarza nazwy.<\/p>\n<p>W Helm 3 ka\u017cde wydanie jest zwi\u0105zane z jednym lub wieloma sekretami wersji wydania. Obiekt release zawsze opisuje bie\u017c\u0105ce wydanie wdro\u017cone w Kubernetes. Ka\u017cdy sekret wersji wydania opisuje tylko jedn\u0105 wersj\u0119 tego wydania. Aktualizacja (upgrade) na przyk\u0142ad utworzy nowy sekret wersji wydania, a nast\u0119pnie zmieni obiekt release, aby wskazywa\u0142 t\u0119 now\u0105 wersj\u0119. W przypadku wycofania (rollback) mo\u017cna u\u017cy\u0107 poprzednich sekret\u00f3w wersji wydania, aby przywr\u00f3ci\u0107 wydanie do poprzedniego stanu.<\/p>\n<p>Po rezygnacji z Tiller Helm 3 przechowuje dane o wydaniu w tej samej przestrzeni nazw co wydanie. Taka zmiana pozwala na zainstalowanie chartu o tej samej nazwie wydania w innej przestrzeni nazw, a dane s\u0105 zachowane mi\u0119dzy aktualizacjami\/ponownymi uruchomieniami klastra w etcd. Na przyk\u0142ad mo\u017cna zainstalowa\u0107 WordPress w przestrzeni nazw \"foo\", a nast\u0119pnie w przestrzeni nazw \"bar\", a oba wydania mog\u0105 nazywa\u0107 si\u0119 \"wordpress\".<\/p>\n<h2>Zmiany w zale\u017cno\u015bciach chart\u00f3w<\/h2>\n<p>\nCharty, zapakowane (za pomoc\u0105 <code>helm package<\/code>) do u\u017cycia z Helm 2, mo\u017cna zainstalowa\u0107 z Helm 3, jednak proces opracowywania chart\u00f3w zosta\u0142 ca\u0142kowicie przeprojektowany, wi\u0119c konieczne jest wprowadzenie pewnych zmian, aby kontynuowa\u0107 rozw\u00f3j chart\u00f3w z Helm 3. W szczeg\u00f3lno\u015bci zmieni\u0142 si\u0119 system zarz\u0105dzania zale\u017cno\u015bciami chart\u00f3w.<\/p>\n<p>System zarz\u0105dzania zale\u017cno\u015bciami chartu przeszed\u0142 na <code>requirements.yaml<\/code> i <code>requirements.lock<\/code> na <code>Chart.yaml<\/code> i <code>Chart.lock<\/code>. Oznacza to, \u017ce charty, kt\u00f3re u\u017cywa\u0142y polecenia <code>helm dependency<\/code>, wymagaj\u0105 pewnych dostosowa\u0144, aby dzia\u0142a\u0107 w Helm 3.<\/p>\n<p>Przyjrzyjmy si\u0119 przyk\u0142adowi. Dodajmy zale\u017cno\u015b\u0107 do chartu w Helm 2 i zobaczmy, co zmieni si\u0119 przy przej\u015bciu do Helm 3.<\/p>\n<p>W Helm 2 <code>requirements.yaml<\/code> wygl\u0105da\u0142 nast\u0119puj\u0105co:<\/p>\n<pre><code class=\"plaintext\">dependencies:\n- name: mariadb\n  version: 5.x.x\n  repository: https:\/\/kubernetes-charts.storage.googleapis.com\/\n  condition: mariadb.enabled\n  tags:\n    - database<\/code><\/pre>\n<p>\nW Helm 3 ta sama zale\u017cno\u015b\u0107 b\u0119dzie odzwierciedlona w twoim <code>Chart.yaml<\/code>:<\/p>\n<pre><code class=\"plaintext\">dependencies:\n- name: mariadb\n  version: 5.x.x\n  repository: https:\/\/kubernetes-charts.storage.googleapis.com\/\n  condition: mariadb.enabled\n  tags:\n    - database<\/code><\/pre>\n<p>\nCharty wci\u0105\u017c s\u0105 \u0142adowane i umieszczane w katalogu <code>charts\/<\/code>, dlatego subcharty <i>(subcharts)<\/i>, znajduj\u0105ce si\u0119 w katalogu <code>charts\/<\/code>, b\u0119d\u0105 dzia\u0142a\u0142y bez zmian.<\/p>\n<h2>Wprowadzamy Library Charts<\/h2>\n<p>\nHelm 3 wspiera klas\u0119 chart\u00f3w, nazywan\u0105 chartami-bibliotekami <i>(library chart)<\/i>. Ten chart jest u\u017cywany przez inne charty, ale samodzielnie nie tworzy \u017cadnych artefakt\u00f3w wydania. Szablony chart\u00f3w biblioteki mog\u0105 deklarowa\u0107 tylko elementy <code>define<\/code>. Inna zawarto\u015b\u0107 jest po prostu ignorowana. Umo\u017cliwia to u\u017cytkownikom ponowne u\u017cycie i wymian\u0119 fragment\u00f3w kodu, kt\u00f3re mo\u017cna wykorzysta\u0107 w wielu chartach, unikaj\u0105c w ten spos\u00f3b duplikacji i przestrzegaj\u0105c zasady <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\">DRY<\/a><\/noindex>.<\/p>\n<p>Charty bibliotekowe s\u0105 deklarowane w sekcji <code>dependencies<\/code> w pliku <code>Chart.yaml<\/code>. Instalacja i zarz\u0105dzanie nimi nie r\u00f3\u017cni si\u0119 od innych chart\u00f3w.<\/p>\n<pre><code class=\"plaintext\">dependencies:\n  - name: mylib\n    version: 1.x.x\n    repository: quay.io<\/code><\/pre>\n<p>\nZ niecierpliwo\u015bci\u0105 czekamy na zastosowania, kt\u00f3re ten komponent otworzy przed tw\u00f3rcami chart\u00f3w, a tak\u017ce na najlepsze praktyki, kt\u00f3re mog\u0105 powsta\u0107 dzi\u0119ki chartom bibliotekowym.<\/p>\n<h2>Co dalej?<\/h2>\n<p>\nHelm 3.0.0-alpha.1 to fundament, na kt\u00f3rym zaczynamy budowa\u0107 now\u0105 wersj\u0119 Helma. W artykule opisa\u0142em kilka interesuj\u0105cych mo\u017cliwo\u015bci Helma 3. Wiele z nich jest jeszcze na wczesnym etapie rozwoju, co jest normalne; istot\u0105 alfy jest testowanie pomys\u0142u, zbieranie opinii od pierwszych u\u017cytkownik\u00f3w oraz potwierdzanie naszych za\u0142o\u017ce\u0144.<\/p>\n<p>Gdy tylko wersja alfa zostanie wydana <i>(przypominamy, \u017ce to <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/releases\/tag\/v3.0.0-alpha.1\">ju\u017c si\u0119 wydarzy\u0142o)<\/a><\/noindex> \u2014 przyp. t\u0142um.)<\/i>, zaczniemy przyjmowa\u0107 patche dla Helm 3 od spo\u0142eczno\u015bci. Musimy stworzy\u0107 solidne podstawy, kt\u00f3re pozwol\u0105 rozwija\u0107 i wprowadza\u0107 nowe funkcjonalno\u015bci, a u\u017cytkownicy b\u0119d\u0105 mogli czu\u0107 si\u0119 zaanga\u017cowani w proces, otwieraj\u0105c tickety i wnosz\u0105c poprawki.<\/p>\n<p>W artykule stara\u0142em si\u0119 om\u00f3wi\u0107 niekt\u00f3re powa\u017cne ulepszenia, kt\u00f3re pojawi\u0105 si\u0119 w Helm 3, jednak ta lista nie jest w \u017cadnym wypadku wyczerpuj\u0105ca. Pe\u0142ny plan dla Helm 3 obejmuje takie nowo\u015bci, jak ulepszone strategie aktualizacji, g\u0142\u0119bsza integracja z rejestrem OCI oraz wykorzystanie schemat\u00f3w JSON do walidacji warto\u015bci chart\u00f3w. Planujemy r\u00f3wnie\u017c oczy\u015bci\u0107 baz\u0119 kodu i zaktualizowa\u0107 te jej cz\u0119\u015bci, kt\u00f3re by\u0142y ignorowane przez ostatnie trzy lata.<\/p>\n<p>Je\u015bli czujecie, \u017ce co\u015b przeoczyli\u015bmy, z ch\u0119ci\u0105 us\u0142yszymy wasze my\u015bli!<\/p>\n<p>Do\u0142\u0105cz do dyskusji w naszym <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.slack.com\/\">kana\u0142ach Slack<\/a><\/noindex>:<\/p>\n<ul>\n<li> <code>#helm-users<\/code> na pytania i swobodn\u0105 komunikacj\u0119 ze spo\u0142eczno\u015bci\u0105;<\/li>\n<li> <code>#helm-dev<\/code> na temat omawiania pull request\u00f3w, kodu i b\u0142\u0119d\u00f3w.<\/li>\n<\/ul>\n<p>\nMo\u017cecie r\u00f3wnie\u017c porozmawia\u0107 na naszych cotygodniowych Public Developer Calls w czwartki o 19:30 MSK. Spotkania s\u0105 po\u015bwi\u0119cone om\u00f3wieniu zada\u0144, nad kt\u00f3rymi pracuj\u0105 kluczowi deweloperzy oraz spo\u0142eczno\u015b\u0107, a tak\u017ce tematom dyskusji na tydzie\u0144. Ka\u017cdy ch\u0119tny mo\u017ce do\u0142\u0105czy\u0107 i wzi\u0105\u0107 udzia\u0142 w spotkaniu. Link jest dost\u0119pny w kanale Slack <code>#helm-dev<\/code>.<\/p>\n<h2>P.S. od t\u0142umacza<\/h2>\n<p>\nPrzeczytaj tak\u017ce na naszym blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417079\/\">Menad\u017cer pakiet\u00f3w dla Kubernetes \u2014 Helm: przesz\u0142o\u015b\u0107, tera\u017aniejszo\u015b\u0107, przysz\u0142o\u015b\u0107<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438814\/\">Trze\u017awe spojrzenie na Helm 2: \u201eTaki jak jest\u2026\u201c<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420437\/\">Praktyczne wprowadzenie do mened\u017cera pakiet\u00f3w dla Kubernetes \u2014 Helm<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/441964\/\">Kubernetes tips &amp; tricks: przekszta\u0142canie dzia\u0142aj\u0105cych zasob\u00f3w w klastrze w zarz\u0105dzanie Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/336170\/\">Praktyka z dapp. Cz\u0119\u015b\u0107 2. Wdra\u017canie obraz\u00f3w Docker w Kubernetes za pomoc\u0105 Helm<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/453734\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: 16 \u043c\u0430\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u2014 \u0437\u043d\u0430\u0447\u0438\u043c\u0430\u044f \u0432\u0435\u0445\u0430 \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f Kubernetes \u2014 Helm. \u0412 \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u043b\u044c\u0444\u0430-\u0440\u0435\u043b\u0438\u0437 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 3.0. \u0415\u0451 \u0432\u044b\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u0435\u0441\u0451\u0442 \u0432 Helm \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u0434\u043e\u043b\u0433\u043e\u0436\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0432 Kubernetes-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043b\u0430\u0433\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043d\u0430\u0434\u0435\u0436\u0434\u044b. \u041a \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u043c\u0441\u044f \u0438 \u043c\u044b \u0441\u0430\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26173,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34735","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=\"description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\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\/pl\/blog\/administrirovanie\/znakomstvo-s-helm-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Helm 3 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/znakomstvo-s-helm-3\" \/>\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=\"2019-10-31T19:00:06+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:06+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\udd47Wprowadzenie do Helm 3 | ProHoster","description":"Przyk\u0142.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/znakomstvo-s-helm-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Helm 3 | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/znakomstvo-s-helm-3","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":"2019-10-31T19:00:06+00:00","article:modified_time":"2019-10-31T19:00:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34735","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":"2026-01-21 20:26:53","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 23:08:04","updated":"2026-01-21 20:26:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/34735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=34735"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/34735\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/26173"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=34735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=34735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=34735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}