¿Es posible hacer referencia al nombre generado del template Helm desde el archivo de valores?
Mientras componía el chart de Helm con varios sub-charts, me encontré con una colisión. En resumen, estoy creando una configuración con un valor generado, y el nombre de la configuración es generado automáticamente. Sin embargo, el subchart espera que se hagan referencias directas a los nombres generados en el archivo Values.yaml.
En realidad, esto se trata de un servicio con una base de datos PostgreSQL y estoy tratando de instalar “prometheus-postgres-exporter” para habilitar la monitorización de Prometheus para la base de datos. Pero eso no es lo importante.
Entonces, tengo una configuración para construir la cadena de conexión de la base de datos:
apiVersion: v1
kind: Secret
metadata:
name: {{ include "myapp.fullname" . }}-secret
type: Opaque
data:
PG_CONN_STRING: {{ printf "postgresql://%s:%s@%s:%s/%s" .Values.postgresql.postgresqlUsername .Values.postgresql.postgresqlPassword (include "postgresql.fullname" .) .Values.postgresql.service.port .Values.postgresql.postgresqlDatabase | b64enc | quote }}
Ok, eso funciona bien. Sin embargo, cuando intento instalar “prometheus-postgres-exporter”, se requiere especificar el nombre de un secreto específico donde se puede obtener la cadena de conexión de la base de datos. Tengo un problema con que el nombre debe ser generado, por lo que no puedo proporcionar un valor exacto. ¿No estoy seguro de cómo puedo hacer referencia a eso? Obviamente, pasar el mismo código de plantilla no funciona, ya que la sustitución es de una sola pasada, no recursiva.
prometheus-postgres-exporter:
serviceMonitor:
enabled: true
config:
datasourceSecret:
name: "{{ include "myapp.fullname" . }}-secret" # No funciona, desafortunadamente
key: "PG_CONN_STRING"
¿Existe alguna forma conocida de superar esto aparte de codificar los valores manualmente?
davy.ai
Una solución a este problema es utilizar la función
tpl
de Helm para generar el nombre del secreto y luego pasarlo como parámetro tanto al gráfico principal como al subgráfico.Aquí tienes un ejemplo:
values.yaml
para el gráfico principal con un parámetro para el nombre del secreto:templates/
del gráfico principal, crea un archivopostgresql-secret.yaml
con el siguiente contenido:Ten en cuenta que el nombre del secreto se genera utilizando la función
tpl
para llamar a una plantilla con nombrepostgresql.connString
.En el directorio
templates/
del gráfico principal, crea un archivopostgresql-service.yaml
con el siguiente contenido:templates/
del gráfico principal, crea un archivoprometheus-postgres-exporter.yaml
con el siguiente contenido:Chart.yaml
del gráfico principal, añade una dependencia para el subgráficoprometheus-postgres-exporter
:values.yaml
del gráficoprometheus-postgres-exporter
, añade el siguiente parámetro:values.yaml
del gráficoprometheus-postgres-exporter
, modifica la secciónconfig
para utilizar el parámetro del nombre del secreto:Con estos cambios, el nombre del secreto se genera en el gráfico principal, se pasa como parámetro tanto al gráfico principal como al subgráfico, y se referencia correctamente en la sección
config
del subgráfico.</versión>