本記事は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のオプションである
tag
、condition
を利用することで、依存関係のChartを有効にするか無効にするかの制御ができる。 tag
やcondition
のboolean値は、親のvalues.yamlで定義する。
目次
検証環境
検証は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にはtag
とcondition
という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のオプションである
tag
、condition
を利用することで、依存関係のChartを有効にするか無効にするかの制御ができる。 tag
やcondition
のboolean値は、親のvalues.yamlで定義する。
さいごに
本記事ではHelm Chartの依存関係を条件によって制御する方法を紹介しました。コンテナはポータビリティがメリットの一つですが、ローカルの開発環境などは機能の制限などがあり本番環境の代替ソフトウェアが必要な場合があります。このような環境間の差異をアプリケーション開発者に意識させないために、今回紹介した依存関係の制御方法などを上手に活用していきたいですね。
投稿者プロフィール
最新の投稿
AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
セキュリティ2021年7月14日ゼロデイ攻撃とは
セキュリティ2021年7月14日マルウェアとは
WAF2021年7月13日クロスサイトスクリプティングとは?