[Helm]依存関係(dependency)のあるChartをインストールしない方法

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本記事はHelmの依存関係(dependency)を条件によって、有効もしくは無効にしたいと考えている人を対象としています。

はじめに

HelmはKubernetesのパッケージ管理ソフトウェアです。Helm Hubと呼ばれるChartのリポジトリを利用することで、Kubernetesの利用で手間がかかるマニフェストファイルの作成や確認を楽にすることができます。Helm Hubを活用する方法のひとつとして、dependencyがあります。

Helmでは、依存関係のあるChartをdependencyとして記述することで、Chartの依存関係を定義することができます。例えばwordpressというChartにNginxとMySQLのChartが必要な場合、dependencyとしとnginxとmysqlのChartを定義します。

しかし、環境によっては依存関係がいらない場合もあります。例えば、Ingressを使う場合、開発環境では依存関係としてNginx Ingressが必要だが、本番環境ではNginx Ingressはいらな場合などです。

本記事ではHelmのdependencyを条件によって有効もしくは無効にする方法を紹介します。

TL;DR

  • Helm Chartの依存関係はrequirements.yamlに定義する。
  • requirements.yamlのオプションであるtagconditionを利用することで、依存関係のChartを有効にするか無効にするかの制御ができる。
  • tagconditionのboolean値は、親のvalues.yamlで定義する。

目次

  1. 検証環境
  2. Helm Chartの依存関係の定義方法
  3. 条件によって依存関係をインストールさせない方法
  4. まとめ
  5. さいごに

検証環境

検証はDocker Desktop for WindowsのKubernetesで行いました。

Helm Chartの依存関係の定義方法

はじめにHelm Chartでの依存関係の定義方法を確認しておきましょう。Chart名はdependencyとし、任意のdependencyディレクトリで以下の作業をおこないます。

Helm ChartではChartの依存関係をrequirements.yamlファイルの記述します。dependencyディレクトリにrequirements.yamlファイルを作成します。

Chart.yamlも作成します。

helm dependency updateコマンドでChartの依存関係を更新します。コマンドを実行すると依存関係で定義したChartがchartsディレクトリにダウンロードされます。

helm installコマンドでインストールを実行します。

依存関係に定義したMemcachedとRedisのインストールが実行されています。このように通常は依存関係に定義したChartのすべてがインストールされます。

依存関係の確認ができたら、インストールしたChartを削除しておきましょう。依存関係のあるChartも通常のChartと同じくhelm deleteコマンドで削除できます。

それでは条件によって依存関係のChartをインストールしたくない場合は、どのようにしたらよいのでしょうか。

条件によって依存関係をインストールさせない方法

Helm Chartの依存関係はrequirements.yamlに定義します。requirements.yamlにはtagconditionという2つのオプションがあります。本記事ではconditionを利用して依存関係の有効、無効化を行う方法を紹介します。

はじめに先ほど用意したrequirements.yamlにconditionを追加します。

次に、values.yamlファイルを用意します。enabledはbooleanの値を指定します。values.yamlは依存元(親)のファイルで、依存Chartのvalues.yaml(この例の場合はmemcachedもしくはredis)ではないことに注意してください。

この条件でインストールをしてみると、どのようになるでしょうか。

tureに設定したMemcachedだけインストールされ、falseに設定したRedisはインストールされませんでした。このようにrequirements.yamlのconditonを指定することにより、条件に応じて依存関係のChartのインストールを行うことができます。

memcached.enabled redis.enabled installed
true true memcahced, redis
true false memcached
false true redis
false false None

その他の依存関係を制御しているHelmチャートのサンプルを、以下のURLで公開しています。
https://github.com/easydoggie/EasyDoggie/tree/master/ingress/ingress
このチャートは条件によってNginx-Ingressのインストールの有無を制御しています。
インストール方法の詳細は、別ページを参照してください。

まとめ

  • Helm Chartの依存関係はrequirements.yamlに定義する。
  • requirements.yamlのオプションであるtagconditionを利用することで、依存関係のChartを有効にするか無効にするかの制御ができる。
  • tagconditionのboolean値は、親のvalues.yamlで定義する。

さいごに

本記事ではHelm Chartの依存関係を条件によって制御する方法を紹介しました。コンテナはポータビリティがメリットの一つですが、ローカルの開発環境などは機能の制限などがあり本番環境の代替ソフトウェアが必要な場合があります。このような環境間の差異をアプリケーション開発者に意識させないために、今回紹介した依存関係の制御方法などを上手に活用していきたいですね。

スカイアーチ ファンタジー研究室

スカイアーチ ファンタジー研究室