序章

強力で人気のあるコンテナオーケストレーションシステムである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ファイル。

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

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

チャートリポジトリ

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

Helmには、stableと呼ばれるデフォルトのチャートリポジトリが事前設定されています。 このリポジトリは、次のGoogleStorageバケットを指します https://kubernetes-charts.storage.googleapis.com. 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. これにより、上記のChartsセクションで説明したファイルとディレクトリを含むフォルダが作成されます。

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

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

結論

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

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