valuesファイル

前のセクションでは、Helmテンプレートが提供する組み込みオブジェクトについて説明しました。組み込みオブジェクトの1つはValuesです。このオブジェクトは、チャートに渡された値へのアクセスを提供します。その内容は、複数のソースから取得されます。

  • チャート内のvalues.yamlファイル
  • これがサブチャートの場合、親チャートのvalues.yamlファイル
  • -fフラグを使用して、valuesファイルがhelm installまたはhelm upgradeに渡されます(例:helm install -f myvals.yaml ./mychart)。
  • 個々のパラメータは--setを使用して渡されます(例:helm install --set foo=bar ./mychart)。

上記のリストは、特異性の順序です。values.yamlがデフォルトであり、親チャートのvalues.yamlで上書きでき、さらにユーザーが提供したvaluesファイルで上書きでき、最後に--setパラメータで上書きできます。

valuesファイルはプレーンなYAMLファイルです。mychart/values.yamlを編集し、次にConfigMapテンプレートを編集しましょう。

values.yamlのデフォルトを削除し、1つのパラメータだけを設定します。

favoriteDrink: coffee

これで、テンプレート内でこれを使用できます。

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favoriteDrink }}

最後の行で、Valuesの属性としてfavoriteDrinkにアクセスしていることに注意してください:{{ .Values.favoriteDrink }}

これがどのようにレンダリングされるか見てみましょう。

$ helm install geared-marsupi ./mychart --dry-run --debug
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart

NAME: geared-marsupi
LAST DEPLOYED: Wed Feb 19 23:21:13 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
favoriteDrink: coffee

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: coffee

favoriteDrinkがデフォルトのvalues.yamlファイルでcoffeeに設定されているため、テンプレートに表示される値はそれです。helm installへの呼び出しで--setフラグを追加することで、簡単に上書きできます。

$ helm install solid-vulture ./mychart --dry-run --debug --set favoriteDrink=slurm
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart

NAME: solid-vulture
LAST DEPLOYED: Wed Feb 19 23:25:54 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
favoriteDrink: slurm

COMPUTED VALUES:
favoriteDrink: slurm

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: solid-vulture-configmap
data:
  myvalue: "Hello World"
  drink: slurm

--setはデフォルトのvalues.yamlファイルよりも優先順位が高いため、テンプレートはdrink: slurmを生成します。

valuesファイルには、より構造化されたコンテンツを含めることもできます。たとえば、values.yamlファイルにfavoriteセクションを作成し、そこにいくつかのキーを追加できます。

favorite:
  drink: coffee
  food: pizza

テンプレートを少し変更する必要があります。

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink }}
  food: {{ .Values.favorite.food }}

このようにデータを構造化することは可能ですが、値のツリーを浅く保ち、フラットさを優先することをお勧めします。サブチャートに値を割り当てる方法を見ると、ツリー構造を使用して値に名前を付ける方法がわかります。

デフォルトキーの削除

デフォルト値からキーを削除する必要がある場合は、キーの値をnullに上書きできます。その場合、Helmは上書きされた値のマージからキーを削除します。

たとえば、安定版のDrupalチャートでは、カスタムイメージを構成する場合に、ライブネスプローブを構成できます。デフォルト値を以下に示します。

livenessProbe:
  httpGet:
    path: /user/login
    port: http
  initialDelaySeconds: 120

--set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt]を使用して、livenessProbeハンドラーをhttpGetではなくexecに上書きしようとすると、Helmはデフォルトキーと上書きされたキーをまとめて結合し、次のYAMLになります。

livenessProbe:
  httpGet:
    path: /user/login
    port: http
  exec:
    command:
    - cat
    - docroot/CHANGELOG.txt
  initialDelaySeconds: 120

しかし、複数のlivenessProbeハンドラーを宣言することはできないため、Kubernetesは失敗します。これを克服するには、nullに設定することで、livenessProbe.httpGetを削除するようにHelmに指示できます。

helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null

この時点で、いくつかの組み込みオブジェクトを見て、それらを使用してテンプレートに情報を挿入しました。次に、テンプレートエンジンの別の側面である関数とパイプラインを見ていきます。