web-dev-qa-db-fra.com

Comment référencer une valeur définie dans un modèle dans un sous-graphique en barre pour kubernetes?

Je commence à écrire des graphiques de barre pour nos services.

Il y a deux choses que je ne sais pas comment ils sont censés fonctionner ou quoi en faire.

Premièrement: le nom de la version. Lors de l'installation d'un graphique, vous spécifiez un nom que Helm utilise pour créer une version. Ce nom de version est souvent référencé dans un graphique pour isoler correctement les installations de graphiques les unes des autres? Par exemple, le graphique postgres contient:

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

Qui est ensuite utilisé pour le service:

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

Cela ressemble à "myrelease-postgresql" à la fin dans kubernetes. Je me demande ce qu'est un bon nom de version? Qu'est-ce qui est généralement utilisé pour cela? Une version? Ou un nom de code comme les versions d'ubuntu?

Deuxièmement: référencer des valeurs.

Mon graphique utilise postgresql comme sous-graphique. Je ne voudrais pas dupliquer la façon dont la valeur du nom du service postgresql est créée (voir ci-dessus).

Existe-t-il un moyen de référencer le nom de service d'un sous-graphique ou ce modèle définit {{template "postgresql.fullname". }} dans le graphique parent? J'en ai besoin pour le transmettre à mon service en tant qu'hôte de base de données (qui fonctionne si je code tout, mais cela ne peut pas être le sens de cela).

J'ai essayé:

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

Mais cela mène à un message d'erreur:

template "mychart.postgresql.fullname" not defined

J'ai vu des exemples de graphiques faisant des choses similaires, comme le graphique odoo . Mais ici, cette logique de création du nom d'hôte postgresql est copiée et une définition propre dans le modèle est créée.

Existe-t-il un moyen d'accéder aux noms des sous-graphiques? Ou des valeurs ou un modèle définit?

Merci!

Mise à jour après quelques recherches: Selon Sous-graphiques et globaux les modèles sont partagés entre les graphiques.

Donc, ce que je peux faire, c'est ceci:

Dans mon graphique dans _helpers.tpl j'ajoute (écrase) le bloc postgres:

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

Cette valeur est donc utilisée lorsque le sous-graphique est déployé. Je ne peux pas référencer toutes les valeurs ou le nom du graphique ici car il sera différent dans le sous-graphique - j'ai donc utilisé une valeur globale.

Comme cela, je connais la valeur du service qui est créé dans le sous-graphique.

Je ne sais pas si c'est la meilleure façon de le faire: - /

19
wemu

Tirez-vous postgresql en tant que sous-graphique de votre graphique (via le requirements.yaml)? Si c'est le cas, le graphique postgresql (sub) et votre graphique auront le même.Release.Name - ainsi, vous pouvez spécifier l'environnement de votre conteneur comme

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

si vous remplacez le nom de postgresql en ajoutant ce qui suit au values.yaml:

postgresql:
  nameOverride: your-postgresql

alors l'env de votre conteneur serait:

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

Vous pouvez remplacer les valeurs du sous-graphique par les valeurs du graphique parent comme décrit ici: https://github.com/kubernetes /helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

Je ne pense pas qu'il soit possible (et cela n'a pas de sens) de remplacer le nom du modèle du sous-graphique.

Ce que je ferais, c'est définir le nom du service de base de données dans les fichiers .Values ​​à la fois dans les graphiques parent et secondaire et laisser la barre remplacer celui du sous-graphique - de cette façon, vous aurez toujours le nom de la base de données dans le graphique parent. Cela signifierait cependant que le nom de service de la base de données ne devrait pas être {{ template "name" . }}, mais quelque chose comme {{ .Values.database.service.name }}

mychart/.Valeurs

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 }}

Une autre façon consiste à utiliser des valeurs de graphique globales, également décrites dans https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md

1
vdimitrov