1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Helmで複数の変数定義ファイルを指定する

1
Last updated at Posted at 2023-02-03

概要

Helmチャートで使う変数はvalues.yamlに定義するのがデフォルトですが、環境によって値を変えたい場合に変数定義ファイル一つだと結構使いにくいです。(templatesディレクトリ内のマニフェストの中でif文などを入れて対応可能ですが、ソースの可読性が落ちます...)
そこで公式ドキュメントを見てみると、helm install時のオプションで複数の変数定義ファイルを指定できるようなので、本記事で実際に試してみようと思います。

とりあえず結論

以下のように、-f(または--values)オプションで複数の変数定義ファイルを指定可能です。

$ helm install [NAME] [CHART] -f [変数定義ファイル1] -f [変数定義ファイル2]

公式ドキュメントからの抜粋

--values (または -f): 上書きする YAML ファイルを指定します。 これは複数回指定でき、一番右のファイルが優先されます

では実際の挙動を確認していきましょう。

環境情報

Helmのバージョンはv3.10.2

$ helm version
version.BuildInfo{Version:"v3.10.2", GitCommit:"50f003e5ee8704ec937a756c646870227d7c8b58", GitTreeState:"clean", GoVersion:"go1.19.3"}

ディレクトリ構成

以下のように、デフォルトのvalues.yamlに加えてvaluesディレクトリに環境毎の変数定義ファイルを格納しています。

.
├── Chart.yaml
├── templates
│   └── configmap.yaml
├── values               # 環境別の変数定義ファイルを格納
│   ├── kameda.yaml
│   ├── mochikichi.yaml
│   └── yatsuhashi.yaml
└── values.yaml          # デフォルトで使う変数を定義

共通に使うファイル内容

変数定義ファイル

values.yaml
common:
  country: "Japan"

company:
  name: "default"
  prefecture: "Kyoto"

テンプレート内には値を確認する用のConfigMapを定義

templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: company-wagashi
data:
  country: {{ .Values.common.country }}
  {{- range $key, $value := .Values.company }}
  {{ $key }}: {{ $value }}
  {{- end }}

確認

まずは、デフォルトの状態で生成されるマニフェストを確認してみます。

実際はhelm installでクラスターに反映されますが、今回はhelm templateで生成マニフェストの中身のみ確認します。

$ helm template .
---
# Source: some-path/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: company-wagashi
data:
  country: Japan
  name: default
  prefecture: Kyoto

values.yamlの内容が素直に反映されています。

続いて、以下のvalues/kameda.yamlのファイルを引数指定してみます。

values/kameda.yaml
company:
  name: "Kameda"
  prefecture: "Tokyo"
$ helm template . -f values/kameda.yaml
---
# Source: some-path/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: company-wagashi
data:
  country: Japan
  name: Kameda
  prefecture: Tokyo

nameprefectureの内容が変わっていることを確認できました。

values.yamlの中身は-fオプションで指定しなくても反映されます。

次は以下のように、keyを新たに加えたもので確認してみます。

values/mochikichi.yaml
company:
  name: "Mochikichi"
  prefecture: "Fukuoka"
  founding-date: "1929-09-01"
$ helm template . -f values/mochikichi.yaml
---
# Source: some-path/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: company-wagashi
data:
  country: Japan
  founding-date: 1929-09-01
  name: Mochikichi
  prefecture: Fukuoka

founding-dateのキーが新たに加わりました。

反対に、次のようにデフォルトで存在するキーprefectureを定義しない場合はどうなるでしょうか。

values/yatsuhashi.yaml
company:
  name: "Yatsuhashi"
$ helm template . -f values/yatsuhashi.yaml
---
# Source: some-path/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: company-wagashi
data:
  country: Japan
  name: Yatsuhashi
  prefecture: Kyoto

values.yamlprefectureの値Kyotoが反映されました。

また複数ファイルを指定した場合は、公式ドキュメントにも記載があるように一番右(=最後)に指定したファイルの内容が優先されることも確認できます。

$ helm template . -f values/yatsuhashi.yaml -f values/kameda.yaml
---
# Source: some-path/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: company-wagashi
data:
  country: Japan
  name: Kameda
  prefecture: Tokyo

おわりに

今回ご紹介したお話は、GitHubのissue(Helm multiple environments best practices)でも話題になっており「よさそう!」と回答が出ていました

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?