web-dev-qa-db-ja.com

複数の値ファイルに複数のリストがあるヘルムチャート

次の値を含むvalues.yamlがあります。

abc:
  env:
  - name: name01
    value: value01
  - name: name02
    value: value02

-fを使用してインストールするときに追加する値ファイルvalues-dev.yamlがあり、次のようになっています。

abc:
  env:
  - name: name03
    value: value03

範囲を使用して、テンプレートにリストします。両方のファイルを適用すると、リストが次のようになることを願っています。

abc:
  env:
  - name: name01
    value: value01
  - name: name02
    value: value02
  - name: name03
    value: value03

しかし、values-dev.yamlの値は、values.yamlの値をオーバーライドし、次のようになります。

abc:
  env:
  - name: name03
    value: value03

これらの2つのリストを、異なる値ファイルの同じフィールド名でマージするにはどうすればよいですか?

4
arash moeen

簡単に言えば、listsをマージすることはできません。

あなたの場合abc.envkeyで、valueはリストです。最初の値ファイルを同等の表記で書き直してみましょう。

abc:
  env: [{name: name01, value: value01}, {name: name02, value: value02}]

Helmは、キーabc.env最後に提供されたもの。

解決策は、次のように値ファイルを再構築することです:

abc:
  env:
    name01: value01
    name02: value02

このようにして、必要に応じて値ファイルをマージおよびオーバーライドできます。このように、コマンドラインフラグを使用して単一の値をオーバーライドするのも簡単です。次に例を示します。

--set abc.env.name01=different

Helmの魔法を使えば、これらの値を環境変数としてポッドに簡単に渡すことができます。

...
  containers:
  - name: abc
    image: abc
    env:
    {{- range $key, $value := .Values.abc.env }}
    - name: {{ $key }}
      value: {{ $value | quote }}
    {{- end }}  
1
r a f t

私は個人的には複数のenv値ファイルを好みません。最善の方法は、このアプローチを使用することです。

このようなものを持つ単一の値ファイルを保持します。

mongodb_ip:
  prod: 10.0.2.201
  staging: 10.0.2.202
  test: 10.0.2.203
  dev: 10.0.2.204

そしてあなたの設定ファイルまたはデプロイメントファイル内であなたは使用して値を呼び出すことができます

data:
  debug: 'false'
  mongodb_ip: '{{ pluck .Values.envName .Values.mongodb_ip | first }}'

そして、helm installまたはhelm upgradeの前にCI/CDパイプラインでこのコマンドを実行しますが、yqツールがインストールされていることを確認してください。または、任意のツールを使用して同じことを行うことができます。

yq w -i values.yaml envName dev

このプロセス全体で、構成ファイルが10.0.2.204のmongodb ipに置き換えられます。これは、yqツールでdevを指定したためです。

これは、単一の値ファイルを作成し、複数の値ファイルではなく、必要に応じて複数のリージョンまたは環境に設定する方法のサンプルです。

一方、使用法に基づいて言ったように、-valuesまたは-fフラグを使用することもできます。そして、このようなことを試してください。これは、複数のクライアントなどで複数のファイルを使用する場合です。

helm install ./path --values ./generic-values.yaml --values ./dev-values.yaml

お役に立てば幸いです。

0
BinaryMonster