es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  ,

Answer

  1. Avatar for 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:

    1. Crea un archivo values.yaml para el gráfico principal con un parámetro para el nombre del secreto:
      postgresql:
       secretName: {{ include "myapp.fullname" . }}-secret
      
    2. En el directorio templates/ del gráfico principal, crea un archivo postgresql-secret.yaml con el siguiente contenido:
      apiVersion: v1
      kind: Secret
      metadata:
       name: {{ .Values.postgresql.secretName }}
       type: Opaque
      data:
       PG_CONN_STRING: {{ tpl "postgresql.connString" . | b64enc | quote }}
      

      Ten en cuenta que el nombre del secreto se genera utilizando la función tpl para llamar a una plantilla con nombre postgresql.connString.

    3. En el directorio templates/ del gráfico principal, crea un archivo postgresql-service.yaml con el siguiente contenido:

      apiVersion: v1
      kind: Service
      metadata:
       name: {{ include "postgresql.fullname" . }}
       labels:
         app: {{ include "postgresql.name" . }}
      spec:
       ports:
         - port: {{ .Values.postgresql.service.port }}
           targetPort: postgresql
       selector:
         app: {{ include "postgresql.name" . }}
         release: {{ .Release.Name }}
      

    4. En el directorio templates/ del gráfico principal, crea un archivo prometheus-postgres-exporter.yaml con el siguiente contenido:
      prometheus-postgres-exporter:
       serviceMonitor:
         enabled: true
       config:
         datasourceSecret:
           name: {{ .Values.postgresql.secretName }}
           key: PG_CONN_STRING
      
    5. En el archivo Chart.yaml del gráfico principal, añade una dependencia para el subgráfico prometheus-postgres-exporter:
      dependencies:
       - name: prometheus-postgres-exporter
         version: <versión>
         repository: <repositorio>
      
    6. En el archivo values.yaml del gráfico prometheus-postgres-exporter, añade el siguiente parámetro:
      postgresqlSecretName: "{{ include "myapp.postgresql.secretName" . }}"
      
    7. En el archivo values.yaml del gráfico prometheus-postgres-exporter, modifica la sección config para utilizar el parámetro del nombre del secreto:
      config:
       datasourceSecret:
         name: {{ .Values.postgresqlSecretName }}
         key: PG_CONN_STRING
      

    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>

Comments are closed.