2017-12-11 1 views
0

私は私たちのサービスのためのヘルムチャートを書き始めています。kubernetesのhelmのサブチャートのテンプレートに定義されている値を参照する方法は?

私は彼らがどのように動作するか、それらと何をするのかわからない2つのことがあります。

最初に:リリース名。チャートをインストールするときに、ヘルムがリリースを作成するために使用する名前を指定します。このリリース名は、チャートのインストールを適切に分離するためにチャート内で参照されることがよくあります。例えば、Postgresのチャートが含まれています

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

それはkubernetesで最後に "myrelease-PostgreSQLの" ように見えるん:そのサービスのために使用されている

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

。 良いリリース名は何ですか?これには一般的に何が使用されていますか?バージョン?または、ubuntuのリリースのようなコードネーム?

第2:参照値。

マイ・チャートでは、サブグラフとしてpostgresqlを使用しています。私は、postgresqlサービスの名前の値が作成される方法を複製したくありません(上記のsnippedを参照)。

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

は、私が試した:

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

しかし、エラーメッセージにそのリードは:

template "mychart.postgresql.fullname" not defined 

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

サブチャートの名前にアクセスする方法はありますか?または値やテンプレートによって定義されますか?

ありがとうございます!いくつかの掘削後

更新:テンプレートはチャートの間で共有されているSubcharts and Globalsによる

それでは、私にできることはこれです:

_helpers.tplの私のチャートでは、私は(上書き)Postgresのブロックを追加します。

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

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

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

ない、これは、これを行うための最善の方法である場合を確認します - ここで説明するようにあなたが親グラフの値で値サブチャートのを上書きすることができます/

答えて

1

https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

私はサブチャートのテンプレート名を上書きすることは可能ではないと考えています。

私は、親チャートと副チャートの両方の.Valuesファイルにデータベースサービス名を定義し、親チャートのデータベース名をhelmでサブチャートの中に置き換えます。しかし、これはデータベースのサービス名は{{ template "name" . }}すべきではないという意味ではなく、{{ .Values.database.service.name }}

mychart/.Values

mysubchart: 
    service: 
     name: my-database 

mychart /テンプレート/ deployment.yaml

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

mychartのようなものでしょう/charts/mysubchart/.Values

service: 
    name: my-database 

mychaあなた経由で(

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

もう一つの方法は、グローバルチャート値を使用することで、またhttps://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

+0

返信いただきありがとうございます!しかし、これは何が起こっているかではありません。サブチャートは、kubeappsのpostgresqlチャートです。 services-nameはvalues.yamlによって構成されません。チャート名とリリース名に基づいて作成されます。だから私は、その結果のサービス名を私のチャートで参照するようにしたい。コミュニケーションが必要なので、チャートをまとめて並べ替えます。私は部分的にサービス名を指定することができますが、長さが制限されているので、結果として得られるサービス名を読みたいだけです。私は、postgresのチャートは、その仕方の一種であると仮定します - それは間違っている可能性があります:/ – wemu

0

で説明し、あなたのチャートのサブチャートとしてのpostgresqlに引いている:RT /チャート/ mysubchart /テンプレート/ service.yamlチャートの要件.yaml)?もしそうであれば、PostgreSQLの(サブ)グラフとチャートの両方が同じ.Release.Nameを持つことになります - あなたは、チャートのに次を追加することにより、PostgreSQLの名前を上書きした場合ので、あなたは

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

としてあなたコンテナのENVを指定することができますvalues.yaml:

postgresql: 
    nameOverride: your-postgresql 

、あなたのコンテナのENVは次のようになります。

env: 
    - name: DB_HOST 
     value: {{ printf "%s-%s" .Release.Name .Values.postgresql.nameOverride }} 

は、その仕事をしますか?

+0

返信いただきありがとうございます!それもうまくいくだろうが、私はリリース名で闘争している。それは、その耕うんのインスタンスごとに固有で、同じkubernetesクラスター内にdev、testなどがあるから、私はリリース名をサービス名の一部にしたくない。それは既にネームスペース(dev、testなどのための一つのネームスペース)によって行われています。また、サービス自体を複製しないリリースの名前を思いつくのは難しいです。ほとんどの場合、nameOverrideを使用すると、デフォルトの疑わしいものになります。私たちのリリース名は、ポストグルのような一般的なチャートでのみ役に立ちます。 – wemu

関連する問題