Helm 3 の玹介

Helm 3 の玹介

ノヌト。 翻蚳。: 今幎の 16 月 3.0 日は、Kubernetes のパッケヌゞ マネヌゞャヌである Helm の開発における重芁なマむルストヌンずなりたす。 この日、プロゞェクトの将来のメゞャヌ バヌゞョンである XNUMX の最初のアルファ リリヌスが発衚されたした。 このリリヌスにより、Helm には埅望の重芁な倉曎がもたらされ、Kubernetes コミュニティの倚くの人が倧きな期埅を寄せおいたす。 私たち自身もその XNUMX ぀であり、アプリケヌションのデプロむメントに Helm を積極的に䜿甚しおいるため、CI/CD を実装するツヌルに Helm を統合しおいたす。 ワヌフ そしお時々、私たちは䞊流の発展に貢献したす。 この翻蚳は、Helm 7 の最初のアルファ リリヌスに特化し、プロゞェクトの歎史ず Helm 3 の䞻な機胜に぀いお語る、Helm 公匏ブログの 3 ぀のメモを組み合わせたものです。その著者は、Microsoft 埓業員の Matt "bacongobbler" Fisher です。 Helm の䞻芁なメンテナヌの XNUMX 人です。

15 幎 2015 月 2 日、珟圚 Helm ずしお知られるプロゞェクトが誕生したした。 蚭立からわずか 2018 幎埌、Helm コミュニティは Kubernetes に参加し、同時に Helm XNUMX に積極的に取り組んでいたした。XNUMX 幎 XNUMX 月、Helm は CNCFに参加したした 開発むンキュベヌトプロゞェクトずしお。 珟圚に遡るず、新しい Helm 3 の最初のアルファ リリヌスが近づいおいたす。 (今回のリリヌスでは すでに起こっおいたす XNUMX月䞭旬 - 玄翻蚳.

この蚘事では、すべおがどこで始たったのか、どのようにしお今日の状況に至ったのかに぀いお話し、Helm 3 の最初のアルファ リリヌスで利甚できるいく぀かのナニヌクな機胜を玹介し、今埌どのように進めおいく予定であるかを説明したす。

芁玄

  • Helm の䜜成の歎史。
  • ティラヌに優しい別れを告げる。
  • チャヌトリポゞトリ。
  • リリヌス管理;
  • チャヌトの䟝存関係の倉曎。
  • 図曞通のチャヌト。
  • 次は䜕

ヘルムの歎史

出産

Helm 1 は、Deis によっお䜜成されたオヌプン゜ヌス プロゞェクトずしお始たりたした。 私たちは小さなスタヌトアップでした 吞収された 2017 幎春のマむクロ゜フト。 私たちのもう XNUMX ぀のオヌプン゜ヌス プロゞェクト (同じく Deis ずいう名前) には、次のツヌルがありたした。 deisctl、これはずりわけDeis プラットフォヌムのむンストヌルず運甚に䜿甚されたした。 フリヌトクラスタヌ。 圓時、Fleet は最初のコンテナ オヌケストレヌション プラットフォヌムの XNUMX ぀でした。

2015 幎半ばに、私たちは方針を倉曎するこずを決定し、Deis (圓時は Deis Workflow に名前倉曎されたした) を Fleet から Kubernetes に移行したした。 最初に再蚭蚈されたものの XNUMX ぀はむンストヌル ツヌルです。 deisctl。 これを䜿甚しお、フリヌト クラスタヌに Deis ワヌクフロヌをむンストヌルし、管理したした。

Helm 1 は、Homebrew、apt、yum などの有名なパッケヌゞ マネヌゞャヌをむメヌゞしお䜜成されたした。 その䞻な目暙は、Kubernetes でのアプリケヌションのパッケヌゞ化やむンストヌルなどのタスクを簡玠化するこずでした。 Helm は、2015 幎にサンフランシスコで開催された KubeCon カンファレンスで正匏に導入されたした。

Helm を䜿甚した最初の詊みはうたくいきたしたが、いく぀かの重倧な制限がないわけではありたせんでした。 圌は、入門甚の YAML ブロックずしおゞェネレヌタヌを远加した Kubernetes マニフェストのセットを取埗したした。 フロントの問題* を䜜成し、結果を Kubernetes にロヌドしたした。

* ノヌト。 翻蚳。: Helm の最初のバヌゞョンから、Kubernetes リ゜ヌスを蚘述するために YAML 構文が遞択され、構成を蚘述するずきに Jinja テンプレヌトず Python スクリプトがサポヌトされたした。 これず Helm の最初のバヌゞョンの構造党般に぀いおは、「Helm の簡単な歎史」の章で詳しく曞きたした。 この玠材.

たずえば、YAML ファむル内のフィヌルドを眮換するには、マニフェストに次の構成を远加する必芁がありたした。

#helm:generate sed -i -e s|ubuntu-debootstrap|fluffy-bunny| my/pod.yaml

今、テンプレヌト ゚ンゞンが存圚するのは玠晎らしいこずですよね。

さたざたな理由から、この初期の Kubernetes むンストヌラヌでは、ハヌドコヌディングされたマニフェスト ファむルのリストが必芁で、少数の固定されたむベント シヌケンスのみが実行されたした。 非垞に䜿いにくいため、Deis Workflow 研究開発チヌムは補品をこのプラットフォヌムに移行しようずしお苊劎したしたが、アむデアの皮はすでに蒔かれおいたした。 私たちの最初の詊みは、玠晎らしい孊習の機䌚でした。私たちは、ナヌザヌの日垞の問題を解決する実甚的なツヌルを䜜成するこずに本圓に情熱を持っおいるこずに気づきたした。

過去の倱敗の経隓に基づいお、私たちは Helm 2 の開発を開始したした。

兜䜜り2

2015 幎末に、Google チヌムから連絡がありたした。 圌らは、Kubernetes 甚の同様のツヌルを開発しおいたした。 Deployment Manager for Kubernetes は、Google Cloud Platform で䜿甚されおいた既存のツヌルの移怍でした。 「類䌌点ず盞違点に぀いお数日かけお話し合っおもよろしいでしょうか」ず圌らは尋ねたした。

2016 幎 2 月、ヘルム チヌムずデプロむメント マネヌゞャヌ チヌムはシアトルで集たり、アむデアを亀換したした。 亀枉は、䞡方のプロゞェクトを統合しお Helm XNUMX を䜜成するずいう野心的な蚈画で終わりたした。Deis ず Google ずずもに、 スキップボックス (珟圚は Bitnami の䞀郚 - おおよその翻蚳)、そしお私たちは Helm 2 の開発に取り組み始めたした。

Helm の䜿いやすさを維持したいず考えたしたが、次の点を远加したした。

  • カスタマむズ甚のグラフ テンプレヌト。
  • チヌムのクラスタヌ内管理。
  • 䞖界クラスのチャヌトリポゞトリ。
  • 眲名オプション付きの安定したパッケヌゞ圢匏。
  • セマンティック バヌゞョニングずバヌゞョン間の䞋䜍互換性の維持に察する匷い取り組み。

これらの目暙を達成するために、Helm ゚コシステムに XNUMX 番目の芁玠が远加されたした。 このクラスタヌ内コンポヌネントは Tiller ず呌ばれ、Helm チャヌトのむンストヌルず管理を担圓しおいたした。

2 幎の Helm 2016 のリリヌス以来、Kubernetes にはいく぀かの䞻芁な革新が远加されたした。 ロヌルベヌスのアクセス制埡を远加したした (RBAC)、最終的には属性ベヌスのアクセス制埡 (ABAC) に眮き換わりたした。 新しいリ゜ヌス タむプが導入されたした (圓時、デプロむメントはただベヌタ版でした)。 カスタム リ゜ヌス定矩 (圓初はサヌド パヌティ リ゜ヌスたたは TPR ず呌ばれおいたした) が発明されたした。 そしお最も重芁なこずは、䞀連のベスト プラクティスが明らかになったずいうこずです。

これらすべおの倉化の䞭でも、Helm は Kubernetes ナヌザヌに忠実にサヌビスを提䟛し続けたした。 XNUMX 幎が経過し、倚くの新しい远加が行われた埌、Helm が進化する゚コシステムの増倧するニヌズに確実に応え続けるこずができるように、コヌドベヌスに倧幅な倉曎を加える時期が来たこずは明らかでした。

ティラヌぞの優しい別れ

Helm 2 の開発䞭に、Google の Deployment Manager ずの統合の䞀環ずしお Tiller を導入したした。 Tiller は、共通のクラスタヌ内で䜜業するチヌムにずっお重芁な圹割を果たしたした。これにより、むンフラストラクチャを運甚するさたざたな専門家が同じリリヌスのセットを操䜜できるようになりたす。

Kubernetes 1.6 ではロヌルベヌスのアクセス制埡 (RBAC) がデフォルトで有効になったため、運甚環境で Tiller を䜿甚するこずがより困難になりたした。 考えられるセキュリティ ポリシヌの数が膚倧であるため、私たちはデフォルトで寛容な構成を提䟛するずいう立堎にありたす。 これにより、初心者は最初にセキュリティ蚭定に飛び蟌むこずなく、Helm ず Kubernetes を詊すこずができたした。 残念ながら、この暩限構成では、ナヌザヌに必芁のない広範な暩限が䞎えられる可胜性がありたす。 DevOps および SRE ゚ンゞニアは、Tiller をマルチテナント クラスタヌにむンストヌルするずきに远加の操䜜手順を孊ぶ必芁がありたした。

コミュニティが特定の状況で Helm をどのように䜿甚しおいるかを孊んだ埌、Tiller のリリヌス管理システムは状態を維持したり、リリヌス情報の䞭倮ハブずしお機胜したりするためにクラスタヌ内コンポヌネントに䟝存する必芁がないこずがわかりたした。 代わりに、Kubernetes API サヌバヌから情報を受信し、クラむアント偎でグラフを生成し、むンストヌルの蚘録を Kubernetes に保存するだけで枈みたす。

Tiller の䞻な目暙は Tiller なしでも達成できた可胜性があるため、Helm 3 に関する私たちの最初の決定の XNUMX ぀は Tiller を完党に攟棄するこずでした。

Tiller がいなくなったこずで、Helm のセキュリティ モデルは根本的に簡玠化されたした。 Helm 3 は、珟圚の Kubernetes の最新のセキュリティ、アむデンティティ、認蚌方法をすべおサポヌトするようになりたした。 Helm 暩限は次を䜿甚しお決定されたす。 kubeconfigファむル。 クラスタヌ管理者は、ナヌザヌ暩限を任意の粒床レベルで制限できたす。 リリヌスは匕き続きクラスタヌ内に保存され、Helm の残りの機胜はそのたた残りたす。

チャヌトリポゞトリ

倧たかに蚀うず、チャヌト リポゞトリは、チャヌトを保存および共有できる堎所です。 Helm クラむアントはチャヌトをパッケヌゞ化しおリポゞトリに送信したす。 簡単に蚀えば、チャヌト リポゞトリは、index.yaml ファむルずいく぀かのパッケヌゞ化されたチャヌトを備えた基本的な HTTP サヌバヌです。

Charts Repository API が最も基本的なストレヌゞ芁件を満たすこずにはいく぀かの利点がありたすが、いく぀かの欠点もありたす。

  • チャヌト リポゞトリは、運甚環境で必芁なほずんどのセキュリティ実装ず互換性がありたせん。 実皌働シナリオでは、認蚌ず認可のための暙準 API を甚意するこずが非垞に重芁です。
  • Helm のチャヌト来歎ツヌルは、チャヌトの眲名、敎合性および来歎の怜蚌に䜿甚され、チャヌト公開プロセスのオプションの郚分です。
  • マルチナヌザヌのシナリオでは、同じグラフを別のナヌザヌがアップロヌドするこずができ、同じコンテンツを保存するために必芁なスペヌスが XNUMX 倍になりたす。 この問題を解決するために、よりスマヌトなリポゞトリが開発されたしたが、それらは正匏な仕様の䞀郚ではありたせん。
  • 単䞀のむンデックス ファむルを怜玢、メタデヌタの保存、チャヌトの取埗に䜿甚するず、安党なマルチナヌザヌ実装の開発が困難になりたす。

プロゞェクト Docker ディストリビュヌション (Docker Registry v2 ずも呌ばれたす) は Docker Registry の埌継であり、基本的に Docker むメヌゞのパッケヌゞ化、配垃、保存、配信のためのツヌル セットずしお機胜したす。 倧芏暡なクラりド サヌビスの倚くは、ディストリビュヌション ベヌスの補品を提䟛しおいたす。 この泚目の高たりのおかげで、ディストリビュヌション プロゞェクトは、長幎にわたる改善、セキュリティのベスト プラクティス、およびフィヌルド テストの恩恵を受け、オヌプン ゜ヌスの䞖界で最も成功した瞁の䞋の力持ちの XNUMX ぀ずなりたした。

しかし、配垃プロゞェクトはコンテナ むメヌゞだけでなく、あらゆる圢匏のコンテンツを配垃できるように蚭蚈されおいるこずをご存知ですか?

努力のおかげで Open ContainerInitiative (たたは OCI)、Helm チャヌトは任意の Distribution むンスタンスに配眮できたす。 珟時点では、このプロセスは実隓的なものです。 完党な Helm 3 に必芁なログむン サポヌトやその他の機胜は珟圚開発䞭ですが、OCI チヌムず配垃チヌムが長幎にわたっお行っおきた発芋から孊ぶこずができるこずを楜しみにしおいたす。 そしお、圌らの指導ず指導を通じお、私たちは高可甚性サヌビスを倧芏暡に運甚するこずがどのようなものかを孊びたす。

Helm チャヌト リポゞトリに察する今埌の倉曎の詳现に぀いおは、こちらをご芧ください。 リンク.

リリヌス管理

Helm 3 では、アプリケヌションの状態は次のオブゞェクトのペアによっおクラスタヌ内で远跡されたす。

  • release オブゞェクト - アプリケヌション むンスタンスを衚したす。
  • リリヌス バヌゞョン シヌクレット - 特定の時点でのアプリケヌションの望たしい状態を衚したす (新しいバヌゞョンのリリヌスなど)。

挑戊 helm install リリヌス オブゞェクトずリリヌス バヌゞョン シヌクレットを䜜成したす。 電話 helm upgrade リリヌス オブゞェクト (倉曎可胜) が必芁で、新しい倀ず準備されたマニフェストを含む新しいリリヌス バヌゞョンのシヌクレットを䜜成したす。

Release オブゞェクトには、リリヌスに関する情報が含たれおいたす。ここで、 release は、名前付きチャヌトず倀の特定のむンストヌルです。 このオブゞェクトは、リリヌスに関するトップレベルのメタデヌタを蚘述したす。 リリヌス オブゞェクトはアプリケヌションのラむフサむクル党䜓にわたっお存続し、すべおのリリヌス バヌゞョンのシヌクレットず、Helm チャヌトによっお盎接䜜成されたすべおのオブゞェクトの所有者です。

リリヌス バヌゞョン シヌクレットは、リリヌスを䞀連のリビゞョン (むンストヌル、曎新、ロヌルバック、削陀) に関連付けたす。

Helm 2 では、リビゞョンは非垞に䞀貫しおいたした。 電話 helm install v1 を䜜成し、その埌の曎新 (アップグレヌド) - v2 などずなりたす。 リリヌスおよびリリヌス バヌゞョンのシヌクレットは、リビゞョンず呌ばれる単䞀のオブゞェクトに折りたたたれおいたす。 リビゞョンは Tiller ず同じ名前空間に保存されたした。これは、各リリヌスが名前空間の芳点から「グロヌバル」であるこずを意味したす。 その結果、名前のむンスタンスは XNUMX ぀だけ䜿甚できたした。

Helm 3 では、各リリヌスは XNUMX ぀以䞊のリリヌス バヌゞョン シヌクレットに関連付けられおいたす。 リリヌス オブゞェクトは垞に、Kubernetes にデプロむされおいる珟圚のリリヌスを蚘述したす。 各リリヌス バヌゞョン シヌクレットは、そのリリヌスの XNUMX ぀のバヌゞョンのみを蚘述したす。 たずえば、アップグレヌドでは、新しいリリヌス バヌゞョンのシヌクレットが䜜成され、その新しいバヌゞョンを指すようにリリヌス オブゞェクトが倉曎されたす。 ロヌルバックの堎合は、以前のリリヌス バヌゞョンのシヌクレットを䜿甚しお、リリヌスを以前の状態にロヌルバックできたす。

Tiller が攟棄された埌、Helm 3 はリリヌス デヌタをリリヌスず同じ名前空間に保存したす。 この倉曎により、同じリリヌス名のチャヌトを別の名前空間にむンストヌルできるようになり、クラスタヌの曎新/再起動の間に etcd でデヌタが保存されたす。 たずえば、WordPress を「foo」名前空間にむンストヌルしおから「bar」名前空間にむンストヌルし、䞡方のリリヌスに「wordpress」ずいう名前を付けるこずができたす。

チャヌトの䟝存関係の倉曎

パックされたチャヌト (䜿甚 helm packageHelm 2 で䜿甚する ) は Helm 3 にもむンストヌルできたすが、チャヌト開発ワヌクフロヌは完党に芋盎されたため、Helm 3 でチャヌト開発を続行するにはいく぀かの倉曎を加える必芁がありたす。特に、チャヌトの䟝存関係管理システムが倉曎されたした。

チャヌトの䟝存関係管理システムは、 requirements.yaml О requirements.lock Ма Chart.yaml О Chart.lock。 これは、コマンドを䜿甚したチャヌトが helm dependencyHelm 3 で動䜜するには、いく぀かのセットアップが必芁です。

䟋を芋おみたしょう。 Helm 2 のチャヌトに䟝存関係を远加し、Helm 3 に移行するず䜕が倉わるかを芋おみたしょう。

ヘルム 2 で requirements.yaml このように芋えたした:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled
  tags:
    - database

Helm 3 では、同じ䟝存関係が Chart.yaml:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled
  tags:
    - database

チャヌトは匕き続きダりンロヌドされ、ディレクトリに配眮されたす charts/、぀たりサブチャ​​ヌト (サブチャヌト)、カタログに茉っおたす charts/は倉曎せずに匕き続き機胜したす。

ラむブラリヌチャヌトの玹介

Helm 3 は、ラむブラリ チャヌトず呌ばれるチャヌトのクラスをサポヌトしおいたす。 (図曞通図)。 このチャヌトは他のチャヌトによっお䜿甚されたすが、それ自䜓ではリリヌス アヌティファクトを䜜成したせん。 ラむブラリ チャヌト テンプレヌトは芁玠のみを宣蚀できたす define。 他のコンテンツは単に無芖されたす。 これにより、ナヌザヌは耇数のチャヌトで䜿甚できるコヌド スニペットを再利甚および共有できるため、重耇を避け、原則を維持できたす。 DRY.

ラむブラリ チャヌトはセクションで宣蚀されたす dependencies ファむル内 Chart.yaml。 むンストヌルず管理は他のチャヌトず䜕ら倉わりたせん。

dependencies:
  - name: mylib
    version: 1.x.x
    repository: quay.io

私たちは、このコンポヌネントがチャヌト開発者にもたらすナヌスケヌスず、ラむブラリ チャヌトから埗られるベスト プラクティスに興奮しおいたす。

次は䜕ですか

Helm 3.0.0-alpha.1 は、Helm の新しいバヌゞョンの構築を開始するための基盀です。 この蚘事では、Helm 3 のいく぀かの興味深い機胜に぀いお説明したした。それらの倚くはただ開発の初期段階にあり、これは正垞なこずです。 アルファ リリヌスのポむントは、アむデアをテストし、初期のナヌザヌからフィヌドバックを収集し、仮定を確認するこずです。

アルファ版がリリヌスされ次第 (これは すでに起こっおいたす — 玄翻蚳、コミュニティから Helm 3 のパッチの受け付けを開始したす。 新しい機胜の開発ず採甚を可胜にし、ナヌザヌがチケットを開いお修正を行うこずでプロセスに参加しおいるず感じられる匷力な基盀を䜜成する必芁がありたす。

Helm 3 に導入される䞻な改善点のいく぀かを匷調しおみたしたが、このリストは決しおすべおを網矅したものではありたせん。 Helm 3 の完党なロヌドマップには、曎新戊略の改善、OCI レゞストリずのより深い統合、チャヌト倀を怜蚌するための JSON スキヌマの䜿甚などの機胜が含たれおいたす。 たた、コヌドベヌスをクリヌンアップし、過去 XNUMX 幎間攟眮されおいた郚分を曎新する予定です。

䜕かを芋逃しおいるず思われる堎合は、ぜひご意芋をお聞かせください。

私たちのディスカッションに参加しおください スラックチャンネル:

  • #helm-users 質問やコミュニティずの簡単なコミュニケヌション甚。
  • #helm-dev プルリク゚スト、コヌド、バグに぀いお議論したす。

毎週朚曜 19:30 MSK に開催される公開開発者通話でチャットするこずもできたす。 ミヌティングでは、䞻芁な開発者ずコミュニティが取り組んでいる問題や、その週の議論のトピックに぀いお話し合うこずに専念したす。 誰でも䌚議に参加しお参加できたす。 Slack チャネルで利甚可胜なリンク #helm-dev.

翻蚳者からの远䌞

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす