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

前書き

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

https://www.helm.sh [Helm]は、Kubernetesのパッケージマネージャーであり、開発者とオペレーターがアプリケーションやサービスをより簡単にパッケージ化、構成、Kubernetesクラスターに展開できるようにします。

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

この記事では、Helmの概要と、Kelbernetesへのアプリケーションのデプロイを簡素化するために使用するさまざまな抽象化について説明します。 Kubernetesを初めて使用する場合は、https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes [Kubernetesの紹介]を読んでから基本的な概念を理解しておくと役立つ場合があります。

ヘルムの概要

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

ヘルム缶:

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

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

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

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

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

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

  • コマンドラインツール、「+ helm +」。すべてのHelm機能へのユーザーインターフェイスを提供します。

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

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

  • https://github.com/helm/charts [公式キュレーションチャートリポジトリ]。人気のあるオープンソースソフトウェアプロジェクト用の事前にパッケージ化されたチャートが含まれています。

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

チャート

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

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

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

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

  • * charts /:*手動で管理されるチャートの依存関係はこのディレクトリに配置できますが、通常、依存関係を動的にリンクするには `+ requirements.yaml +`を使用する方が適切です。

  • * templates /:*このディレクトリには、設定値( `+ values.yaml +`およびコマンドラインから)と結合され、Kubernetesマニフェストにレンダリングされるテンプレートファイルが含まれます。 テンプレートはhttps://golang.org/pkg/text/template[Goプログラミング言語のテンプレート形式]を使用します。

  • * 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 +`のGoogleストレージバケットを指します。 * stable *リポジトリのソースはhttps://github.com/helm/charts/tree/master/stable[GitHubのhelm / charts Gitリポジトリ]にあります。

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

  • https://github.com/helm/charts/tree/master/incubator [公式*インキュベーター*リポジトリ]には、*安定*の準備が整っていないチャートが含まれています。 * incubator *の使用手順は、https://github.com/helm/charts [公式HelmチャートGitHubページ]にあります。

  • Bitnami Helm Chartsは、公式の* stable *リポジトリでカバーされていないチャートを提供します。

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

チャート構成

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

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

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

values.yaml

service:
 type: ClusterIP
 port: 3306

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

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

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

リリース

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

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

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

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

チャートを作成する

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

そこから、チャートのメタデータを `+ Chart.yaml `に記入し、Kubernetesマニフェストファイルを ` templates `ディレクトリに配置します。 次に、マニフェストから ` values.yaml +`に関連する構成変数を抽出し、https://golang.org/pkg/text/template [テンプレートシステム]を使用してマニフェストテンプレートにそれらを含める必要があります。 。

`+ helm +`コマンドには、チャートのテスト、パッケージ化、提供に役立つ多くのサブコマンドがあります。 詳細については、https://docs.helm.sh/developing_charts [チャート作成に関するHelmの公式ドキュメント]を参照してください。

結論

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

Helmの詳細については、https://docs.helm.sh [Helmの公式ドキュメント]をご覧ください。 Helmの公式チャートを見つけるには、https://github.com/helm/charts [GitHubの公式helm / charts Gitリポジトリ]をご覧ください。

前の投稿:Dockerの一般的な問題をデバッグおよび修正する方法
次の投稿:Ubuntu 14.04でApache Traffic Serverをリバースプロキシとして設定する方法