web-dev-qa-db-ja.com

Kubernetesのhelmのサブチャートでテンプレートに定義された値を参照する方法は?

私たちのサービスのヘルムチャートを書き始めています。

それらがどのように機能するか、またはそれらをどう処理するかがわからない2つのことがあります。

最初:リリース名。チャートをインストールするときに、helmがリリースの作成に使用する名前を指定します。このリリース名は、チャートのインストールを相互に適切に分離するために、チャート内でよく参照されますか?たとえば、postgresチャートには次が含まれます。

{{- define "postgresql.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}

その後、サービスに使用されます:

metadata:
  name: {{ template "postgresql.fullname" . }}

Kubernetesでは、最終的には "myrelease-postgresql"のように見えます。良いリリース名は何だろうか?これには通常何が使用されますか?バージョン?または、ubuntuリリースのようなコードネームはありますか?

2番目:値を参照します。

私のチャートは、サブチャートとしてpostgresqlを使用しています。 postgresqlサービスの名前の値が作成される方法を複製したくない(上記の抜粋を参照)。

サブチャートのサービス名を参照する方法、またはテンプレートが{{template "postgresql.fullname"を定義する方法はありますか? }}親グラフで?それをデータベースホストとしてサービスに渡すために必要です(すべてをハードコードする場合に機能しますが、これは意味がありません)。

私は試した:

      env:
        - name: DB_Host
          value: {{ template "mychart.postgresql.fullname" . }}

しかし、それはエラーメッセージにつながります:

template "mychart.postgresql.fullname" not defined

odoo チャートのように、同様のことを行うチャートの例を見てきました。ただし、ここでは、postgresqlのホスト名の作成方法がコピーされ、テンプレートに独自の定義が作成されます。

それでは、サブチャート名にアクセスする方法はありますか?または値またはテンプレートが定義しますか?

ありがとう!

いくつかの掘削後に更新:サブチャートとグローバル に従って、テンプレートはチャート間で共有されます。

だから私にできることはこれです:

_helpers.tplのチャートにpostgresブロックを追加(上書き)します:

{{- define "postgresql.fullname" -}}
{{- $name := .Values.global.name -}}
{{- printf "%s-%s" $name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

したがって、この値は、サブチャートが展開されるときに使用されます。ここではすべての値やチャート名を参照できません。サブチャートでは異なるため、グローバル値を使用しました。

このように、サブチャートで作成されるサービスの価値を知っています。

これがこれを行う最善の方法であるかどうかはわかりません:-/

19
wemu

チャートのサブチャートとしてpostgresqlを(チャートのrequirements.yaml経由で)引き込んでいますか?その場合、postgresql(サブ)チャートとチャートの両方に同じ.Release.Nameがあります。したがって、コンテナーの環境を次のように指定できます。

  env:
    - name: DB_Host
      value: {{ printf "%s-postgresql" .Release.Name }}

チャートのvalues.yamlに以下を追加してpostgresqlの名前をオーバーライドした場合:

postgresql:
  nameOverride: your-postgresql

コンテナのenvは次のようになります。

  env:
    - name: DB_Host
      value: {{ printf "%s-%s" .Release.Name .Values.postgresql.nameOverride }}
4
matth-boise

ここで説明するように、サブチャートのvaluesを親チャートの値で上書きできます。 https://github.com/kubernetes /helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

サブチャートのテンプレート名をオーバーライドすることは不可能だと思います(また、意味をなさない)。

私がやることは、親チャートとサブチャートの両方の.Valuesファイルでデータベースサービス名を定義し、サブチャートの1つをヘルムにオーバーライドすることです-そのようにして、親チャートに常にデータベース名があります。ただし、これはデータベースのサービス名が{{ template "name" . }}ではなく、{{ .Values.database.service.name }}のようなものであることを意味します

mychart/.Values

mysubchart:
   service:
      name: my-database

mychart/templates/deployment.yaml

env:
   - name: DB_Host
     value: {{ .Values.mysubchart.service.name }}

mychart/charts/mysubchart/.Values

service:
   name: my-database

mychart/charts/mysubchart/templates/service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.service.name }}

別の方法は、 https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md で説明されているグローバルチャート値を使用することです

1
vdimitrov