前書き
強力で一般的なコンテナオーケストレーションシステムである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
コマンドで追加できます。 人気のある代替リポジトリは次のとおりです。
-
stableの準備がまだ整っていないチャートを含むThe official incubator repo。 incubatorの使用手順は、the official Helm charts GitHub pageにあります。
-
公式のstableリポジトリでカバーされていないいくつかのチャートを提供するBitnami Helm Charts。
ローカルで開発したチャートをインストールする場合でも、レポから作成したチャートをインストールする場合でも、特定の設定に合わせて構成する必要があります。 次に設定について見ていきます。
チャート構成
チャートには通常、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をチェックしてください。