私たちのサービスのヘルムチャートを書き始めています。
それらがどのように機能するか、またはそれらをどう処理するかがわからない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 -}}
したがって、この値は、サブチャートが展開されるときに使用されます。ここではすべての値やチャート名を参照できません。サブチャートでは異なるため、グローバル値を使用しました。
このように、サブチャートで作成されるサービスの価値を知っています。
これがこれを行う最善の方法であるかどうかはわかりません:-/
チャートのサブチャートとして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 }}
ここで説明するように、サブチャートの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 で説明されているグローバルチャート値を使用することです