2017-12-11 2 views
0

Ich fange an, Helmkarten für unsere Dienste zu schreiben.Wie referenziere ich einen Wert in einer Vorlage in einem Sub-Diagramm in Helm für Kubernetes?

Es gibt zwei Dinge, von denen ich nicht weiß, wie sie funktionieren sollen oder was sie damit machen sollen.

Zuerst: der Freigabename. Wenn Sie ein Diagramm installieren, geben Sie einen Namen an, mit dem Helm ein Release erstellt. Dieser Freigabename wird oft in einem Diagramm referenziert, um Chart-Installationen voneinander zu isolieren. Zum Beispiel des Postgres Diagramm enthält:

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

, die dann für den Dienst verwendet wird:

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

Es sieht wie "myrelease-postgresql" am Ende in Kubernetes. Ich frage mich, was ein guter Release-Name ist? Was wird typischerweise dafür verwendet? Eine Version? Oder ein Codename wie die Ubuntu-Versionen?

Zweitens: Referenzwerte.

Mein Diagramm verwendet Postgresql als Sub-Chart. Ich möchte nicht kopieren, wie der Wert für den Namen des postgresql-Dienstes erstellt wird (siehe oben).

Gibt es eine Möglichkeit, ich kann den Service-Namen eines Sub-Chart oder dieser Vorlage verweisen definieren {{template "postgresql.fullname". }} im übergeordneten Diagramm? Ich brauche es, um es als Datenbank-Host in meinen Dienst zu übergeben (was funktioniert, wenn ich alles fest programmiere, aber das kann nicht die Bedeutung davon sein).

Ich habe versucht:

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

Aber das Blei in einer Fehlermeldung: tun ähnliche Dinge, wie die odoo Chart

template "mychart.postgresql.fullname" not defined 

Ich habe Beispiele von Charts gesehen. Aber hier wird die Logik, mit der der Postgresql-Hostname erstellt wird, kopiert und eine eigene Definition in der Vorlage erstellt.

Gibt es eine Möglichkeit, auf Sub-Chart-Namen zuzugreifen? Oder Werte oder Vorlage definiert?

Danke!

-Update nach einigen Graben: Nach Subcharts and Globals die Vorlagen zwischen Diagrammen gemeinsam genutzt werden.

Also, was kann ich tun, ist dies:

In meinem Diagramm in _helpers.tpl mich hinzufügen (überschreiben), um den Postgres-Block:

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

Also dieser Wert verwendet wird, wenn die Sub-Chart ist bereitgestellt. Ich kann hier nicht alle Werte oder den Chartnamen referenzieren, da es im Sub-Chart anders sein wird - also habe ich einen globalen Wert verwendet.

So kenne ich den Wert des Dienstes, der im Sub-Chart erstellt wird.

Nicht sicher, ob dies der beste Weg, dies zu tun ist: -/

Antwort

1

Sie können die Werte der Subchart mit den Werten des übergeordneten Diagramm überschreiben, wie hier beschrieben: https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

I glaube nicht, dass es möglich ist (und es macht auch keinen Sinn), den Vorlagennamen des Subchart zu überschreiben.

Was ich tun würde ist, den Namen des Datenbank-Service in den .Values-Dateien sowohl in den Eltern-und Sub-Charts zu definieren und lassen Sie Helm im Subchart überschreiben - auf diese Weise haben Sie immer den Namen der Datenbank im übergeordneten Diagramm. Dies würde bedeuten jedoch, dass der Dienstname der Datenbank nicht {{ template "name" . }} sein sollte, aber so etwas wie {{ .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 

mycha rt/Charts/mysubchart/templates/service.yaml:

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

Ein anderer Weg ist die globale Diagrammwerte zu verwenden, beschrieben auch in https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

+0

danke für die Antwort! aber das ist nicht das, was vor sich geht. Das Sub-Chart ist das Postgresql-Chart von kubeapps. Der Dienstname wird nicht über values.yaml konfiguriert. Es basiert auf dem Namen des Diagramms und des Releases. Daher möchte ich, dass der daraus resultierende Servicename in meinem Diagramm referenziert. Eine Art, die Diagramme miteinander zu verbinden, da sie kommunizieren müssen. Ich kann den Dienstnamen teilweise angeben, aber es ist Länge begrenzt und deshalb möchte ich nur den resultierenden Dienstnamen auslesen. Ich nehme an, das Postgres-Chart ist so, wie es gemacht wurde - das könnte falsch sein:/ – wemu

0

sind Sie als Subchart des Diagramms in postgresql ziehen (über Ihre Diagramm Anforderungen.yaml)? wenn ja, sowohl die postgresql (sub) Diagramm und das Diagramm wird die gleiche .Release.Name haben - damit Sie Ihren Containers env

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

wenn Sie postgresql Namen außer Kraft setzen, indem Sie die folgenden zu Ihrem Chart als

angeben könnte values.yaml:

postgresql: 
    nameOverride: your-postgresql 

dann env Ihr Containers wäre:

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

funktioniert das?

+0

Danke für die Antwort! Das würde auch funktionieren, aber ich kämpfe mit dem Release-Namen, da seine einzigartige Per-Piller-Instanz und wir haben Dev, Test, etc im selben kubernetes-Cluster Ich will nicht, dass die Release-Namen Teil der Service-Namen sein. Da dies bereits durch die Namespaces erfolgt (ein Namespace für Dev, Test, etc). Es ist auch schwierig mit unserer Namensgebung gute Namen für Releases zu finden, die die Services nicht duplizieren. Die Verwendung von nameOverride für fast alles macht die Voreinstellungen verdächtig. Der Release-Name für uns ist nur für gängige Charts wie Postgres nützlich. – wemu

Verwandte Themen