序章

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

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

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

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

ヘルムの概要

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

ヘルム缶:

  • ソフトウェアをインストールする。
  • ソフトウェアの依存関係を自動的にインストールします。
  • ソフトウェアをアップグレードします。
  • ソフトウェアの展開を構成します。
  • リポジトリからソフトウェアパッケージを取得します。

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

  • すべてのHelm機能へのユーザーインターフェイスを提供するコマンドラインツールhelm
  • コンパニオンサーバーコンポーネントtillerは、Kubernetesクラスターで実行され、helmからのコマンドをリッスンし、クラスターでのソフトウェアリリースの構成とデプロイを処理します。
  • チャートと呼ばれるヘルムパッケージ形式。
  • 人気のあるオープンソースソフトウェアプロジェクト用にパッケージ化されたチャートを備えた公式キュレートチャートリポジトリ

次に、グラフの形式について詳しく調べます。

チャート

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プログラミング言語のテンプレート形式を使用します。
  • Chart.yaml:チャートの名前とバージョン、メンテナ情報、関連するWebサイト、検索キーワードなど、チャートに関するメタデータを含むYAMLファイル。
  • ライセンス:チャートのプレーンテキストライセンス。
  • README.md:チャートのユーザー向けの情報を含むreadmeファイル。
  • requirements.yaml:チャートの依存関係をリストするYAMLファイル。
  • values.yaml:チャートのデフォルト構成値のYAMLファイル。

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

次に、チャートリポジトリを見ていきます。

チャートリポジトリ

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

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

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

ローカルで開発したチャートをインストールする場合でも、リポジトリから作成したチャートをインストールする場合でも、特定のセットアップ用にチャートを構成する必要があります。 次に、構成を調べます。

チャート構成

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

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

いくつかの値の例のスニペットを次に示します。

values.yaml
service:
  type: ClusterIP
  port: 3306

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

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

特定の構成で展開されたHelmチャートは、リリースと呼ばれます。 次にリリースについて話します。

リリース

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

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

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

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

チャートの作成

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

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

helmコマンドには、チャートのテスト、パッケージ化、および提供に役立つ多くのサブコマンドがあります。 詳細については、チャートの作成に関するHelmの公式ドキュメントをお読みください。

結論

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

Helmの詳細については、公式のHelmドキュメントを参照してください。 Helmの公式チャートを見つけるには、GitHubの公式helm/chartsGitリポジトリをチェックしてください。