KubernetesのパッケージマネージャーであるHelmの紹介
序章
強力で人気のあるコンテナオーケストレーションシステムである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
にあるGoogleStorageバケットを指しています。 stable リポジトリのソースは、GitHubのhelm/chartsGitリポジトリにあります。
helm repo add
コマンドを使用して、代替リポジトリを追加できます。 人気のある代替リポジトリは次のとおりです。
- 安定版の準備がまだ整っていないチャートを含む公式インキュベーターリポジトリ。 インキュベーターの使用方法は、公式HelmチャートGitHubページにあります。
- Bitnami Helm Charts は、公式のstableリポジトリでカバーされていないチャートを提供します。
ローカルで開発したチャートをインストールする場合でも、リポジトリから作成したチャートをインストールする場合でも、特定のセットアップ用にチャートを構成する必要があります。 次に、構成を調べます。
チャート構成
チャートには通常、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
を使用してチャートディレクトリのスキャフォールドを出力できます。 これにより、上記のChartsセクションで説明したファイルとディレクトリを含むフォルダが作成されます。
そこから、チャートのメタデータをChart.yaml
に入力し、Kubernetesマニフェストファイルをtemplates
ディレクトリに配置します。 次に、関連する構成変数をマニフェストからvalues.yaml
に抽出し、テンプレートシステムを使用してマニフェストテンプレートに戻す必要があります。
helm
コマンドには、チャートのテスト、パッケージ化、および提供に役立つ多くのサブコマンドがあります。 詳細については、チャートの作成に関するHelmの公式ドキュメントをお読みください。
結論
この記事では、KubernetesのパッケージマネージャーであるHelmを確認しました。 Helmアーキテクチャと個々のhelm
およびtiller
コンポーネントの概要を説明し、Helmチャート形式の詳細を示し、チャートリポジトリを確認しました。 また、Helmチャートを構成する方法と、構成とチャートを組み合わせて、Kubernetesクラスターでリリースとしてデプロイする方法についても検討しました。 最後に、適切なチャートがまだ利用できない場合のチャート作成の基本に触れました。
Helmの詳細については、公式のHelmドキュメントを参照してください。 Helmの公式チャートを見つけるには、GitHubの公式helm/chartsGitリポジトリをチェックしてください。