KubernetesのパッケージマネージャーであるHelmの紹介

前書き

強力で一般的なコンテナオーケストレーションシステムであるKubernetesへのアプリケーションの展開は複雑になる可能性があります。 単一のアプリケーションをセットアップするには、ポッド、サービス、デプロイメント、レプリカセットなど、相互に依存する複数のKubernetesリソースを作成し、それぞれに詳細なYAMLマニフェストファイルを記述する必要があります。

HelmはKubernetesのパッケージマネージャーであり、開発者とオペレーターがアプリケーションとサービスをより簡単にパッケージ化、構成、Kubernetesクラスターにデプロイできるようにします。

Helmは現在公式のKubernetesプロジェクトであり、Kubernetesエコシステム内およびその周辺のオープンソースプロジェクトをサポートする非営利団体であるCloud Native Computing Foundationの一部です。

この記事では、Helmの概要と、Kelbernetesへのアプリケーションのデプロイを簡素化するために使用するさまざまな抽象化について説明します。 Kubernetesを初めて使用する場合は、最初にAn Introduction to Kubernetesを読んで、基本的な概念を理解しておくと役立つ場合があります。

ヘルムの概要

ほとんどすべてのプログラミング言語とオペレーティングシステムには、ソフトウェアのインストールとメンテナンスを支援する独自のパッケージマネージャーがあります。 Helmは、DebianのaptやPythonのpipなど、すでに使い慣れている多くのパッケージマネージャーと同じ基本機能セットを提供します。

ヘルム缶:

  • ソフトウェアをインストールする。

  • ソフトウェアの依存関係を自動的にインストールします。

  • ソフトウェアをアップグレードします。

  • ソフトウェアの展開を構成します。

  • リポジトリからソフトウェアパッケージを取得します。

Helmは、次のコンポーネントを通じてこの機能を提供します。

  • すべてのHelm機能へのユーザーインターフェイスを提供するコマンドラインツールhelm

  • Kubernetesクラスターで実行され、helmからのコマンドをリッスンし、クラスターでのソフトウェアリリースの構成とデプロイを処理するコンパニオンサーバーコンポーネントtiller

  • chartsと呼ばれるHelmパッケージ形式。

  • 人気のあるオープンソースソフトウェアプロジェクト用にパッケージ化されたチャートを含むofficial curated charts repository

次に、グラフ形式についてさらに詳しく調査します。

チャート

Helmパッケージはchartsと呼ばれ、KubernetesマニフェストファイルにレンダリングされるいくつかのYAML構成ファイルといくつかのテンプレートで構成されます。 グラフの基本的なディレクトリ構造は次のとおりです。

チャートディレクトリの例

package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml

これらのディレクトリとファイルには、次の機能があります。

  • charts/:手動で管理されるチャートの依存関係はこのディレクトリに配置できますが、通常はrequirements.yamlを使用して依存関係を動的にリンクすることをお勧めします。

  • templates/:このディレクトリには、構成値(values.yamlおよびコマンドラインから)と組み合わされ、Kubernetesマニフェストにレンダリングされるテンプレートファイルが含まれます。 テンプレートはGo programming language’s template formatを使用します。

  • Chart.yaml:チャートの名前とバージョン、メンテナ情報、関連するWebサイト、検索キーワードなど、チャートに関するメタデータを含むYAMLファイル。

  • LICENSE:チャートのプレーンテキストライセンス。

  • README.md:チャートのユーザー向けの情報を含むreadmeファイル。

  • requirements.yaml:グラフの依存関係を一覧表示するYAMLファイル。

  • values.yaml:チャートのデフォルト構成値のYAMLファイル。

helmコマンドは、ローカルディレクトリから、またはこのディレクトリ構造の.tar.gzパッケージバージョンからチャートをインストールできます。 これらのパッケージ化されたチャートは、チャートリポジトリまたはreposから自動的にダウンロードしてインストールすることもできます。

次に、チャートリポジトリについて説明します。

チャートリポジトリ

Helmチャートリポジトリは、index.yamlファイルと.tar.gzパッケージチャートを提供する単純なHTTPサイトです。 helmコマンドには、チャートのパッケージ化と必要なindex.yamlファイルの作成に役立つサブコマンドがあります。 これらのファイルは、任意のWebサーバー、オブジェクトストレージサービス、またはGitHub Pagesなどの静的サイトホストによって提供できます。

Helmには、stableと呼ばれるデフォルトのチャートリポジトリが事前構成されています。 このリポジトリは、https://kubernetes-charts.storage.googleapis.comのGoogleStorageバケットを指しています。 stableリポジトリのソースは、the helm/charts Git repository on GitHubにあります。

代替リポジトリは、helm repo addコマンドで追加できます。 人気のある代替リポジトリは次のとおりです。

ローカルで開発したチャートをインストールする場合でも、レポから作成したチャートをインストールする場合でも、特定の設定に合わせて構成する必要があります。 次に設定について見ていきます。

チャート構成

チャートには通常、values.yamlファイルにデフォルトの構成値が含まれています。 一部のアプリケーションはデフォルト値で完全にデプロイできる場合がありますが、通常はニーズに合わせていくつかの構成をオーバーライドする必要があります。

構成用に公開される値は、チャートの作成者によって決定されます。 Kubernetesプリミティブを構成するために使用されるものもあれば、アプリケーション自体を構成するために基礎となるコンテナーに渡されるものもあります。

次に、いくつかのサンプル値のスニペットを示します。

values.yaml

service:
  type: ClusterIP
  port: 3306

これらは、KubernetesServiceリソースを設定するためのオプションです。 helm inspect values chart-nameを使用して、チャートで使用可能なすべての構成値をダンプできます。

これらの値は、独自のYAMLファイルを書き込んでhelm installを実行するときに使用するか、コマンドラインで--setフラグを使用してオプションを個別に設定することでオーバーライドできます。 デフォルトから変更する値のみを指定する必要があります。

特定の構成で展開されたヘルムチャートは、releaseと呼ばれます。 次にリリースについて説明します。

リリース

チャートのインストール中に、Helmはチャートのテンプレートを、ユーザーが指定した構成およびデフォルトのvalue.yamlと組み合わせます。 これらはKubernetesマニフェストにレンダリングされ、Kubernetes APIを介して展開されます。 これにより、release、特定の構成、および特定のチャートの展開が作成されます。

同じアプリケーションをクラスターに複数回デプロイする場合があるため、このリリースの概念は重要です。 たとえば、構成が異なる複数のMySQLサーバーが必要になる場合があります。

また、チャートの異なるインスタンスを個別にアップグレードすることもできます。 おそらく、1つのアプリケーションは更新されたMySQLサーバーの準備ができていますが、別のアプリケーションは準備ができていません。 Helmでは、各リリースを個別にアップグレードします。

リリースがアップグレードされたのは、チャートが更新されたため、またはリリースの構成を更新したい場合です。 いずれにせよ、アップグレードするたびにリリースの新しいrevisionが作成され、Helmを使用すると、問題が発生した場合に以前のリビジョンに簡単にロールバックできます。

チャートを作成する

展開しているソフトウェアの既存のグラフが見つからない場合は、独自のグラフを作成できます。 Helmは、helm create chart-nameを使用してチャートディレクトリのスキャフォールドを出力できます。 これにより、上記のChartsセクションで説明したファイルとディレクトリを含むフォルダが作成されます。

そこから、グラフのメタデータをChart.yamlに入力し、Kubernetesマニフェストファイルをtemplatesディレクトリに配置します。 次に、関連する構成変数をマニフェストからvalues.yamlに抽出し、the templating systemを使用してマニフェストテンプレートに戻す必要があります。

helmコマンドには、チャートのテスト、パッケージ化、および提供に役立つ多くのサブコマンドがあります。 詳細については、the official Helm documentation on developing chartsをお読みください。

結論

この記事では、KubernetesのパッケージマネージャーであるHelmを確認しました。 Helmアーキテクチャと個々のhelmおよびtillerコンポーネントの概要を説明し、Helmチャート形式の詳細を示し、チャートリポジトリを確認しました。 また、Helmチャートの構成方法、および構成とチャートがKubernetesクラスター上のリリースとしてどのように結合およびデプロイされるかについても検討しました。 最後に、適切なチャートがまだ利用可能でない場合のチャート作成の基本に触れました。

Helmの詳細については、the official Helm documentationを参照してください。 Helmの公式チャートを見つけるには、the official helm/charts Git repository on GitHubをチェックしてください。